2013-06-04 4 views
0

invoke-command와 관련된 오류/예외를 처리하는 데 문제가 있습니다.Powershell 오류/예외 처리

대상 컴퓨터가 존재하지 않을 때 오류를 잡으려고하는데, 메시지가 표시되고 catch 블록의 스크립트가 작동하는 방식으로 내가 놓친 것이 있거나 잘못 이해 한 것으로 생각됩니다. $computerName가 네트워크의 유효한 컴퓨터가 아닌 경우

$session = New-Pssession -computername $computerName 
Invoke-Command -session $session -ScriptBlock $command -ArgumentList $sqlServerName, $userToGivePermisions   
Remove-PSsession -session $session 

은 기본적으로 내가 오류를 처리 할 :

문제와 스크립트의 부분이다. 나는 의도적으로 그것을 테스트하기 위해 그것을 잘못된 이름을주고, 나는 다음과 같은 오류가 발생합니다 :
[dcd] Connecting to remote server failed with the following error message : WinRM cannot process the request. The following error occured while using Kerberos authentication: The network path was not found. 
Possible causes are: 
-The user name or password specified are invalid. 
-Kerberos is used when no authentication method and no user name are specified. 
-Kerberos accepts domain user names, but not local user names. 
-The Service Principal Name (SPN) for the remote computer name and port does not exist. 
-The client and remote computers are in different domains and there is no trust between  the two domains. 
After checking for the above issues, try the following: 
-Check the Event Viewer for events related to authentication. 
-Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or use HTTPS transport. 
Note that computers in the TrustedHosts list might not be authenticated. 
-For more information about WinRM configuration, run the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic. 
+ CategoryInfo   : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException 
+ FullyQualifiedErrorId : PSSessionOpenFailed 

[DCD]

가 아닌 기존 시스템의 이름입니다. try catch에 코드를 넣고 -contains을 사용하여 오류 메시지를 확인했습니다. 조건은 항상 거짓으로 나왔고 나는 위의 오류에서 거의 한 단어를 시도했다.

$_.exception.message을 사용하여 catch 블록에 오류 메시지를 표시 할 때 $ session이 (가) null 인 오류가 발생했습니다.

내가 $ 012에 대한 표시된 오류 메시지의 단어를 사용하여 -contains을했을 때 테스트 한 모든 단어에 대해 여전히 false를 반환했습니다.

나는 이것들 중 어느 것이 오류이며, 왜 -contains이 사실을 반환하지 않는지 이해하지 못합니다. 나는 모든 비 종료 오류를 잡기 위해 모든 3 줄에 -ea stop을 추가했지만 아무 소용이 없습니다.

누구나 무슨 일이 벌어지고 있는지 알 수 있습니까?

답변

4

-contains은 요소가 배열에 있는지 여부를 확인합니다. 예컨대 :

1,2,3 -contains 2 # Is True 
"a","bc","d" -contains "b" # Is False 

대신 -match 또는 -like 연산자를 사용해보십시오. comparison operator documentation을 살펴보십시오.

+0

thnx. 늦게 받아 들여서 미안하지만 내 문제가 해결되었습니다. – user1752736