当我在我的帐户或管理员帐户下运行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 。
答案 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()