gpt4 book ai didi

powershell - 获取远程设备的 Chrome 版本

转载 作者:行者123 更新时间:2023-12-04 01:09:16 33 4
gpt4 key购买 nike

我正在使用 PS V3.0 查看 Google chrome 版本:

get-content -Path C:\Support\assets.txt | ForEach-Object ({get-wmiobject win32_product -ComputerName $_  | where-Object {$_.name -eq "google chrome"}  |FT version})

{write-host "$_"}

txt文件里面是远程设备的IP地址。

该命令运行良好并为我提供了 Chrome 版本,但我无法在循环中包含 IP 地址。

它只给我 chrome 版本,没有它来自哪个远程设备的信息。我想要这样的东西:

IP address - Chrome versionIP address - Chrome version

据我所知,它应该是 Foreach (action){do something}?

是否还有机会从输入中删除单词“version”?

最佳答案

好的,您犯了一些非常无辜的初学者类型的错误,但这很容易补救。

让我们从 ft 开始。 ftFormat-Table 的缩写。一般来说,当您尝试输出某些内容时,您只会使用 Format- 命令。您正在尝试使用它的结果,而不是输出它,所以我们需要删除 ft。而是使用 Select-Object cmdlet(或者更常用的是更短的 select)。

get-content -Path C:\Support\assets.txt | ForEach-Object ({get-wmiobject win32_product -ComputerName $_  | where-Object {$_.name -eq "google chrome"}  |Select version})

好的,这为您提供了一组仅具有 Version 属性的对象。不是很有用,尤其是当您想知道每台计算机与哪台计算机关联时!所以,总的来说这是一个很好的教训,但在这里不是很实用。让我们继续努力,让事情变得更好!

通过将内容管道化到这样的 ForEach 循环,您正在使事情变得比需要的更难。您正在对每个 IP 地址进行单独的 Get-WMIObject 调用。如果我们查看 get-help get-wmiobject -parameter computername,我们可以看到它接受一个字符串数组。所以我们可以对多个目标进行 1 次调用,这应该有助于加快速度。

$IPList = get-content -Path C:\Support\assets.txt
Get-WMIObject win32_product -ComputerName $IPList | Where{$_.Name -eq 'Google Chrome'}

这应该会稍微加快你的结果,但是让事情变得更快的是使用 Get-WMIObject-Filter 参数而不是 在哪里。原因是与 PowerShell 相比,提供者在过滤自己的对象并返回您想要的内容方面效率更高。此外,这减少了从远程机器发回的数据,因此您只能从它们那里获取所需的数据,而不是每台机器可能有数百个结果,然后再解析为您想要的数据。本质上,所有计算机的处理器都在处理您的问题,而不仅仅是您自己的。因此,让我们使用 -Filter 参数:

$IPList = get-content -Path C:\Support\assets.txt
Get-WMIObject win32_product -ComputerName $IPList -Filter "Name='Google Chrome'"

好的,现在应该可以更快地恢复了。所以一直到最后一项,您都需要找到每个版本所在的计算机名称。好消息,你已经拥有了!好吧,我们有计算机的实际名称,而不是您指定的 IP 地址。它默认不显示,但每个结果都有一个 PSComputerName 属性供您引用。我们可以简单地通过管道传输到 Select 并指定我们想要的属性:

$IPList = get-content -Path C:\Support\assets.txt
Get-WMIObject win32_product -ComputerName $IPList -Filter "Name='Google Chrome'" | Select PSComputerName,Version

这可能会让您获得满意的结果。如果没有,您可以像以前一样通过 ForEach 循环运行它,并按照您指定的方式对其进行格式化:

$IPList = get-content -Path C:\Support\assets.txt
ForEach($IP in $IPList){
$Version = Get-WMIObject win32_product -ComputerName $IP -Filter "Name='Google Chrome'" | Select -Expand Version
"$IP - $Version"
}

关于powershell - 获取远程设备的 Chrome 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43529145/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com