外部プロセスを実行し、そのコマンド出力をPowerShellの変数にキャプチャしたいと思います。私は現在これを使用しています:
$params = "/verify $pc /domain:hosp.uhhg.org"
start-process "netdom.exe" $params -WindowStyle Hidden -Wait
コマンドが実行されていることを確認しましたが、出力を変数にキャプチャする必要があります。これは、ファイルへのリダイレクトのみを行うため、-RedirectOutputを使用できないことを意味します。
やってみました:
$OutputVariable = (Shell command) | Out-String
エラー出力もリダイレクトしたい場合は、以下を実行する必要があります。
$cmdOutput = command 2>&1
または、プログラム名にスペースが含まれている場合:
$cmdOutput = & "command with spaces" 2>&1
またはこれを試してください。出力を変数$ scriptOutputにキャプチャします。
& "netdom.exe" $params | Tee-Object -Variable scriptOutput | Out-Null
$scriptOutput
別の実際の例:
$result = & "$env:cust_tls_store\Tools\WDK\x64\devcon.exe" enable $strHwid 2>&1 | Out-String
この例にはパス(環境変数で始まる)が含まれていることに注意してください。引用符はパスとEXEファイルを囲む必要がありますが、パラメーターは囲まないことに注意してください!
注:コマンドの前ではなく引用符の外側にある&
文字を忘れないでください。
エラー出力も収集されます。
この組み合わせを機能させるのに時間がかかったので、私はそれを共有すると思った。
答えを試してみましたが、私の場合、生の出力は得られませんでした。代わりに、PowerShell例外に変換されました。
私が得た生の結果:
$rawOutput = (cmd /c <command> 2`>`&1)
あなたがやろうとしているのがコマンドからの出力をキャプチャするだけなら、これはうまくいくでしょう。
[timezoneinfo]::local
は常にafterでもシステムに変更を加えたとしても同じ情報を生成するため、システム時間の変更に使用します。これは、タイムゾーンの変更を検証して記録できる唯一の方法です。
$NewTime = (powershell.exe -command [timezoneinfo]::local)
$NewTime | Tee-Object -FilePath $strLFpath\$strLFName -Append
つまり、システム変数を再ロードするには、新しいPowerShellセッションを開く必要があります。