2013-03-08 6 views
1

ISE 및 CMD 프롬프트에서 powershell 스크립트를 실행할 때 동작 차이가 발생했습니다.CMD에서 PowerShell 스크립트를 실행할 때 이상한 동작

스크립트의 목적은 Microsoft의 DPM (Data Protection Management) 서비스에 대한 활성 경고를 확인하는 것입니다. 12 시간 이상 경과하면 'DPM Alerts'이벤트 로그에 오류가 기록됩니다.

ISE에서 스크립트를 개발했으며 완벽하게 작동하는 것으로 보입니다. 그래서 나는 그것을 원하는 작업을하지 않는 Scheduled 작업에 추가했습니다. 결국 경고의 나이를 테스트 한 논리를 제거 했으므로 현재 수행중인 경고의 목록을 얻으려고했습니다.

$serverName = "my_server_name" 

$dpmServer = Connect-DPMServer $serverName 
$dpmServer.AlertController.RefreshAlerts() 
$activeAlerts = $dpmServer.AlertController.ActiveAlerts 

if (!$activeAlerts) {"no active alerts found"} 
else {$activeAlerts} 

PSConsoleFile을 통해 DPM 스냅인을로드하고 있습니다. 내가 CMD에서 실행 해요 명령은 다음과 같습니다

나는 단지 $ dpmServer 개체를 표시하는 선을 포함하는 경우, 올바른 정보를 보여주기 때문에 스냅인이 제대로로드 것을 알고
powershell -psconsole .\DPMConsoleFile.psc1 -file .\DPMAlertChecker.ps1 

.

PowerShell ISE (또는 DPM 관리 셸)에서이 도구를 실행하면 올바르게 작동하고 활성 경고 목록 (있는 경우)이 표시됩니다. 위의 구문을 사용하여 명령 줄에서 실행하면 작동하지 않습니다. 특히 $ dpmServer.alertcenter.activealerts 명령에서 경고를 리턴하지 않습니다.

차이점은 무엇입니까?

+1

ISE에서 작동하는 경우 PSC1 (콘솔) 파일을 사용하지 않아도 작동한다고 생각합니다. 수동으로 ISE에서 스냅인을로드합니까? 스크립트의 일부로 스냅인을 추가하는 것이 가장 좋습니다. –

+1

문제점을 발견했습니다. Connect-DPMServer를 사용하여 dpm 서버에 연결할 때와 경고를 볼 수있을 때 약간의 지연이있는 것 같습니다. while (! $ alerts)의 효과에 루프를 추가하고 루프 내에서 refreshAlerts() 및 alertController.ActiveAlerts를 실행했습니다. 약 10 초 후에, 나는 활성 경고를보고 행동 할 수 있었다. ISE에서이 변수를 실행하면 변수가 실행 사이에 유지되므로 연결을 수행 할 수있는 충분한 시간이있었습니다. "powershell -file scriptname"을 사용하여 호출하면 연결 전에 종료 된 쉘이 발생할 수 있습니다. – JeremyP

+0

좋아요, 답으로 의견을 올리실 수 있습니까? – JPBlanc

답변

0

문제점을 발견했습니다. Connect-DPMServer를 사용하여 dpm 서버에 연결할 때와 경고를 볼 수있을 때 약간의 지연이있는 것 같습니다. while (! $ alerts)의 효과에 루프를 추가하고 루프 내에서 refreshAlerts() 및 alertController.ActiveAlerts를 실행했습니다. 약 10 초 후에, 나는 활성 경고를보고 행동 할 수 있었다. ISE에서이 변수를 실행하면 변수가 실행 사이에 유지되므로 연결을 수행 할 수있는 충분한 시간이있었습니다. "powershell -file scriptname"을 사용하여 호출하면 연결 전에 종료 된 쉘이 발생할 수 있습니다.

관련 문제