【问题标题】:Test-connection to network printers测试连接到网络打印机
【发布时间】:2015-12-16 23:35:21
【问题描述】:

我正在尝试使用 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

使用测试连接 cmdlet 并将第二个脚本的结果粘贴到带有 ping 结果的新字符串中?

【问题讨论】:

  • 当您通过管道传输到select * 时,是否包含您想要的数据的属性不存在?
  • 是的。但问题是如何将带有“test-connect”的第二个脚本的结果放入名为“Ping”的第一个脚本中的新字符串中?通过使用函数还是其他方式?

标签: powershell printing


【解决方案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

【讨论】:

  • 谢谢,它就像一个魅力。我是 powershell 新手,自己想出一些技巧有点困难 =)
猜你喜欢
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
相关资源
最近更新 更多