1

我有一个带有 PowerCLI 命令的 powershell 脚本来安装和配置虚拟机。

这些是环境中的设置

  • 视窗服务器 2008 R2
  • ESX 4.1
  • PowerShell v2
  • PowerCLI 5.1

该脚本将由网站上的用户触发。以下代码启动脚本。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)!仅当网络服务器启动它(非交互式)时才会出现此问题。

有人有任何想法,问题可能出在哪里?

/更新

它也可以直接从 powershell 命令行工作,但也可以交互

4

1 回答 1

0

也许试试

$Global:ErrorActionPreference = '停止'

$Global:ConfirmPreference = '无'

当我遇到非常相似的问题时为我工作。

于 2013-07-03T15:02:24.687 回答