2015-09-17 18 views
5

Tôi đang cố gắng để máy tính ngoại tuyến được ghi lại trong tệp văn bản để tôi có thể chạy lại chúng sau này. Có vẻ như nó đang được ghi lại hoặc bị bắt.Powershell thử/bắt với kết nối thử nghiệm

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

Trả lời

3

try là dành cho catch ing ngoại lệ. Bạn đang sử dụng công tắc -Quiet để Test-Connection trả lại $true hoặc $false và không throw ngoại lệ khi kết nối không thành công.

Chỉ cần làm:

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

Có mà làm việc. Bạn có biết tại sao nó chỉ đường ống trong tên máy tính cuối cùng trong tập tin văn bản của tôi? Tôi đang cố gắng lấy nội dung "\\ test \ c $ \ powershell \ computers.txt" | get-computernameChange – MattMoo

+0

@ user3620584 làm thế nào để bạn biết nó chỉ là đường ống cuối cùng? – briantist

+0

Là một thử nghiệm, tôi đặt 3 tên máy tính không tồn tại và nó chỉ liệt kê tên máy tính cuối cùng trong tệp nhật ký. – MattMoo

Các vấn đề liên quan