none
do while schleife verlassen \ System.ServiceProcess

    Frage

  • Hallo Zusammen

    Ich habe das Problem das die schleife bei gewissen Systeme nicht verlassen wird und in ein Endlos-Schleife landet.

    Wenn der Service gestoppt wird ist alles ok aber wenn der Service nicht gestoppt werden kann muss es 10mal versucht werden und beim 11ten mal soll die schleife beendet werden und mit pskill abgeschossen werden.

    So sieht mein Code aus:

    [void] ([Reflection.Assembly]::LoadWithPartialName("System.ServiceProcess"))
    $compnames = Get-Content C:\Temp\desktop.txt
    $date      = Get-Date -Format dd.MM.yyyy
    $logfile   = "C:\Users\Script_LogfilesService.csv"
    
    
    foreach ($compname in $compnames) 
    { 		
     	#Ping
            if (test-Connection -ComputerName $compname -Count 1 -Quiet ) 
    		{
    			Write-Host -ForegroundColor Green "$compname Online" 
    			
    			#Check Access c:\windows
    			if ((Test-Path "\\$compname\c`$\Windows" -PathType Container) -eq $false)
    				{	
    					Write-Host -ForegroundColor Red "No Access $compname"
    					"$date `t $compname `t No Access" | Out-File -FilePath $logfile -Append
    					Write-Host ""
    					Write-Host "========================================================================="
    					Write-Host ""
    				}	
    						
    				else
    				
    				{
    			
    			#Check Service
    			$status = Get-WMIObject win32_service -filter "name='Tuner'" -computer "$compname"
    			Write-Host -ForegroundColor Green "Service Mode is: " ($status.StartMode);
    				if ($status.StartMode -eq "Disabled")
    					{
     						#Write-Host -ForegroundColor Red "Service is Disabled"
     						$status.ChangeStartMode("Automatic")
    						
    					}
    				else
    					{
    						Write-Host -ForegroundColor Red "Service State:" ($status.State)
    					}
    			
    			Start-Sleep -Seconds 3
    			
    			# Stop Service
    			Write-Host -ForegroundColor Green "Stop Tuner $compname"
    			
    			[System.ServiceProcess.ServiceController]$service = Get-Service -Name "Tuner" -ComputerName $compname
    
    			[int]$waitCount = 0
    			do
    			{
        			$waitCount++
    
        				switch($service.Status)
    					
        			{		
            			{ @(
    		
            				[System.ServiceProcess.ServiceControllerStatus]::ContinuePending,
            				[System.ServiceProcess.ServiceControllerStatus]::PausePending,
            				[System.ServiceProcess.ServiceControllerStatus]::StartPending,
            				[System.ServiceProcess.ServiceControllerStatus]::StopPending) -contains $_ }
            					{
    					            # A status change is pending. Do nothing.
    							Write-Host -ForegroundColor Red "A status change is pending."	
                						break;
            					}
    
            			{ @(
            				
            				[System.ServiceProcess.ServiceControllerStatus]::Running) -contains $_ }
            					{
                					
                					$service.Stop()
    						Write-Host -ForegroundColor Blue "WaitForStatus Stopped"
    						$service.WaitForStatus("Stopped")
                					break;
            					}
    				{ @(
            				[System.ServiceProcess.ServiceControllerStatus]::Stopped) -contains $_ }
            					{		
                					# This is the service state that we want, so do nothing.
    						#Write-Host -ForegroundColor Green "Service is Stopped"
    								
                					break;
            					}
        			}
    
        					# Sleep, then refresh the service object.
        					Sleep -Seconds 1
        					$service.Refresh()
    
    
    			} while (($service.Status -eq [System.ServiceProcess.ServiceControllerStatus]::Stopped) -or ($waitCount -eq 10))
    		      
    				
    				if ($service.Status -eq [System.ServiceProcess.ServiceControllerStatus]::Stopped)
    				
    					{
    						Write-Host -ForegroundColor Green "Tuner Service Stopped"
    					}
    				else
    					{
    						Write-Host -ForegroundColor Red "Tuner service could not be stopped. Try to kill process"
    						pskill \\$compname tuner
    					}

    Wo ist der Fehler?

    Vielen dank für eure Hilfe

    Grüsse

    Disco

    Freitag, 25. Januar 2013 20:10

Antworten

  • Waitforstatus warte auf eine Rückmeldung vom Computer wenn die nicht kommt wartet er sich zu Tode!

    Deine schleife Fragt doch schon ab, ob der Service gestoppt hat. Lass das  Waitforstatus einfach weg!


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Disco_G Montag, 28. Januar 2013 09:40
    Montag, 28. Januar 2013 09:06

Alle Antworten

  • $WaitCount = 0
    
    do {
        $WaitCount++
    
        "Runde Nr: $WaitCount"
    
    }While( $False -or ($WaitCount -lt 10))
    -LT anstatt -GT !!

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!



    Samstag, 26. Januar 2013 17:51
  • Hallo Peter

    Vielen dank für deine Antwort.

    Es funktioniert aber bei gewissen System bleibt es bei WaitForStatus Stopped hängen und es macht kein Wank mehr und ich muss es Manuell via pskill abschiessen.

    Irgend eine Idee?

    Grüsse

    Montag, 28. Januar 2013 07:45
  • Waitforstatus warte auf eine Rückmeldung vom Computer wenn die nicht kommt wartet er sich zu Tode!

    Deine schleife Fragt doch schon ab, ob der Service gestoppt hat. Lass das  Waitforstatus einfach weg!


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Disco_G Montag, 28. Januar 2013 09:40
    Montag, 28. Januar 2013 09:06