【发布时间】:2021-06-19 21:13:33
【问题描述】:
晚上好。
我第一次尝试使用并行,但我不明白如何在 foreach 循环中调用函数。
我收到一系列此错误:无法将参数绑定到参数“路径”,因为它为空。
这是我到目前为止所做的:
$FolderPath = "C:\myfolder\"
function AppendLog ($client) {
$so = New-CimSessionOption -Protocol 'DCOM'
$s = New-CimSession -ComputerName $client -SessionOption $so
Add-Content -Path (join-path $folderpath "LOGS.txt") -Value ( (get-date -Format "[yyyy.MM.dd HH:mm:ss]").tostring() + $client + " -PING: OK")
$arch = Get-CimInstance –query "select * from win32_operatingsystem" -CimSession $s | select -expandproperty osarchitecture
Add-Content -Path (join-path $folderpath "LOGS.txt") -Value ( (get-date -Format "[yyyy.MM.dd HH:mm:ss]").tostring() + $client + " -ARCH:" + $arch )
$lastboot = Get-CimInstance –query "select * from win32_operatingsystem" -CimSession $s | select -expandproperty lastbootuptime
Add-Content -Path (join-path $folderpath "LOGS.txt") -Value ( (get-date -Format "[yyyy.MM.dd HH:mm:ss]").tostring() + $client + " -BOOT:" + $lastboot )
}
$funcDef = $function:AppendLog.ToString()
$clients = get-content -path (join-path $folderPath "client.txt")
$clients | ForEach-Object -parallel {
if (test-connection $_ -count 2 -Quiet)
{
$function:AppendLog = $using:funcDef
AppendLog ($_)
}
} -throttlelimit 3
Could you explain me how to pass my path?
【问题讨论】:
-
试试
$using:_。顺便说一句,你可以与多台计算机建立一个CimSession,也可以用CimInstace同时查询多台计算机,比ForEach -Parallel效率高得多。 -
您应该可以只使用
AppendLog $_,而psitem($_)周围没有括号。包括尝试扩展它
标签: function powershell parallel.foreach