gpt4 book ai didi

powershell - foreach - 与 powershell 7 并行

转载 作者:行者123 更新时间:2023-12-01 23:07:26 25 4
gpt4 key购买 nike

我正在努力解决以下问题。我正在尝试从我们的 2016 年终端服务器接收当前安装的边缘版本。但是当我运行下面的代码时,powershell 显示我安装了版本 95.0.1020.30。

$Servers = get-content C:\users\xxx\Documents\Servers.txt 

$servers|foreach-object -parallel {
Get-Ciminstance -ComputerName $Servers -Class Win32_Product | where {$_.Name -Like "*Edge*"} | foreach {$_.Version}
}

现在到了有趣的部分:当我使用通常的 foreach 循环时,它会返回正确的版本。

$Servers = get-content C:\users\cma-admin\Documents\Servers.txt
foreach($server in $servers){
Get-Ciminstance -ComputerName $Server -Class Win32_Product | where {$_.Name -Like "*Edge*"} |
foreach {$_.Version}

}

我很乐意将它与“-parallel”一起使用,因为它可以更快地获取这些信息。我确实在强大的互联网上爬了很多,但我没有发现任何特定于这个“错误”的东西。我不太确定我是否正确使用了 foreach -parallel。

最好的问候,

黏土

最佳答案

使用 $servers | foreach-object -parallel { ... } 要求您使用 automatic $_ variable在脚本 block 中引用当前服务器(管道输入对象):

$servers|foreach-object -parallel {
# Note the use of $_
Get-Ciminstance -ComputerName $_ -Class Win32_Product |
where {$_.Name -Like "*Edge*"} |
foreach {$_.Version}
}

但是,不需要循环(具有并行性),因为 CIM cmdlet,例如 Get-CimInstance具有并行性内置,您可以通过将服务器名称的数组传递给-ComputerName 来利用它:

Get-Ciminstance -ComputerName $servers -Class Win32_Product |
where Name -Like "*Edge*" |
foreach Version

注意:上面使用了simplified syntax .

结果将以无特定顺序到达。您可以使用 PowerShell 装饰所有输出对象的 .PSComputerName 属性来标识特定结果对象的来源服务器。

关于powershell - foreach - 与 powershell 7 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70580070/

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