Powershell에 명령 출력을 문자열인 것처럼 제공합니다.

Powershell에 명령 출력을 문자열인 것처럼 제공합니다.

저는 Powershell을 사용하여 프린터와 드라이버 삭제 스크립트를 작성하고 있습니다. Printing_admin_scriptsWindows 7+의 System32 폴더에 있는 것을 호출합니다 . 이 스크립트는 많은 양의 출력을 생성하므로 출력을 캡처하고(대부분을 버리고) 상태에 따라 자체 출력을 생성하고 싶습니다.

왜 사용할 수 없습니까 $LASTEXITCODE?

이 스크립트는 종료 코드를 생성하지 않습니다! 그들은 항상 0을 나타냅니다.

"0x80041002"내 목표는 명령의 출력에서 ​​찾는 것입니다 . 그렇다면 이렇게 하세요. 그렇지 않다면 그렇게 하세요. 아래는 내가 시도했지만 실패한 것입니다.

.\prnmngr.vbs -d -p "$_" | findstr "0x80041002" | out-null
        If ($LASTEXITCODE = 0) {
            Write-Host "$_ does not exist"
        } else {
            Write-Host "$_ removed"
        }

나는 또한 다음을 시도했습니다.

& .\prnmngr.vbs -d -p "$_".ToString() | findstr "0x80041002" | out-null
        If ($LASTEXITCODE = 0) {
            Write-Host "$_ does not exist"
        } else {
            Write-Host "$_ removed"
        }

이렇게 하면 출력이 숨겨지지만 프린터가 존재하지 않더라도 항상 프린터가 제거되었음을 인쇄합니다(일반적으로 "0x80041002" 출력). 내 목표는 호스트에 기록되지 않더라도 해당 문자열을 찾은 다음 해당 위치에 텍스트를 작성하고 계속하는 것입니다.

답변1

간단히 변경파워셸내부가 -eq아닌 사용할 논리=만약에상태. 이렇게 하면 조건부 명령이 $LASTEXITCODE.

If 명령 구문

If ($LASTEXITCODE -eq 0) {
    Write-Host "$_ does not exist"
} else {
    Write-Host "$_ removed"
}

추가 리소스

답변2

결과를 배열에 저장하는 것이 저에게 효과적입니다.

$script = "C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs"

$result = cscript $script -g

if($result -match 'foo') {
    write-host "match"
}
else {
    write-host "no match"
}

관련 정보