不同用户帐户下的Powershell行为

不同用户帐户下的Powershell行为,powershell,Powershell,当我在我的帐户或管理员帐户下运行Powershell时,脚本中的任务会一个接一个地执行。当我在另一个帐户下运行它时,任务一起启动,这是不希望发生的行为。我怎样才能解决这个问题 $scriptBlock = { function runTasks() { C:\startTask1.ps1 C:\startTask2.ps1 C:\startTask3.ps1 C:\startTask4.ps1 } } St

当我在我的帐户或管理员帐户下运行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被忽略。

为了确保脚本一个接一个地执行,请使用Start Process单独调用每个脚本,并另外使用参数-wait

一个选项是使用-PassThru开关对要运行的每个脚本调用Process.WaitForExit


你好,谢谢。我遵照您的建议,将脚本替换为:Start Process-FilePath PowerShell-ArgumentList C:\startTask1.ps1-arg1'x1'-RedirectStandardError task1.txt-等待此行使用不同的-AargumentList值重复4次。与原始脚本类似,如果我在我的帐户下运行新脚本,而不是在新帐户下启动的powershell下运行,则新脚本工作良好。所以我还是在同一个地方。还有其他想法或事情要尝试吗?您可以尝试记录其他脚本的输出吗。也许他们执行得不正确。安全性、错误路径等。我尝试使用start transcript输出错误,并在使用start process命令启动进程时将路径设置为-RedirectStandardError。没有显示错误,这主要是由于脚本非常简单,因为我试图确定行为不一致的原因。请看我的编辑1。
$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()