【发布时间】:2016-04-07 16:25:49
【问题描述】:
更多的理论问题......
我有一个存在于三台服务器上的 powershell 脚本。在此示例中,三台服务器是:
- 服务器1
- 服务器2
- 服务器3
我正在使用另一台机器 server4,在指定远程时使用 Invoke-Command 远程调用脚本 C:\ExampleScript.ps1 ComputerName 参数。该脚本的最终目的是检测powershell是否正在运行,如果没有,则计算机“不忙”,可以远程打开被调用的脚本。如果计算机“忙”,则移动到下一个服务器并继续通过三台机器,直到用完所有参数值。如果所有机器都很忙,最好有办法定期检查进程并查看它们是否仍然打开。通过这种方式,脚本的执行可以在各种机器之间以一种原始的方式进行平衡。
考虑以下代码:
$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 数组(或其他)中指定的所有值。
【问题讨论】:
-
有趣(好)的想法,但我没有看到问题。我可以看到你要去哪里,但是有无数种方法可以做你正在寻找的事情。
-
我想问题是如何修改代码以达到预期的效果?
标签: powershell