2014-10-08 103 views
0

我已經創建了一個Powershell腳本來在我的服務器上執行定時重新啓動。這是我的代碼片段,更具體地說是startServers函數。在PowerShell中啓動()錯誤(啓動快捷方式)

我已經將全局變量添加到函數中以努力舉例。

基本上,每個服務器名稱是在單獨的目錄中啓動exe的快捷方式的名稱。名稱完全是這樣的,並沒有.lnk後(我已經嘗試了兩種方式)。

aff數組用於處理器關聯。

這個腳本應該:

  1. 每個服務器
  2. 創建啓動信息
  3. 啓動過程
  4. 集親和力

新Sysem Diag(診斷)處理這不是案例:我得到一個圍繞「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

+0

@Matt foreach($ s在$ servers中)這將定義$ s並使其成爲循環的實例,因此它將是$ servers [0]然後是$ servers [1] – 2014-10-08 04:33:05

+3

發佈完整的錯誤消息 – 2014-10-08 07:03:59

+0

You試圖在此之前發佈此代碼,因爲我承認它。 ....你想要「開始」一個服務器名稱? – Matt 2014-10-08 11:29:00

回答

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,並將其作爲變量。

然後我創建了一個變量,該變量在開始調用Process之後保存PID。

然後你做基本的$ foo.ProcessorAffinity = foo,你會得到你的結果。