我有一个带有PowerCLI命令的powershell脚本来安装和配置虚拟机。
这些是环境中的设置
该脚本将从网站上的用户触发。下面的代码启动脚本。 PathToScript是UNC路径
const string Path32BitPowerShell = @"C:\Windows\SysWOW64\Windowspowershell\v1.0\powershell.exe";
public static void Run32BitPowerShell(String PathToScript, Boolean WaitForExit, String Arguments = "")
{
Process PowerShellProcess = new Process();
PowerShellProcess.StartInfo.CreateNoWindow = true;
PowerShellProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
PowerShellProcess.StartInfo.FileName = Path32BitPowerShell;
PowerShellProcess.StartInfo.WorkingDirectory = @"C:\";
PowerShellProcess.StartInfo.Arguments = PathToScript + " " + Arguments;
PowerShellProcess.Start();
if (WaitForExit)
{
PowerShellProcess.WaitForExit();
}
}
脚本有两个全局设置:
$ErrorActionPreference = "Stop"
$ConfirmPreference = "None"
整个代码都在catch / finally的try块中
但代码永远不会进入catch块。我知道这是因为我在catch块Stop-Computer -Force -Confirm:$false
中写了一次作为第一行,并且在脚本完成后5分钟后网络服务器仍在运行。
代码在命令Invoke-VMScript上停止:
Invoke-VMScript -VM $VM -ScriptType Bat -ScriptText "powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -Command Set-ExecutionPolicy Unrestricted -Scope CurrentUser" -GuestUser "***" -GuestPassword "****"
C#流程的退出代码为1
重要:
脚本运行完美,我开始互动(来自ISE)! 该问题仅在Web服务器启动时发生(非交互式)。
有人有任何想法,问题出在哪里?
/更新
它也直接来自powershell命令行,但也是交互式的
答案 0 :(得分:0)
也许试试
$ Global:ErrorActionPreference ='停止'
$ Global:ConfirmPreference ='无'
当我遇到类似的问题时,为我工作。