我创建了一个Powershell脚本,可以在我的服务器上进行定时重启。这是我的代码片段,更具体地说是startServers函数。
我已将全局变量添加到函数中以试图获得示例。
基本上每个服务器名称都是在单独目录中启动exe的快捷方式的名称。名字就是那个,之后没有.lnk(我已经尝试了两种方式)。
aff数组用于处理器关联。
此脚本应该:
情况并非如此:我在“arg0”周围出现错误,无法启动该过程。我想如果有人对args0发生的事情有进一步的解释,那将会有什么帮助。
代码段:
function startServers
{
#Added For Example Purposes
$servers = @( "public", "private" )
$aff = @( 196, 56 )
#End
$i = 0
foreach($s in $servers)
{
$app_name = "$s"
$a = $aff[$i]
$app_arguments = "arg0"
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.Arguments = $app_arguments
$pinfo.FileName = $app_name
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start()
$p.ProcessorAffinity=$a
$i = $i + 1
#Start "$s"
Write-Output "Starting $s"
}
}
答案 0 :(得分:1)
function startServers {
$i = 0
$global:pids = @( )
foreach($s in $servers)
{
$a = $aff[$i]
$Starter = Start-Process -FilePath $s -WindowStyle Minimized -PassThru
$Process = Get-Process -Id $Starter.ID
$global:pids += $Process.ID
$Process.ProcessorAffinity = $a
$CurrentTime = updateTime
Write-Output "Starting $s at $CurrentTime"
$i = $i + 1
Start-Sleep -s 10
}
return
}
这就是我最终解决问题的方法。我切换到通过PID跟踪过程。
我在启动过程中使用了-PassThru,并将其变为变量。
然后我创建了一个变量,它在启动PID后会保存PID。
然后你做了基本的$ foo.ProcessorAffinity = foo,你得到了你的结果。