Was given the task to write a PowerShell script that would do the following:
- Given a supplied list of host name, find the hostnames that have a specific named printer. In this case "osu_mc" will be in the Name property.
- If a printer is found, create a batch file that is titled from the supplied host name.
- The batch file should contain these 2 lines for every printer
"rundll32 printui.dll,PrintUIEntry /in /q /n" and
the printer name:
(i.e. file:////OSU/NDPS_HP4350.OSU.HOSP.CAMPUS.OSU)
Here is the script that meets the need!
Function Get-PrinterName ([string]$HostName) {
Begin {}
Process {
Write-Host "HostName: "$_
$FileName = "C:\PrinterBatch\" + $_ + ".bat"
$file = New-Item -type file $FileName
$Printers = Get-WmiObject `
-Class Win32_Printer`
-ComputerName $_ `
-ErrorAction SilentlyContinue
ForEach ($Printer in $Printers){ if ($Printer.Name -match 'osu_mc'){
Add-Content -Path $FileName `
-value "rundll32 printui.dll,PrintUIEntry /in /q /n"
Add-Content -Path $FileName `
-value $Printer.Name
}
}
}
}
Get-Content 'C:\HostNames.txt' Get-PrinterName
Enjoy!