2016-05-31 2 views
0

서비스를 모니터링하고 시작 모드가 자동 일 때 서비스를 시작하고 싶습니다. 실행할 때 내 경우Powershell에서 변수의 문자열 줄

$WMI = Get-WmiObject Win32_Service | 
Where-Object { $_.StartMode -eq 'Auto' -and $_.State -ne 'Running' -and $_.DisplayName -notlike 'Microsoft .NET Framework NGEN v4.0.30319_X86' -and $_.DisplayName -notlike 'Windows Image Acquisition (WIA)' -and $_.DisplayName -notlike 'Microsoft .NET Framework NGEN v4.0.30319_X64' -and $_.DisplayName -notlike 'Software Protection' -and $_.DisplayName -notlike 'Google Update Service (gupdate)' -and $_.DisplayName -notlike 'Google Update-service (gupdate)' -and $_.DisplayName -notlike 'Pml Driver HPZ12' -and $_.DisplayName -notlike 'Shell Hardware Detection' -and $_.DisplayName -notlike 'Group Policy Client' -and $_.DisplayName -notlike 'Multimedia Class Scheduler' -and $_.DisplayName -notlike 'Skype Updater' -and $_.DisplayName -notlike 'Remote Registry' -and $_.DisplayName -notlike 'TPM Base Services' -and $_.DisplayName -notlike 'Windows Update' -and $_.DisplayName -notlike 'Windows Modules Installer' -and $_.DisplayName -notlike 'Smart Card'} | Select DisplayName,State 

이 나에게 두 가지 결과를 제공합니다 :

$displayname = $WMI | select Displayname 

결과 :

DisplayName                                
-----------                                
SQL Server Agent (JOURNYX)                            
Performance Logs and Alerts 

나는 그것이 이것은 foreach

사용하여 동작하지 않습니다 결국 내가 Start-Service $displayname을 사용할 때 시작하려고 시도하기 때문에당신은 그것을의 값 상태와 표시 이름을 가진 객체 $ WMI를 가지고

$WMI = Get-WmiObject Win32_Service | 
Where-Object { $_.StartMode -eq 'Auto' -and $_.State -ne 'Running' -and $_.DisplayName -notlike 'Microsoft .NET Framework NGEN v4.0.30319_X86' -and $_.DisplayName -notlike 'Windows Image Acquisition (WIA)' -and $_.DisplayName -notlike 'Microsoft .NET Framework NGEN v4.0.30319_X64' -and $_.DisplayName -notlike 'Software Protection' -and $_.DisplayName -notlike 'Google Update Service (gupdate)' -and $_.DisplayName -notlike 'Google Update-service (gupdate)' -and $_.DisplayName -notlike 'Pml Driver HPZ12' -and $_.DisplayName -notlike 'Shell Hardware Detection' -and $_.DisplayName -notlike 'Group Policy Client' -and $_.DisplayName -notlike 'Multimedia Class Scheduler' -and $_.DisplayName -notlike 'Skype Updater' -and $_.DisplayName -notlike 'Remote Registry' -and $_.DisplayName -notlike 'TPM Base Services' -and $_.DisplayName -notlike 'Windows Update' -and $_.DisplayName -notlike 'Windows Modules Installer' -and $_.DisplayName -notlike 'Smart Card'} | Select DisplayName,State 


$displayname = $WMI | select Displayname 

foreach ($servicename in $displayname) { 

try { 

start-service $Servicename.DisplayName -ErrorAction stop 

Write-host "Service" $servicename.displayname "started, after being failed" 

exit 1001 

} 

catch { 

Write-Host "Tried to start" $servicename.displayname "Service, but failed" 

exit 1001 

} 

} 

write-host "Services reporting OK" 
Exit 0 

답변

0

:

이 지금 내 스크립트입니다.

$displayname = $WMI | select Displayname을 수행 할 때 여전히 $displayname이라는 개체가 있고 displayname이라는 값이 있습니다. 따라서이 값을 참조해야합니다 :

Start-Service $displayname.displayname.

어떤 경우에는 Start-Service $($displayname.displayname)을 사용하는 것이 더 좋으므로 PS는 매개 변수로 사용되기 전에 값을 평가할 수 있습니다.

+0

고마워요. 그게 내가 보통하는 일이지만 작동하지 않습니다. $ displayname.displayname이 비어 있습니다. 예, WMI 명령을 실행했습니다. 시작 서비스 $ ($ displayname.displayname) 시작 서비스 : 'Name'매개 변수가 null이므로 바인딩 할 수 없습니다. – ArKersten

+0

아, 그래. $ Displayname은 여전히 ​​객체의 배열이며,'$ displayname [0] .displayname' 등을 볼 수 있습니다. 'start-Service' 문에서'$ ($ servicename.displayname)'을 사용해보십시오. – Martin

+0

감사합니다. $ displayname [0] .displayname이 (가) 작동했습니다. 불행히도, 나는 메시지를 반환하는 두 사람 중 하나만 얻습니다. SQL Server Agent (JOURNYX) 서비스를 시작하려고했으나 실패했습니다. – ArKersten

0

Start-Service에 'name'속성을 전달해야합니다.

gwmi win32_service | ? {$_.StartMode -eq 'Auto' -and $_.State -ne 'Running'} | Select -ExpandProperty Name | Start-Service 

Where-Object (?)에 필터를 추가하십시오.

+0

안녕하세요, 감사합니다! 도움이되었습니다. 스크립트의 일부분을 사용했습니다 : 이제 : '$ WMI = gwmi win32_service | ? {$ _. StartMode -eq '자동'및 $ _. 상태 -ne '실행 중}} | -ExpandProperty 이름을 선택하십시오. if ($ wmi.카운트 -ge 1) { 의 Foreach ($의 $ WMI에서 서비스 이름) { 시도 { 시작 서비스 $의 서비스 이름 을 "실패한 후 시작", "서비스"$의 서비스 이름은 쓰기 호스트를 중지 -ErrorAction } 캐치 {다른 } } } {,369 $의 서비스 이름을 "하지만 실패", "시작 시도" 쓰기 호스트 write-host "보고를보고하는 서비스" 나가기 0 } – ArKersten

+0

나에게 서비스에 대한 다른 견해를 알려줍니다. 표시 이름이 훨씬 명확합니다. – ArKersten

+0

DisplayName이 필요한 경우 Start-Service를 수행하기 전에 먼저 Get-Service의 개체를 만듭니다. – zerocool18

관련 문제