I will show you how to use PowerShell to extract information about your printers.
We will create a script which not only lists the printers, but also
reveals their properties. For example, the printer's sharename,
driver, status and 90 other properties.
Despite being one of the first devices to be 'plug and play', printers
still give more than their fair share of problems. One clue of
trouble ahead is the large number of adjectives to qualify the
context of the word printer, for example, driver, device, default,
network and share. All this means is that printers provide rich
pickings for writing good PowerShell cmdlets. Here are possible
tasks for a printer script:
List all the printers on your server.
Trawl the network and list the printers on named servers.
Output the list of printers to a file.
Investigate additional WMI classes for use with printers.
Many of these printer cmdlets employ WMI to interrogate computer objects such
as printers. As you may know, Get-WmiObject opens up a whole world of
system objects, which you can then use PowerShell to read their values.
The point of this initial research is to answer the question, 'How did Guy
know to use the class Win32_Printer?'
Instructions
If you have not used PowerShell before, here are step-by-step
instructions to execute commands.
Else, just rely on the trusty copy and paste method.
# PowerShell to list WMI Printer
Objects # Author: Guy Thomas Get-WmiObject -list | where {$_.name -match "Printer"}
Note 1: In addition to Win32_printer (featured below) there
is a class for TCP/IP printing: Win32_TCPIPPrinterPort.
# PowerShell for Printers # Author: Guy Thomas
Clear-Host $Class = "win32_printer"
Get-WmiObject -class $Class | ft name, systemName, shareName -auto
Learning Points
Note 3: Guy's technique of using the variable $Class is optional.
Note 4: ft means: format-Table with the following properties.
Incidentally, you could append -auto.
Guy
Recommends: WMI Monitor and It's Free!
Windows Management Instrumentation (WMI) is one of the hidden
treasures of Microsoft operating systems. Fortunately, Solarwinds
have created a
Free WMI Monitor so that you can discover these gems of performance
information, and thus improve your PowerShell scripts. Take the guess work out of which WMI counters to use when scripting the
operating system, Active Directory or Exchange Server.
# PowerShell cmdlet to investigate win32_printer properties
# Author: Guy Thomas
$Class = "Win32_printer"
$GMProp = Get-WmiObject -class $Class | gm -memberType property `
| where {$_.name -notmatch "__*"}
$GMProp
$GMProp.count
Learning Points
Note 6: Use of -notMatch. "__" needs the star, hence "__*".
Note 7: By assigning the output to a variable, we can count the number of matching
properties.
Note 8: The tiny backtick (`) is useful for explaining to
PowerShell that the same command continues on the next line.
Note 9: Here is a more longwinded alternative to using the .count
property:
| where {if ($_.name -notmatch "__*") {$i++}}
Guy Recommends: Solarwinds' Free Bulk Import Tool
Import users from a spreadsheet. Just provide a list of the
users with their fields in the
top row, and save as .csv file. Then launch this FREE utility and match
your fields with AD's
attributes, click to import the users. Optionally, you can
provide the name of the OU where the new accounts will be born.
There are also two bonus tools in this free download, and all 3 have been approved by Microsoft:
Preliminary step: to get this script to work you must amend 'Server\PrintShare'
to reflect the real name of a server and a printer on your network.
# PowerShell add share printer # Author: Guy Thomas $PrinterPath = "\\Server\PrintShare"
$net = new-Object -com WScript.Network
$net.AddWindowsPrinterConnection($PrinterPath)
Note 10: You must edit the value for $PrinterPath to
reflect a computer on your network.
Note 11: This PowerShell script does not use WmiObject
with its Win32 class, but instead it uses:
New-Object -com WScript.Network.
Note 12: Troubleshooting There should be no space
before the bracket, this mistake caused me some head-scratching, until I
realized that for once there was no spelling mistake in
AddWindowsPrinterConnection, just an unwanted space:
$net.AddWindowsPrinterConnection ($PrinterPath)
Ever since I can remember, printers give more problems than any other
hardware. PowerShell is not the magic bullet to cure all your printer
problems, however, PowerShell makes it easier to configure printers than using
the same commands in VBScript.
If you like this page then please share it with your friends
Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.
Windows Management Instrumentation (WMI) is one of the hidden
treasures of Microsoft operating systems.
Fortunately, Solarwinds
have created the
Free WMI Monitor so that you can actually see and understand these gems of
performance information. Take the guess work out of which
WMI counters to use for applications like Microsoft Active Directory,
SQL or Exchange Server.