gpt4 book ai didi

powershell - Start-Job 中的变量不会被评估

转载 作者:行者123 更新时间:2023-12-02 14:49:37 24 4
gpt4 key购买 nike

我的 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}
}

This link与我的问题类似,只是我没有调用外部 Powershell 脚本。

我尝试添加该内容,使用 $args[0] 表示 $agent,并添加 -ArgumentList 参数,但这并没有不起作用。

<小时/>

编辑/回复

$agentcomputers 只是计算机名称列表 - 每个名称都在自己的行上:

$agentcomputers = Get-Content c:\grinder-dist\agent-computers.txt

我也尝试过这个 - 并且 $args[0] 不评估:

Start-Job -ScriptBlock {& psexec $args[0] c:\grinder\examples\startAgent.cmd} -ArgumentList @($agent)

最佳答案

这里有 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

或者您可以将其全部放在一行而不创建任何变量。

(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

在最后一个示例中,您可以通过这种方式管理并发运行的线程数。

$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
}

关于powershell - Start-Job 中的变量不会被评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196489/

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