2015-09-17 13 views
5

Próbuję mieć komputery w trybie offline nagrane w pliku tekstowym, aby móc je ponownie uruchomić w późniejszym czasie. Nie wydaje się, że jest rejestrowany lub złapany w haczyk.Powershell próbuj/złap z połączeniem testowym

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 }}} 

Odpowiedz

3

try jest catch ING wyjątkami. Używasz przełącznika -Quiet, więc Test-Connection zwraca $true lub $false i nie jest wyjątkiem, gdy połączenie nie powiedzie się.

Wystarczy zrobić:

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

Tak to działało. Czy wiesz, dlaczego w moim pliku tekstowym przepuszcza tylko ostatnią nazwę komputera? Próbuję pobrać treść "\\ test \ c $ \ powershell \ computers.txt" | get-computernameChange – MattMoo

+0

@ user3620584 Skąd wiadomo, że jest to ostatnia instalacja? – briantist

+0

Jako test wstawiam 3 nazwy komputerów, które nie istnieją, a lista zawiera tylko ostatnie w pliku dziennika. – MattMoo

Powiązane problemy