나는 또한이 문제가 있었고 Andy의 코드 를 사용하여 여러 명령을 실행해야 할 때 정리하는 함수를 만들었습니다.
stderr, stdout 및 종료 코드를 객체로 반환합니다. 한 가지주의 할 점 : 함수는 .\
경로에서 허용되지 않습니다 . 전체 경로를 사용해야합니다.
Function Execute-Command ($commandTitle, $commandPath, $commandArguments)
{
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = $commandPath
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $commandArguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
[pscustomobject]@{
commandTitle = $commandTitle
stdout = $p.StandardOutput.ReadToEnd()
stderr = $p.StandardError.ReadToEnd()
ExitCode = $p.ExitCode
}
}
사용 방법은 다음과 같습니다.
$DisableACMonitorTimeOut = Execute-Command -commandTitle "Disable Monitor Timeout" -commandPath "C:\Windows\System32\powercfg.exe" -commandArguments " -x monitor-timeout-ac 0"
$process= ping localhost
# 출력을 프로세스 변수에 저장합니다.