반환 값이 왜곡되는 곳을 찾기 위해 전체 시간을 보냈습니다. 이제 마침내 어디에서 발견했는지, 나는 아직도 이유를 모른다. 함수는 다음과 같습니다.프로세스가 포함 된 함수가 깨진 값을 반환합니다.
function Run-RemoteCommand {
param(...) # params are $Remote (host) $Command $Credentials $Quiet (optional switch)
if($Quiet) {
$Process = New-Object System.Diagnostics.Process
$Process.StartInfo.UseShellExecute=$false
$Process.StartInfo.Domain=$Credentials.GetNetworkCredential().Domain
$Process.StartInfo.UserName=$Credentials.GetNetworkCredential().UserName
$Process.StartInfo.Password=$Credentials.Password
$Process.StartInfo.WindowStyle="Hidden"
$Process.StartInfo.FileName=$PSExec
[email protected]("/acceptEULA",$Remote,"-s",$Command)
$Process.Start()
$Process.WaitForExit()
$result = $Process.ExitCode
return $result
} else {
...
}
}
이상한 점은 디버거에서 단계별로 처리하고 모든 것이 잘 작동 하는지를 보는 것입니다. 명령이 실행되면 $ result는 리턴 코드로 채워지지만 호출 함수는 리턴 코드에 True를 추가합니다 (예 : 성공시 True0). 반환 값을 무시하고 그냥 말하려고했습니다.
return "false"
호출 함수가 "Truefalse"를받습니다. 내가 알 수있는 것은 그것이 $ Process Running에 묶여 있다는 것이다. $ Process.Start()를 주석 처리하면 리턴 코드가 정상적으로 작동합니다. 누군가 내 제 정신을 구 해주세요.
고마워요, 키이스, 지금 제가 꺼내 려던 머리를 구하기 위해 Rogain에 모든 돈을 쓸 필요는 없습니다! 그 링크에서 좋은 독서. 특히 여기에 적용되는 부분이 시작됩니다. "이 문제가 PowerShell 뉴스 그룹에서 다시 한 번 물었습니다 ..." – ASTX813