2015-12-16 42 views
0

我試圖使用PowerShell獲取所有網絡打印機的聯機或脫機狀態。我有兩個簡單的代碼:與網絡打印機的測試連接

$servers = "myserver1", "myserver2" 
gwmi win32_printer -ComputerName $servers | Where-Object {$_.shared} | %{ $prname = $_.Name; $prtname = $_.portname; $srv = $_.systemname; $status = $_.detectederrorstate; $location = $_.location; gwmi win32_tcpipprinterport -computername $servers | where { $_.Name -eq $prtname } | select @{name="Name";expression={$prname}}, @{name="Server";expression={$srv}}, @{name="Status";expression={$status}}, @{name="Location";expression={$location}}, hostaddress } 

這將使輸出,如:

Name  : printer_name 
Server  : printer_server 
Status  : detectederrortate 
Location : room_number 
hostaddress : printer_fqdn 

而且

$pp= gwmi win32_tcpipprinterport | select hostaddress 
foreach ($p in $pp) { 
$pr = $p.hostaddress 
if (Test-Connection -ComputerName $pr -BufferSize 16 -Count 1 -Quiet) {Write-Host "$pr is online"} 

else 
{write-host "$pr is offline"} 
} 

隨着輸出

printer_fqdn is offline 
printer_fqdn is online 

我怎樣才能得到這樣

輸出
Name  : printer_name 
Server  : printer_server 
Status  : 0 
Location : room_number 
hostaddress : printer_fqdn 
Ping  : Online\Offline 

使用test-connection cmdlet並將第二個腳本的結果粘貼到具有ping結果的新字符串中?

+0

當您管道到'select *'時,屬性中包含的數據不在那裏? – Colyn1337

+0

是的。但問題是如何將第二個腳本的結果與「test-connect」放在名爲「Ping」的第一個腳本中的新字符串中?通過使用函數或smth其他? –

回答

1
$servers = "myserver1", "myserver2" 

$printers = gwmi win32_printer -ComputerName $servers | Where-Object {$_.shared} | select Name, @{n='Server';e={$_.systemname}}, @{n='Status';e={$_.detectederrorstate}}, Location, 
@{n='HostAddress';e={ 
    $prtname = $_.portname 
    gwmi win32_tcpipprinterport -computername $_.systemname | where { $_.Name -eq $prtname } | select -exp hostaddress 
}} 

$printers | % { 
    $_ | Add-Member -MemberType NoteProperty -Name Ping -Value $(
     if (Test-Connection -ComputerName $_.hostaddress -BufferSize 16 -Count 1 -Quiet) { 
      'Online' 
     } else { 
      'Offline' 
     } 
    ) 
} 

$printers | sort ping, name | ft -a 
+0

謝謝,它像一個魅力。我是Powershell的新手,很難自己找出一些技巧=) –