382 lines
19 KiB
PowerShell
382 lines
19 KiB
PowerShell
# other powershell snmp information
|
|
# https://solvedbypowershell.blogspot.com/2014/12/powershell-using-snmp-for-html-network.html
|
|
# https://www.powershellgallery.com/packages/Proxx.SNMP/1.0.1.2/Content/Invoke-SnmpGet.ps1
|
|
# https://www.powershellgallery.com/packages/Proxx.SNMP/1.0.0.1/Content/Invoke-SnmpWalk.ps1
|
|
# https://exchange.nagios.org/directory/Plugins/Hardware/Printers/SNMP-Printer-Check/details
|
|
# https://www.powershellgallery.com/packages/Proxx.SNMP/1.1.1.4
|
|
# https://www.reddit.com/r/PowerShell/comments/77ls36/printer_page_counter_from_print_server/
|
|
# https://gallery.technet.microsoft.com/Get-PrintStatistics-a6bb8323
|
|
# https://gallery.technet.microsoft.com/scriptcenter/Script-to-generate-print-84bdcf69
|
|
|
|
function Get-SHSPrinter {
|
|
param (
|
|
[string[]]$printers
|
|
)
|
|
|
|
begin {
|
|
$snmp = New-Object -ComObject olePrn.OleSNMP
|
|
}
|
|
|
|
process {
|
|
foreach ($printer in $printers) {
|
|
|
|
#Gets the printer ip and full domain name
|
|
$hit = $false
|
|
$domains = @('.gsrmc.int.samhealth.net', '.avery.int.samhealth.net', '.sagh.int.samhealth.net', '.snlh.int.samhealth.net', '.slch.int.samhealth.net', '.spch.int.samhealth.net')
|
|
$result = Resolve-DnsName $printer -ErrorAction SilentlyContinue
|
|
|
|
if ($null -eq $result) {
|
|
$hit = $false
|
|
foreach ($domain in $domains) {
|
|
$search = "$printer$domain"
|
|
$result = Resolve-DnsName $search -ErrorAction SilentlyContinue
|
|
if ($null -ne $result) {
|
|
$hit = $true
|
|
$name = $result.Name
|
|
$ip = $result.IPAddress
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($null -eq $result) {
|
|
if ($hit -eq $false) {
|
|
$ip = $null
|
|
$name = $null
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$name = $result.Name
|
|
$ip = $result.IPAddress
|
|
|
|
}
|
|
|
|
$result = [ordered]@{Hostname = $printer
|
|
IP = $ip
|
|
Path = $name
|
|
}
|
|
|
|
#CMDB Data
|
|
|
|
if ($null -ne $result.IP) {
|
|
|
|
$printerip = $result.IP
|
|
$domainName = $result.Path
|
|
|
|
#checks to see if the printer is online
|
|
$online = Test-Connection $printerip -ErrorAction SilentlyContinue
|
|
|
|
if ($online) {
|
|
#opens snmp connection to the printer
|
|
$snmp.open($printerip, 'public', 2, 3000)
|
|
|
|
# Start of MAC
|
|
$pMAC = $SNMP.get(".1.3.6.1.2.1.2.2.1.6.2")
|
|
$MAC = [System.Text.Encoding]::Default.GetBytes($PMac) | ForEach-Object {
|
|
$_.ToString('X2')
|
|
}
|
|
$MAC = $MAC -join ':'
|
|
#End of MAC
|
|
|
|
# MODEL
|
|
try { $model = $snmp.Get('.1.3.6.1.2.1.25.3.2.1.3.1') } catch { $model = $null }
|
|
|
|
# IF IT HAS A MODEL NAME...
|
|
if ($model) {
|
|
|
|
# COLOR
|
|
# might want to check on this one
|
|
try { if ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.2') -match 'Toner|Cartridge|ink') { $color = 'Yes' } else { $color = 'No' } } catch { $color = 'No' }
|
|
|
|
# TRAYS
|
|
try { $trays = $($snmp.GetTree('.1.3.6.1.2.1.43.8.2.1.13') | Where-Object { $_ -notlike 'print*' }) -join ';' } catch { $trays = $null }
|
|
|
|
# SERIAL
|
|
try { $serial = $snmp.Get('.1.3.6.1.2.1.43.5.1.1.17.1') } catch { $serial = $null }
|
|
|
|
#PAGECOUNT
|
|
|
|
try { $pagecount = $snmp.Get('.1.3.6.1.2.1.43.10.2.1.4.1.1') } catch { $page = $null }
|
|
|
|
##### FEATURES, NAME
|
|
switch -Regex ($model) {
|
|
'^sharp' {
|
|
try { $status = $snmp.Get('.1.3.6.1.2.1.43.18.1.1.8.1.1') } catch { $status = $null }
|
|
# Start of MAC
|
|
$pMAC = $SNMP.get(".1.3.6.1.4.1.11.2.4.3.1.23.0")
|
|
write-host $pMAC.ToString()
|
|
|
|
$MAC = [System.Text.Encoding]::Default.GetBytes($PMac) | ForEach-Object {
|
|
$_.ToString('X2')
|
|
}
|
|
$MAC = $MAC -join ':'
|
|
#End of MAC
|
|
}
|
|
'^zebra' {
|
|
try { $name = $snmp.Get('.1.3.6.1.4.1.10642.1.4.0').toupper() } catch { $name = $null }
|
|
try { $model = $snmp.Get('.1.3.6.1.4.1.10642.200.19.7.0').toupper() } catch { $model = $null }
|
|
try { $MAC = $snmp.Get('.1.3.6.1.4.1.10642.20.10.20.10.2.1.5.2').toupper() } catch { $MAC = $null }
|
|
try { $serial = $snmp.Get('.1.3.6.1.4.1.10642.200.19.5.0') } catch { $serial = $null }
|
|
# try { $status = $snmp.Get('.1.3.6.1.4.1.10642.200.4.1.0') } catch { $status = $null }
|
|
$model = "Zebra $model"
|
|
#STATUS
|
|
$uri = $domainName
|
|
$html = Invoke-WebRequest -uri $uri
|
|
$raw = $html.rawcontent
|
|
$raw -match '([A-Z])\w+<.F' | Out-Null
|
|
$status = ($Matches[0] -split '<')[0]
|
|
#split off error condition
|
|
$raw -match 'RED>.+' | Out-Null
|
|
$split = $Matches[0] -split '>'
|
|
$err = $split[1] -split '<'
|
|
$status = $status + ' ' + $err[0]
|
|
|
|
}
|
|
'^lexmark' {
|
|
try { $name = $snmp.Get('.1.3.6.1.4.1.641.1.5.7.6.0').toupper() } catch { $name = $null }
|
|
}
|
|
'^ricoh' {
|
|
try { $name = $snmp.Get('.1.3.6.1.4.1.367.3.2.1.7.3.5.1.1.2.1.1').toupper() } catch { $name = $null }
|
|
}
|
|
'^hp' {
|
|
try { $name = $snmp.Get('.1.3.6.1.4.1.11.2.4.3.5.46.0').toupper() } catch { $name = $null }
|
|
try { $status = $snmp.Get('.1.3.6.1.4.1.11.2.3.9.1.1.3.0') } catch { $status = $null }
|
|
if ($MAC -eq '') {
|
|
$pMAC = $snmp.Get('.1.3.6.1.4.1.11.2.4.3.1.12.1.2.5')
|
|
$MAC = ($pMAC -split " ")[-1]
|
|
$MAC = ($MAC -replace '(..)', '$1:').trim(':')
|
|
|
|
}
|
|
#TONER
|
|
<#
|
|
HP Maintenance Kit Cur: 1.3.6.1.2.1.43.11.1.1.9.1.2
|
|
HP Maintenance Kit Max: 1.3.6.1.2.1.43.11.1.1.8.1.2
|
|
HP Toner Cur: 1.3.6.1.2.1.43.11.1.1.9.1.1
|
|
HP Toner Max: 1.3.6.1.2.1.43.11.1.1.8.1.1
|
|
#>
|
|
try { $tonerColor = ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.1') -split ' ')[0] } catch { $tonerColor = $null }
|
|
try { $tonerLvl = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.9.1.1') } catch { $tonerLvl = $null }
|
|
try { $tonerMax = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.8.1.1') } catch { $tonerMax = $null }
|
|
try { $toner = $tonerLvl / $tonerMax } catch { $toner = $null }
|
|
[int]$toner = $toner * 100
|
|
$supplies = "$tonerColor" + ":$toner% "
|
|
if ($color -eq 'Yes') {
|
|
try { $tonerColor = ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.2') -split ' ')[0] } catch { $tonerColor = $null }
|
|
try { $tonerLvl = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.9.1.2') } catch { $tonerLvl = $null }
|
|
try { $tonerMax = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.8.1.2') } catch { $tonerMax = $null }
|
|
try { $toner = $tonerLvl / $tonerMax * 100 } catch { $toner = $null }
|
|
$supplies += "$tonerColor" + ":$toner% "
|
|
|
|
try { $tonerColor = ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.3') -split ' ')[0] } catch { $tonerColor = $null }
|
|
try { $tonerLvl = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.9.1.3') } catch { $tonerLvl = $null }
|
|
try { $tonerMax = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.8.1.3') } catch { $tonerMax = $null }
|
|
try { $toner = $tonerLvl / $tonerMax * 100 } catch { $toner = $null }
|
|
$supplies += "$tonerColor" + ":$toner% "
|
|
|
|
try { $tonerColor = ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.4') -split ' ')[0] } catch { $tonerColor = $null }
|
|
try { $tonerLvl = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.9.1.4') } catch { $tonerLvl = $null }
|
|
try { $tonerMax = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.8.1.4') } catch { $tonerMax = $null }
|
|
try { $toner = $tonerLvl / $tonerMax * 100 } catch { $toner = $null }
|
|
$supplies += "$tonerColor" + ":$toner% "
|
|
|
|
try { $supplyName = ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.6') -split ' ')[0] } catch { $tonerColor = $null }
|
|
if ($supplyName -contains 'Fuser' -or $supplyName -contains 'Maint') {
|
|
try { $supplyPartNumber = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.6') } catch { $supplyPartNumber = $null }
|
|
$supplyPartNumber -match '110V-(?<Name>.+), ' | Out-Null
|
|
$supplyPartNumber = $Matches.Name
|
|
try { $mainLvl = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.9.1.6') } catch { $mainLvl = $null }
|
|
try { $mainMax = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.8.1.6') } catch { $mainMax = $null }
|
|
if ($mainMax -gt 1) {
|
|
try { $maintKit = $mainLvl / $mainMax } catch { $maintKit = $null }
|
|
[int]$maintKit = $maintKit * 100
|
|
|
|
if ($null -ne $maintKit) {
|
|
$supplies += "| $supplyName" + ":$maintKit%[$supplyPartNumber]"
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
try { $supplyName = ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.5') -split ' ')[1] } catch { $tonerColor = $null }
|
|
try { $supplyPartNumber = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.5') } catch { $supplyPartNumber = $null }
|
|
$supplyPartNumber -match '110V-(?<Name>.+), ' | Out-Null
|
|
$supplyPartNumber = $Matches.Name
|
|
try { $mainLvl = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.9.1.5') } catch { $mainLvl = $null }
|
|
try { $mainMax = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.8.1.5') } catch { $mainMax = $null }
|
|
if ($mainMax -gt 1) {
|
|
try { $maintKit = $mainLvl / $mainMax } catch { $maintKit = $null }
|
|
[int]$maintKit = $maintKit * 100
|
|
|
|
if ($null -ne $maintKit) {
|
|
$supplies += "| $supplyName" + ":$maintKit%[$supplyPartNumber]"
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
else {
|
|
try { $supplyName = ($snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.2') -split ' ')[0] } catch { $supplyName = $null }
|
|
try { $supplyPartNumber = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.6.1.2') } catch { $supplyPartNumber = $null }
|
|
$supplyPartNumber -match '110V-(?<Name>.+), ' | Out-Null
|
|
$supplyPartNumber = $Matches.Name
|
|
try { $mainLvl = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.9.1.2') } catch { $mainLvl = $null }
|
|
try { $mainMax = $snmp.Get('.1.3.6.1.2.1.43.11.1.1.8.1.2') } catch { $mainMax = $null }
|
|
if ($mainMax -gt 1) {
|
|
try { $maintKit = $mainLvl / $mainMax } catch { $maintKit = $null }
|
|
[int]$maintKit = $maintKit * 100
|
|
|
|
if ($null -ne $maintKit) {
|
|
$supplies += "| $supplyName" + ":$maintKit%[$supplyPartNumber]"
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
'^muratec' {
|
|
try { $name = $snmp.Get('.1.3.6.1.4.1.11.2.4.3.5.46.0').toupper() } catch { $name = $null }
|
|
try { $status = $snmp.Get('.1.3.6.1.2.1.43.16.5.1.2.1.1') } catch { $status = $null }
|
|
# Start of MAC
|
|
$pMAC = $SNMP.get('.1.3.6.1.4.1.4322.101.1.2.1.5.2.1.1.3.1')
|
|
Write-Host $pMAC
|
|
$MAC = [System.Text.Encoding]::Default.GetBytes($PMac) | ForEach-Object {
|
|
$_.ToString('X2')
|
|
}
|
|
$MAC = $MAC -join ':'
|
|
#End of MAC
|
|
}
|
|
default {
|
|
|
|
}
|
|
}
|
|
#if ($model -like 'SHARP*') {}
|
|
|
|
}
|
|
}
|
|
else {
|
|
$status = "Offline"
|
|
$MAC = $CMDB_MAC
|
|
$model = $CMDB_model
|
|
$serial = $CMDB_serial
|
|
$color = "Offline"
|
|
$trays = "Offline"
|
|
$pagecount = "Offline"
|
|
}
|
|
|
|
$props = [Ordered]@{
|
|
Machine = $printer
|
|
Status = $status
|
|
IP = $printerip
|
|
DomainName = $domainName
|
|
MAC = $MAC
|
|
Model = $model
|
|
Serial = $serial
|
|
#Comment = $comment
|
|
Color = $color
|
|
Trays = $trays
|
|
#Features = $features
|
|
#SystemDescription = $sysdescr0
|
|
#Addresses = $addr
|
|
PageCount = $pagecount
|
|
Supplies = $supplies
|
|
}
|
|
$obj = New-Object -TypeName PSObject -Property $props
|
|
$snmp.close()
|
|
return $obj
|
|
|
|
|
|
}
|
|
}
|
|
|
|
$props = [Ordered]@{
|
|
Machine = $printer
|
|
Status = 'No DNS Entry'
|
|
IP = 'No DNS Entry'
|
|
DomainName = 'No DNS Entry'
|
|
MAC = 'No DNS Entry'
|
|
Model = 'No DNS Entry'
|
|
Serial = 'No DNS Entry'
|
|
#Comment = $comment
|
|
Color = 'No DNS Entry'
|
|
Trays = 'No DNS Entry'
|
|
PageCount = 'No DNS Entry'
|
|
}
|
|
$obj = New-Object -TypeName PSObject -Property $props
|
|
$snmp.close()
|
|
return $obj
|
|
|
|
}
|
|
}
|
|
|
|
|
|
function Get-PrinterIP {
|
|
|
|
param (
|
|
[parameter(ValueFromPipeline)]
|
|
[string]$printer
|
|
)
|
|
$hit = $false
|
|
$domains = @('.gsrmc.int.samhealth.net', '.avery.int.samhealth.net', '.sagh.int.samhealth.net', '.snlh.int.samhealth.net', '.slch.int.samhealth.net', '.spch.int.samhealth.net')
|
|
$result = Resolve-DnsName $printer -ErrorAction SilentlyContinue
|
|
|
|
if ($null -eq $result) {
|
|
$hit = $false
|
|
foreach ($domain in $domains) {
|
|
$search = "$printer$domain"
|
|
$result = Resolve-DnsName $search -ErrorAction SilentlyContinue
|
|
if ($null -ne $result) {
|
|
$hit = $true
|
|
$name = $result.Name
|
|
$ip = $result.IPAddress
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($null -eq $result) {
|
|
if ($hit -eq $false) {
|
|
$ip = $null
|
|
$name = $null
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$name = $result.Name
|
|
$ip = $result.IPAddress
|
|
|
|
}
|
|
|
|
$props = [ordered]@{Hostname = $printer
|
|
IP = $ip
|
|
Path = $name
|
|
}
|
|
$obj = New-Object -TypeName PSObject -Property $props
|
|
|
|
return $obj
|
|
|
|
|
|
}
|
|
|
|
function Start-SHSPrinterWeb {
|
|
param(
|
|
$printer
|
|
)
|
|
|
|
process {
|
|
if ($printer.DomainName -ne 'No DNS Entry' -and $printer.MAC -ne 'Offline') {
|
|
$domainName = $printer.DomainName
|
|
Start-Process "http://$domainName"
|
|
$mac = $printer.MAC
|
|
Start-Sleep -Seconds 1
|
|
Start-Process "https://shsorion/Orion/UDT/EndpointDetails.aspx?NetObject=UE-MAC:VAL=$mac"
|
|
|
|
}
|
|
else {
|
|
Write-Warning "Unable to launch web interface"
|
|
}
|
|
|
|
}
|
|
}
|