我想获取Test-Path
另一个查询返回的计算机列表的结果(或最终能够运行任何命令),但我得到的返回信息是错误的
这是我的代码
$AD_list = (Get-ADComputer -Filter *).Name
$py_path = "C:\Python39"
Invoke-Command -ArgumentList ($AD_list) -ScriptBlock {
foreach ($machine in $AD_list) {
Test-Path $py_path
}
}
尝试过将其$AD_list
作为$args[0]
位置参数传递或声明,param([System.Collections.ArrayList]$AD_list)
但没有成功
我感谢任何线索或反馈。
答案1
Invoke-Command 本身已经接受主机数组:
$hosts = ("hostA", "hostB", "hostC")
$results = Invoke-Command $hosts {Test-Path $using:py_path}
请注意,您需要$using:X
从脚本块内部引用“外部”变量。
整个脚本块已在每台机器上运行,因此如果foreach
需要,则需要将其定位外部脚本块的外部,而不是内部。例如:
foreach ($host in $hosts) { icm $host {Test-Path...} }
类似地,这里也可以使用%
或:ForEach-Object
$hosts | % { icm $_ {Test-Path...} }
答案2
我最终在 foreach 中使用了 Invoke-Command,它对我有用
$AD_list = (Get-ADComputer -Filter *).Name
foreach ($machine in $AD_list) {
$result = Invoke-Command -ComputerName $machine -ScriptBlock {
Test-Path "C:\Python39" -ErrorAction SilentlyContinue
}
Write-Host "Results for $machine"
Write-Host $result
}