Benutzer mit den meisten Antworten
Ausgabe von Kaputten IP Adressen in log

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.
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-howtoUnd siehe mal hier meine Buchempfehlungen:
http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/84727252-3d5d-459e-b3a8-73a15807a807Please 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 Denniver ReiningMVP, Moderator Freitag, 14. Dezember 2012 12:52
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
-
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
-
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-howtoUnd siehe mal hier meine Buchempfehlungen:
http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/84727252-3d5d-459e-b3a8-73a15807a807Please 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 Denniver ReiningMVP, Moderator Freitag, 14. Dezember 2012 12:52
-
Hallo,
ist die Thematik jetzt abgeklärt?
Wenn ja, bitte auch die Antworten markieren, die Dir geholfen haben.
Gruss,
RaulRaul Talmaciu, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.