2015-09-17 11 views
5

Ich versuche Offline-Computer in einer Textdatei aufzunehmen, damit ich sie zu einem späteren Zeitpunkt erneut ausführen kann. Es scheint nicht, dass es aufgezeichnet oder gefangen wird.Powershell try/catch mit test-connection

function Get-ComputerNameChange { 

    [CmdletBinding()] 
    Param(
    [Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)] 
    [string[]]$computername, 
    [string]$logfile = 'C:\PowerShell\offline.txt' 
    ) 




    PROCESS { 

     Foreach($computer in $computername) { 
     $continue = $true 
     try { Test-Connection -computername $computer -Quiet -Count 1 -ErrorAction stop 
     } catch [System.Net.NetworkInformation.PingException] 
     { 
      $continue = $false 

      $computer | Out-File $logfile 
     } 
     } 

     if($continue){ 
     Get-EventLog -LogName System -ComputerName $computer | Where-Object {$_.EventID -eq 6011} | 
     select machinename, Time, EventID, Message }}} 

Antwort

3

try ist für catch ing Ausnahmen. Sie verwenden den -Quiet Switch, so dass Test-Connection$true oder $false zurückgibt, und keine throw Ausnahme, wenn die Verbindung fehlschlägt.

Just do:

if (Test-Connection -computername $computer -Quiet -Count 1) { 
    # succeeded do stuff 
} else { 
    # failed, log or whatever 
} 
+0

Ja, das funktioniert. Würdest du wissen, warum es nur den letzten Computernamen in meiner Textdatei pipettiert? Ich versuche Get-Content "\\ test \ c $ \ powershell \ computers.txt" | get-computernameChange – MattMoo

+0

@ user3620584 woher weißt du, dass es nur Piping in der letzten? – briantist

+0

Als Test gebe ich 3 Computernamen ein, die nicht existieren und nur den letzten in der Protokolldatei auflisten. – MattMoo