更多的理论问题......
我有一个PowerShell脚本,存在于三台服务器上。在此示例中,三个服务器是:
我正在使用另一台计算机 server4 ,在指定远程时使用 Invoke-Command 远程调用脚本 C:\ ExampleScript.ps1 机器通过 ComputerName 参数。该脚本的最终目标是检测PowerShell是否正在运行,如果不是,那么计算机就是“不忙”#34;并且可以打开远程调用的脚本。如果计算机处于忙碌状态,请移至下一台服务器并继续通过三台计算机,直到所有参数值都已耗尽。如果所有机器都很忙,那么如果有办法定期检查流程并查看它们是否仍处于打开状态,那将是理想的选择。以这种方式,脚本的执行可以在各种机器上以尽管原始的方式平衡。
请考虑以下代码:
$servers = "server1","server2","server3"
$data = "param1", "param2", "param3", "param4", "param5", "param6"
#somehow loop through the different servers/data using the above arrays
$job = Invoke-Command $servers[0] {
$ProcessActive = Get-Process powershell -ErrorAction SilentlyContinue
if($ProcessActive -eq $null)
{
"Running"
Invoke-Command -ComputerName $env:computername -FilePath C:\ExampleScript.ps1 -ArgumentList $data[0]
}
else
{
"Busy go to next machine"
}
} -AsJob
Wait-Job $job
$r = Receive-Job $job
$r
试图实现的预期结果是尝试根据是否存在活动的PowerShell进程来跨机器对脚本进行负载平衡,如果没有移动到下一台机器上并执行相同的测试和随后的可能执行。该脚本应该遍历$ data数组(或其他)中指定的所有值。
答案 0 :(得分:5)
我发现这个问题很有趣,所以我想尝试一下。
SelectToken()
基本上我创建了一个数组,并为每个服务器不断填充一个作业。
新作业启动时会从列表中删除数据,如果作业失败,则会将其添加回来。这是为了避免服务器使用相同的数据/参数运行脚本。
我目前缺乏适当的环境来测试这个问题,但明天会在工作中发挥作用,如果需要,可以根据任何更改更新我的答案。