仮想マシンをインストールおよび構成するための 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 コマンドラインから直接動作するだけでなく、インタラクティブにも動作します