-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDisplay-Printers.ps1
More file actions
54 lines (48 loc) · 2.34 KB
/
Display-Printers.ps1
File metadata and controls
54 lines (48 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<#
.Synopsis
Creates a GUI similar to the Print Management tool
#>
$printServer = Read-Host "Print Server"
function Display-Printers {
$obj = Get-Printer -CimSession "$printServer" | select Name, PrinterStatus, JobCount, DriverName | ? { $_.Name -notlike '*chi*' }
$dataGrid.items.Clear()
$obj | % { $dataGrid.items.Add($_) }
$sort = New-Object System.ComponentModel.SortDescription("Name","Ascending")
$dataGrid.items.SortDescriptions.add($sort)
$dataGrid.items.Refresh()
}
# GUI Code
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="[Printer Explorer]" Height="350" Width="450" MinHeight="350" MinWidth="400" ResizeMode="CanResizeWithGrip">
<Grid>
<Button Name="button" Content="[ Refresh ]" Margin="10,10,10,0" VerticalAlignment="Top" Height="25"/>
<DataGrid Name="dataGrid" Margin="10,40,10,10" IsReadOnly="True" SelectionMode="Single" SelectionUnit="Cell">
<DataGrid.Columns>
<DataGridTextColumn Header="Printer" Width="125" Binding="{Binding Name}" SortDirection="Descending"/>
<DataGridTextColumn Header="Status" Width="75" Binding="{Binding PrinterStatus}"/>
<DataGridTextColumn Header="Jobs" Width="50" Binding="{Binding JobCount}"/>
<DataGridTextColumn Header="Driver" Width="125" Binding="{Binding DriverName}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
'@
# XAML Launcher
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
try{$Form=[Windows.Markup.XamlReader]::Load( $reader )}
catch{Write-Host "Unable to load Windows.Markup.XamlReader. Some possible causes for this problem include: .NET Framework is missing PowerShell must be launched with PowerShell -sta, invalid XAML code was encountered."; break}
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)}
$button.Add_Click({
Display-Printers
})
$Form.Add_Loaded({
$Form.Title = "Printer Viewer"
Display-Printers
})
# Show GUI
$Form.ShowDialog() | out-null