1

仮想マシンをインストールおよび構成するための PowerCLI コマンドを含む powershell スクリプトがあります。

これらは環境の設定です

  • Windows Server 2008 R2
  • ESX4.1
  • PowerShell v2
  • PowerCLI 5.1

スクリプトは、Web サイトのユーザーからトリガーされます。次のコードは、スクリプトを開始します。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();
    }
}

スクリプトには、次の 2 つのグローバル設定があります。

$ErrorActionPreference = "Stop"
$ConfirmPreference = "None"

コード全体が catch/finally を含む try ブロック内にありますが、コードが catch ブロックに入ることはありません。catch ブロックの最初の行として 1 回書きStop-Computer -Force -Confirm:$false、スクリプトが終了してから 5 分後に Web サーバーがまだ実行されていたので、私はそれを知っています。

コードはコマンド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 コマンドラインから直接動作するだけでなく、インタラクティブにも動作します

4

1 に答える 1

0

たぶん試してみてください

$Global:ErrorActionPreference = '停止'

$Global:ConfirmPreference = 'なし'

私が非常によく似た問題を抱えていたときに私のために働きました。

于 2013-07-03T15:02:24.687 に答える