На ПоШе когда-то баловался... Но работает по SNMP, если на принтерах спецом закрыли 161 порт, то не прокатит...
$SNMP = new-object -ComObject olePrn.OleSNMP
$NET = '10.2.2.'
$IP_all = @()
1..254 | %{ $IP_all += ($NET+$_) }
$udpobject = new-Object system.Net.Sockets.Udpclient
$udpobject.client.ReceiveTimeout = 1000
$a = new-object system.text.asciiencoding
$kk = @(48,36,2,1,1,4,6,112,117,98,108,105,99,161,23,2,2,117,6,2,1,0,2,1,0,48,11,48,9,6,5,43,6,1,2,1,5,0) # magic packet
foreach($IP in $IP_all)
{
if(!(Test-Connection -CN $IP -Count 1 -BufferSize 16 -Quiet)) { continue }
$conn = $udpobject.Connect($IP,161)
$ans = [void]$udpobject.Send($kk,$kk.length)
$remoteendpoint = New-Object system.net.ipendpoint([system.net.ipaddress]::Any,0)
$receivebytes = $udpobject.Receive([ref]$remoteendpoint)
[string]$returndata = $a.GetString($receivebytes)
$snmp.open($IP,'public',1,500)
$IP
$snmp.Get(".1.3.6.1.2.1.25.3.2.1.3.1") # ОИД Device Description - стандарт.
$snmp.Get(".1.3.6.1.2.1.1.5.0") # ОИД System Name - стандарт.
$snmp.Get(".1.3.6.1.2.1.43.5.1.1.17.1").Trim() # ОИД серийника - не стандарт!
"-------------------------------------------------------------------------------------"
}
$SNMP.Close()