powershell-v3.0
2015-01-29 2 views 0 likes 
0

나는 다음과 같은 쿼리를 실행 ...은 Get-WinEvent로 PowerShell을 -FilterXML을

C:\>powershell "Get-WinEvent -FilterXML ""<QueryList><Query><Select Path='System'>*[System[(EventID=1074 or EventID=6013) and TimeCreated[@SystemTime&gt;='2015-01-23T05:00:00.000Z' and @SystemTime&lt;='2015-01-27T17:59:59.999Z']]]</Select></Query></QueryList>" "" 

... 나는 표 형식으로 출력 무엇입니까 : 내가 사용하려고 할 때

ProviderName: EventLog 

TimeCreated      Id LevelDisplayName Message 

----------- -- ---------------- ------- 

1/27/2015 12:00:00 PM   6013 Information  The system uptime is 349... 

..... 

을하지만,

: 선택 - 객체 ...

C:\>powershell "Get-WinEvent -FilterXML ""<QueryList><Query><Select Path='System'>*[System[(EventID=1074 or EventID=6013) and TimeCreated[@SystemTime&gt;='2015-01-23T05:00:00.000Z' and @SystemTime&lt;='2015-01-27T17:59:59.999Z']]]</Select></Query></QueryList>" | Select-Object TimeCreated"" 

을 ... 나는 다음과 같은 오류가 발생합니다

'Select-Object' is not recognized as an internal or external command, operable program or batch file. 

왜이 오류가 발생합니까? 나는 Server 2008 Standard Edition, 32-bit에서 이것을 실행하고 있으며, 일반적인 명령 프롬프트를 통해 실행해야합니다.

+0

당신은 이것을 CMD를 통해 실행해야한다고 말합니다. 왜 Powershell에서 직접 실행할 수 있습니까? – SpellingD

+0

이것은 많은 것을 실행하는 큰 스크립트의 작은 부분 일 뿐이며, CMD에서 실행해야합니다. –

답변

1

이 문제는 특수 문자가 CMD에서 이스케이프 처리되는 문제입니다.

이 가장 쉬운 해결책은 명령을 Base64 문자열로 변환하고 -EncodedCommand 매개 변수를 사용하여 Powershell을 실행하는 것입니다. 이렇게하면 프롬프트에 있어야하는 특수 문자가 필요하지 않습니다. 파워 쉘 도움말에서

:

#To use the -EncodedCommand parameter: 
$command = 'dir "c:\program files" ' 
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
$encodedCommand = [Convert]::ToBase64String($bytes) 
powershell.exe -encodedCommand $encodedCommand 

위의 일을 한 후에는 CMD를 통해 오류없이 달렸다. 편의상, 다음 Base64 문자열을 사용합니다 : RwBlAHQALQBXAGkAbgBFAHYAZQBuAHQAIAAtAEYAaQBsAHQAZQByAFgATQBMACAAIgA8AFEAdQBlAHIAeQBMAGkAcwB0AD4APABRAHUAZQByAHkAPgA8AFMAZQBsAGUAYwB0ACAAUABhAHQAaAA9ACcAUwB5AHMAdABlAG0AJwA+ACoAWwBTAHkAcwB0AGUAbQBbACgARQB2AGUAbgB0AEkARAA9ADEAMAA3ADQAIABvAHIAIABFAHYAZQBuAHQASQBEAD0ANgAwADEAMwApACAAYQBuAGQAIABUAGkAbQBlAEMAcgBlAGEAdABlAGQAWwBAAFMAeQBzAHQAZQBtAFQAaQBtAGUAJgBnAHQAOwA9ACcAMgAwADEANQAtADAAMQAtADIAMwBUADAANQA6ADAAMAA6ADAAMAAuADAAMAAwAFoAJwAgAGEAbgBkACAAQABTAHkAcwB0AGUAbQBUAGkAbQBlACYAbAB0ADsAPQAnADIAMAAxADUALQAwADEALQAyADcAVAAxADcAOgA1ADkAOgA1ADkALgA5ADkAOQBaACcAXQBdAF0APAAvAFMAZQBsAGUAYwB0AD4APAAvAFEAdQBlAHIAeQA+ADwALwBRAHUAZQByAHkATABpAHMAdAA+ACIAIAB8ACAAUwBlAGwAZQBjAHQALQBPAGIAagBlAGMAdAAgAFQAaQBtAGUAQwByAGUAYQB0AGUAZAA=

+0

어떻게 쿼리를 인코딩 했습니까? –

+0

'-EncodedCommand' 매개 변수의 Powershell 도움말에서 설명한 단계를 수행했지만 ('dir "c : \ program files"''라고 표시된 부분을 바꿨습니다). – SpellingD

+0

무엇인가 해보려고하지만 나에게 던지는 오류 : $ 명령 줄을 복사 한 내용을 복사 할 수 있습니까? –

관련 문제