Powershell中的Start()错误(启动快捷方式)

时间:2014-10-08 03:12:26

标签: powershell arguments startup

我创建了一个Powershell脚本,可以在我的服务器上进行定时重启。这是我的代码片段,更具体地说是startServers函数。

我已将全局变量添加到函数中以试图获得示例。

基本上每个服务器名称都是在单独目录中启动exe的快捷方式的名称。名字就是那个,之后没有.lnk(我已经尝试了两种方式)。

aff数组用于处理器关联。

此脚本应该:

  1. 对于每个服务器
  2. 使用开始信息创建新的Sysem Diag流程
  3. 启动流程
  4. 设置亲和力
  5. 情况并非如此:我在“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"
        }
    }
    

    The Error I Get

1 个答案:

答案 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,你得到了你的结果。