2016-01-08 33 views
1

當我在我的帳戶下或管理員帳戶下運行Powershell時,我的腳本中的任務一個接一個地執行。當我在另一個帳戶下運行它時,任務將一起啓動,這是不受歡迎的行爲。我怎樣才能解決這個問題?不同用戶帳戶下的Powershell行爲

$scriptBlock = { 
    function runTasks() 
    { 
     C:\startTask1.ps1 
     C:\startTask2.ps1 
     C:\startTask3.ps1 
     C:\startTask4.ps1 
    } 
} 

Start-Process -FilePath PowerShell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command & {$ScriptBlock runTasks}" 

另一種看法可能會或可能不會進行相關的 - 當我在我的帳戶下或在「以管理員身份運行」啓動PowerShell中,我與藍色背景的窗口。如果我用SHIFT +右鍵單擊並選擇「以其他用戶身份運行」並提供另一個帳戶,那麼打開的窗口就像黑色控制檯一樣。

編輯#1:

我拆我的劇本分爲兩個文件:

taskList.ps1

Start-Process -FilePath PowerShell -ArgumentList "C:\path\task1.ps1 -arg1 'x1' -arg2 'x2'" -RedirectStandardError task1.txt -wait 
Start-Process -FilePath PowerShell -ArgumentList "C:\path\task2.ps1 -arg1 'x3'" -RedirectStandardError task2.txt -wait 
Start-Process -FilePath PowerShell -ArgumentList "C:\path\task1.ps1 -arg1 'x4' -arg2 'x5'" -RedirectStandardError task3.txt -wait 
Start-Process -FilePath PowerShell -ArgumentList "C:\path\task2.ps1 -arg1 'x6'" -RedirectStandardError task4.txt -wait 

和taskStarter.ps1

Start-Process -FilePath PowerShell -ArgumentList "C:\path\taskList.ps1" -RedirectStandardError taskErr.txt -RedirectStandardOutput taskOut.txt 

當我運行taskStarter。 ps1從我的帳戶下的powershell控制檯運行良好 - 所有任務都在anot後執行她和- 等待 param在taskList.ps1服從。但是,當我在新帳戶下運行相同的taskStarter.ps1時,所有任務都一起運行,並且- 等待被忽略。

回答

0

一種方法是使用-PassThru開關在要使用的每個腳本上調用Process.WaitForExit()

$process1 = Start-Process <path to script 1> -PassThru 
$process1.WaitForExit() 

$process2 = Start-Process <path to script 2> -PassThru 
$process2.WaitForExit() 

$process3 = Start-Process <path to script 3> -PassThru 
$process3.WaitForExit() 

$process4 = Start-Process <path to script 4> -PassThru 
$process4.WaitForExit() 
1

爲了確保腳本一個接一個地執行,請使用Start-Process分別調用每個腳本,並使用參數「-Wait」。

+0

你好,謝謝。我也跟着你的建議,並取代了我的腳本: '開始處理-FilePath PowerShell的-ArgumentList 「C:\ startTask1.ps1 -arg1 'X1'」 -RedirectStandardError task1.txt -wait' 這條線重複4次不同的-AargumentList值。與原始腳本類似,新腳本運行良好,如果我在我的帳戶下運行它,但不在新帳戶下啓動的PowerShell下運行。所以我仍然在同一個地方。任何其他想法或事情要嘗試? –

+0

您可以嘗試記錄其他腳本的輸出。也許他們沒有被正確執行。安全性,錯誤的路徑等... – etalon11

+0

我試圖用* start-transcript *輸出錯誤,並在使用* Start-Process *命令啓動一個進程時設置路徑爲* -RedirectStandardError *。沒有錯誤顯示,這主要是由於腳本非常簡單,因爲我試圖確定行爲不一致的原因。請參閱我的編輯#1。 –

相關問題