不同用户帐户下的Powershell行为

时间:2016-01-08 20:14:37

标签: 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

当我从我的帐户下的powershell控制台运行taskStarter.ps1时,它运行良好 - 所有任务都是一个接一个地执行,并且遵循taskList.ps1中的 -wait 参数。但是,当我在新帐户下运行相同的taskStarter.ps1时,所有任务都在一起运行,并忽略 -wait

2 个答案:

答案 0 :(得分:1)

为了确保Scripts一个接一个地执行,请使用Start-Process分别调用每个脚本,并另外使用Argument“-Wait”。

答案 1 :(得分:0)

一种选择是使用Process.WaitForExit()开关在您要运行的每个脚本上调用-PassThru

$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()