none
Ausgabe von Kaputten IP Adressen in log RRS feed

  • Frage

  • Morgen 

    Ich habe dieses Script  im Internet gefunden, und würde gerne wissen wie und  wo ich im Script einen Befehl setzen muss das er die nicht erreichbaren ip-adressen auflistet 

    Function Get-ADComputersTestConnection
    {
     Param(
      [switch]$showErrors
     )
     ([adsisearcher]"objectcategory=computer").findall() |
     ForEach-Object {
      try 
        { 
         Test-Connection -ComputerName ([adsi]$_.path).cn -BufferSize 16 `Function
             -Count 1 -TimeToLive 1 -EA stop} 
      Catch [system.exception]
        {  
          if($showErrors)
            { $error[0].tostring()}  
        }
     } #end foreach-object
    } #End function Get-ADComputersTestConnection
    
    # *** EntryPoint to Script ***
    
    Get-ADComputersTestConnection -showErrors
    
    
    
    Grüße john s.

    Mittwoch, 5. Dezember 2012 12:59

Antworten

  • Hallo John!

    Das Cmdlet (PowerShell Befehl) den Raimund benutzt hat der ist in einem PowerShell Modul. Module sind befehle die man "nachladen" kann.
    leider hat Raimund das nicht erwähnt.

    hier ein Beispiel wie es auch ohne Module Funktioniert.

    $logOnline = "$env:Temp\Online.txt"
    $logNotOnline = "$env:Temp\NotOnline.txt"
    
    ForEach( $Computer in  ([adsisearcher]"(& (objectcategory=computer) (Name=Vwagwocpv7pk))").findall()) {
       
        # DNS Name des Computers auslesen der zum Pingen gebraucht wird
        $DNSName = $Computer.Properties.dnshostname
        
        # variable um zu merken ob der Computer online ist
        $ComputerOn = $False
        
        # 3 Pings in einer FOR schleife absetzen um den Computer zu erreichen
        For ($i = 0; $i -lt 4; $i++){
            
            # Computer mit einem Ping anpingen
            If (Test-Connection $DNSName -Quiet -Count 1 -ErrorAction SilentlyContinue) {
                # Computer ist Online
                $ComputerOn = $True
                #Schleife vorzeitig verlassen (kein weiterer Ping = kein zeitverlust)
                break
            }
            # 1/2 Sekunde warte bevor erneut gepingt wird
            Start-Sleep -Milliseconds 500
        } # ende von For schleife 
        
        
        # ergebis in Logfile schreiben
        If ($ComputerOn) { 
            # Computer ist Online
            Out-File -FilePath $logOnline -Append -InputObject $DNSName
        }
        Else {
            # Computer ist NICHT Online
            Out-File -FilePath $logNotOnline -Append -InputObject $DNSName
        }
    }
    
    # Logfiles anzeigen
    Notepad.exe $logOnline
    Notepad.exe $logNotOnline

    Bitte beschäftige dich mit der PowerShell!

    Wir sind hier kein Skript Auftragsdienst ;-))

    Folgender Link hilft dir dabei:
    http://www.admin-source.de/BlogDeu/kostenlose-powershell-ebook-tutorial-workshop-howto

    Und siehe mal hier meine Buchempfehlungen:
    http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/84727252-3d5d-459e-b3a8-73a15807a807


    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!

    Donnerstag, 6. Dezember 2012 08:53

Alle Antworten

  • Das Script sieht etwas komisch aus. Der CN eines AD Computer muß nicht zwangsläufig der DNS Name sein. Zu wissen, ob ich eine Maschine erreichen kann, muß ich nicht die Exception des Test-Connection Befehls abfangen. Einfacher ist, das Resultat des Pings zu prüfen.

    Folgender Befehl läuft auch mit Get-ADComputer und via Pipeline. Zum Thema Logging hatte ich erst gestern etwas gepostet, das paßt hier recht gut rein. Wenn es nur ganz einfach sein soll, den passenden String via Out-File -Append in ein Text File schreiben.

    Function Get-ADComputerAvailability
    {
    	Param(
    		[Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
    		[Alias("ComputerName")]
    		$DnsHostName
    	)
    	
    	process
    	{
    		$result = Test-Connection -ComputerName $DnsHostName -Count 2 -ErrorAction SilentlyContinue
    		
    		if ($result)
    		{
    			Write-Verbose "Host $DnsHostName is reachable"
    		}
    		else
    		{
    			Write-Verbose "Host $DnsHostName is not reachable"
    		}
    		
    		return [bool]$result
    	}
    }
    cls
    $VerbosePreference = 2
    $computers = Get-ADComputer -Filter *
    $computers | Get-ADComputerAvailability


    -Raimund

    • Als Antwort vorgeschlagen Oliver Lehmann Mittwoch, 5. Dezember 2012 21:35
    Mittwoch, 5. Dezember 2012 18:49
  • Hallo Raimund 

    Kannst du mir noch sagen, wo ich diesen Befehl im Script ansetzen soll?

    Ich kenne mich mit Powershell leider überhaupt nicht aus 

    außerdem kommt folgende fehlermeldung:

    Die Benennung "Get-ADComputer" wurde nicht als Name eines Cmdlet, einer Funktio
    n, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie
    die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), u
    nd wiederholen Sie den Vorgang.
    Bei C:\Users\JSCH\Desktop\ping ad3.ps1:27 Zeichen:28
    + $computers = Get-ADComputer <<<<  -Filter *
        + CategoryInfo          : ObjectNotFound: (Get-ADComputer:String) [], Comm
       andNotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException
    
    Get-ADComputerAvailability : Das Eingabeobjekt kann an keine Parameter des Befe
    hls gebunden werden, da der Befehl keine Pipelineeingaben akzeptiert oder die E
    ingabe und deren Eigenschaften mit keinem der Parameter übereinstimmen, die Pip
    elineeingaben akzeptieren.
    Bei C:\Users\JSCH\Desktop\ping ad3.ps1:28 Zeichen:40
    + $computers | Get-ADComputerAvailability <<<<
        + CategoryInfo          : InvalidArgument: (:) [Get-ADComputerAvailability
       ], ParameterBindingException
        + FullyQualifiedErrorId : InputObjectNotBound,Get-ADComputerAvailability

    grüße john s. 


    • Bearbeitet john s, Donnerstag, 6. Dezember 2012 07:50 error meldung hinzugefügt
    Donnerstag, 6. Dezember 2012 07:46
  • Hallo John!

    Das Cmdlet (PowerShell Befehl) den Raimund benutzt hat der ist in einem PowerShell Modul. Module sind befehle die man "nachladen" kann.
    leider hat Raimund das nicht erwähnt.

    hier ein Beispiel wie es auch ohne Module Funktioniert.

    $logOnline = "$env:Temp\Online.txt"
    $logNotOnline = "$env:Temp\NotOnline.txt"
    
    ForEach( $Computer in  ([adsisearcher]"(& (objectcategory=computer) (Name=Vwagwocpv7pk))").findall()) {
       
        # DNS Name des Computers auslesen der zum Pingen gebraucht wird
        $DNSName = $Computer.Properties.dnshostname
        
        # variable um zu merken ob der Computer online ist
        $ComputerOn = $False
        
        # 3 Pings in einer FOR schleife absetzen um den Computer zu erreichen
        For ($i = 0; $i -lt 4; $i++){
            
            # Computer mit einem Ping anpingen
            If (Test-Connection $DNSName -Quiet -Count 1 -ErrorAction SilentlyContinue) {
                # Computer ist Online
                $ComputerOn = $True
                #Schleife vorzeitig verlassen (kein weiterer Ping = kein zeitverlust)
                break
            }
            # 1/2 Sekunde warte bevor erneut gepingt wird
            Start-Sleep -Milliseconds 500
        } # ende von For schleife 
        
        
        # ergebis in Logfile schreiben
        If ($ComputerOn) { 
            # Computer ist Online
            Out-File -FilePath $logOnline -Append -InputObject $DNSName
        }
        Else {
            # Computer ist NICHT Online
            Out-File -FilePath $logNotOnline -Append -InputObject $DNSName
        }
    }
    
    # Logfiles anzeigen
    Notepad.exe $logOnline
    Notepad.exe $logNotOnline

    Bitte beschäftige dich mit der PowerShell!

    Wir sind hier kein Skript Auftragsdienst ;-))

    Folgender Link hilft dir dabei:
    http://www.admin-source.de/BlogDeu/kostenlose-powershell-ebook-tutorial-workshop-howto

    Und siehe mal hier meine Buchempfehlungen:
    http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/84727252-3d5d-459e-b3a8-73a15807a807


    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!

    Donnerstag, 6. Dezember 2012 08:53