我有这个powershell代码,我想开始工作.它目前不评估$ agent变量.
foreach ($agent in $agentcomputers) {
Write-Output 'Starting agent on '$agent
# psexc to start the agent
Start-Job -ScriptBlock {& psexec $agent c:\grinder\examples\startAgent.cmd}
}
Run Code Online (Sandbox Code Playgroud)
这看起来类似于我的问题,除了我没有调用外部PowerShell脚本.
https://sqlblog.org/2011/01/29/powershell-start-job-scriptblock-sad-panda-face
我尝试添加它,使用$ args [0] for $ agent并添加-ArgumentList参数,但这不起作用.
感谢您的任何帮助,您可以提供.
编辑/回信......
这是$ agentcomputers,只是一个计算机名称列表.每个都在它自己的线上.
$agentcomputers = Get-Content c:\grinder-dist\agent-computers.txt
Run Code Online (Sandbox Code Playgroud)
我也试过这个 - 而$ args [0]没有评估
Start-Job -ScriptBlock {& psexec $args[0] c:\grinder\examples\startAgent.cmd} -ArgumentList @($agent)
Run Code Online (Sandbox Code Playgroud)
T.C*_*.CK 10
以下是我将采用的3种不同方式.首先,所有对齐和漂亮.
$agents = Get-Content c:\grinder-dist\agent-computers.txt
$jobs = {
Param($agent)
write-host "Starting agent on" $agent
& psexec \\$agent c:\grinder\examples\startAgent.cmd
}
foreach($agent in $agents) {
Start-Job -ScriptBlock $jobs -argumentlist $agent | Out-Null
}
Get-Job | Wait-Job | Receive-Job
Run Code Online (Sandbox Code Playgroud)
或者你可以把它全部放在一行而不创建任何变量.
(Get-Content c:\grinder-dist\agent-computers.txt) | %{ Start-Job -ScriptBlock { param($_) write-host "Starting agent on" $_; & psexec \\$_ c:\grinder\examples\startAgent.cmd } -argumentlist $_ | Out-Null }
Get-Job | Wait-Job | Receive-Job
Run Code Online (Sandbox Code Playgroud)
在最后一个示例中,您可以通过这种方式管理并发运行的线程数.
$MaxThreads = 5
$agents = Get-Content c:\grinder-dist\agent-computers.txt
$jobs = {
Param($agent)
write-host "Starting agent on" $agent
& psexec \\$agent c:\grinder\examples\startAgent.cmd
}
foreach($agent in $agents) {
Start-Job -ScriptBlock $jobs -argumentlist $agent | Out-Null
While($(Get-Job -State 'Running').Count -ge $MaxThreads) {
sleep 10
}
Get-Job | Wait-Job | Receive-Job
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15962 次 |
| 最近记录: |