PowerShell-användningsfallsexempel för universell utskrift
PowerShell-modulen UniversalPrintManagement stöder de etablerade PowerShell-skriptmönstren. Den här artikeln visar några mönster som utgångspunkt för hur cmdletarna kan kombineras för att hantera utvalda användningsfall.
Icke-interaktiv universalutskriftsanslutning
Ett av huvudvärdena för att använda PowerShell är att skapa icke-interaktiva skript som kan köras om och om igen. Behovet av att ange användarautentiseringsuppgifterna för att upprätta anslutningen till Universal Print går emot den här idén. Ett alternativ är att åtgärda detta är att lagra användarens lösenordshemlighet på ett säkert sätt och hämta den efter behov.
- Lagra lösenordshemlighet på ett säkert sätt i en fil
- Hämta lösenord precis innan du ringer
Connect-UPService
$Secure = Read-Host -AsSecureString
$Encrypted = ConvertFrom-SecureString -SecureString $Secure -Key (1..16)
$Encrypted | Set-Content Encrypted.txt
...
$Secure2 = Get-Content Encrypted.txt | ConvertTo-SecureString -Key (1..16)
Connect-UPService -UserPrincipalName username@tenantname.com -Password $Secure2
Kommentar
Ytterligare information om ConvertFrom-SecureString
och ConvertTo-SecureString
finns här.
Batcha avregistrera skrivare för en Anslut eller
Förutsatt att du redan känner till namnet på den registrerade Anslut eller som används för att registrera skrivarna. Se Cmdleten Get-UP Anslut or för att hämta listan över registrerade Anslut orer.
- Anslut till universell utskrift
- Hämta listan över skrivare som registrerats via den specifika Anslut eller
- Ta bort den registrerade skrivaren
Connect-UPService
$ConnectorPrinters = Get-UPPrinter -IncludeConnectorDetails
$ConnectorPrinters.Results | Where-Object {$_.Connectors.DisplayName -Contains "<Connector Name>"} | Remove-UPPrinter
Identifiera den registrerade skrivaren bakom ett delat skrivarnamn
- Anslut till universell utskrift
- Hämta listan över skrivare och använd den lokala datorn för att filtrera resultatet
Connect-UPService
$Printers = Get-UPPrinter
$Printer = $Printers.Results | Where-Object {$_.Shares.DisplayName -eq "<Share Name>"}
Batch-skrivare som avdelas
- Anslut till universell utskrift
- Hämta listan över skrivare av intresse
- Ta bort delning av samlingen skrivare
Kommentar
Det här exemplet visar att alla delade skrivare inte delas. Om du bara vill ta bort delning väljer du skrivare genom att lägga till ytterligare filter när du hämtar skrivarna.
Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results.Shares | Remove-UPPrinterShare
Batch ger alla användare åtkomst till delade skrivare
- Anslut till universell utskrift
- Hämta listan över skrivarresurser av intresse
- Ge användaren åtkomst till samlingen med skrivare
Connect-UPService
$PrinterShares = Get-UPPrinterShare
$PrinterShares.Results | Grant-UPAccess -AllUsersAccess
Batch bevilja användare eller användargrupper åtkomst till delade skrivare
- Förutsättningar: Hämta användar-ID:t och användargrupps-ID:t
- Anslut till universell utskrift
- Hämta listan över skrivarresurser av intresse
- Ge specifika användare eller grupper åtkomst till samlingen med skrivare
Connect-AzAccount
$Users = Get-AzADUser -First 10
$UserGroups = Get-AzADGroup -SearchString Contoso
Connect-UPService
$PrinterShares = Get-UPPrinterShare
$Users | ForEach-Object {$PrinterShares.Results | Grant-UPAccess -UserID $_.Id}
$UserGroups | ForEach-Object {$PrinterShares.Results | Grant-UPAccess -GroupID $_.Id}
Egenskaper för batchuppsättningsskrivare
- Anslut till universell utskrift
- Hämta listan över skrivare av intresse
- Ge användaren åtkomst till samlingen med skrivare
Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results | Set-UPPrinterProperty -Latitude 47.642391 -Longitude -122.137001 -Organization "Contoso" -Site "Main Campus" -City "Redmond" -Building "101"
Använda ContinuationToken
- Anslut till universell utskrift
- Hämta listan över skrivare av intresse
- Om ett tillfälligt fel påträffas returneras partiella resultat tillsammans med en fortsättningstoken.
Connect-UPService
$Printers = Get-UPPrinter
"Get-UPPrinter :
At line:1 char:13
+ $Printers = Get-UPPrinter
+ ~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (System.Collecti...Models.Printer]:List`1) [Get-UPPrinter], FailedCmdletException
+ FullyQualifiedErrorId : Rerun with -ContinuationToken to continue from last cutoff: MyZRVkZCUVVGQlFVRXZMeTh2THk4dkx5OHZMMGxCUVVGQk5IQTRiR
EY0YWpOdU1DdEtPSG94T1dwUWNHWm5kejA5,Microsoft.UPManagement.Cmdlets.GetPrinter"
$Printers.Results
"(Partial results list of printers)"
$Printers.ContinuationToken
"MyZRVkZCUVVGQlFVRXZMeTh2THk4dkx5OHZMMGxCUVVGQk5IQTRiREY0YWpOdU1DdEtPSG94T1dwUWNHWm5kejA5"
$MorePrinters = Get-UPPrinter -ContinuationToken $Printers.ContinuationToken
$MorePrinters.Results
"(Printer results list continued from previously left off)"
- ContinuationToken gör anropet för resultat mer robust. Återförsök kan läggas till och läggas till i varandra. Observera att detta endast behövs för klienter som har ett högt antal (~8 000+) registrerade skrivare/anslutningsappar/resurser/etc. och som har konsekventa fel när de itererar genom hela listan.
do
{
$i = Get-UPPrinter -ContinuationToken $i.ContinuationToken
$allprinters += $i.Results
}
while (![string]::IsNullOrEmpty($i.ContinuationToken))
$allprinters.Results
Ladda ned utökade användar- och skrivaranvändningsrapporter för den senaste månaden
- Kontrollera att rätt Microsoft Graph-modul är installerad
- Logga in på Microsoft Graph
- Begär det nödvändiga auktoriseringsomfånget "Reports.Read.All"
- Samla in och exportera skrivarrapporten
- Samla in och exportera användarrapporten
Param (
# Date should be in this format: 2020-09-01
# Default is the first day of the previous month at 00:00:00 (Tenant time zone)
$StartDate = "",
# Date should be in this format: 2020-09-30
# Default is the last day of the previous month 23:59:59 (Tenant time zone)
$EndDate = "",
# Set if only the Printer report should be generated
[switch]$PrinterOnly,
# Set if only the User report should be generated
[switch]$UserOnly
)
#############################
# INSTALL & IMPORT MODULES
#############################
if(-not (Get-Module Microsoft.Graph.Reports -ListAvailable)){
Write-Progress -Activity "Installing Universal Print dependencies..." -PercentComplete 60
Install-Module Microsoft.Graph.Reports -Scope CurrentUser -Force
}
Import-Module Microsoft.Graph.Reports
#############################
# SET DATE RANGE
#############################
if ($StartDate -eq "") {
$StartDate = (Get-Date -Day 1).AddMonths(-1).ToString("yyyy-MM-ddT00:00:00Z")
} else {
$StartDate = ([DateTime]$StartDate).ToString("yyyy-MM-ddT00:00:00Z")
}
if ($EndDate -eq "") {
$EndDate = (Get-Date -Day 1).AddDays(-1).ToString("yyyy-MM-ddT23:59:59Z")
} else {
$EndDate = ([DateTime]$EndDate).ToString("yyyy-MM-ddT23:59:59Z")
}
echo "Gathering reports between $StartDate and $EndDate."
########################################
# SIGN IN & CONNECT TO MICROSOFT GRAPH
########################################
# These scopes are needed to get the list of users, list of printers, and to read the reporting data.
Connect-MgGraph -Scopes "Reports.Read.All"
##########################
# GET PRINTER REPORT
##########################
if (!$UserOnly)
{
Write-Progress -Activity "Gathering Printer usage..." -PercentComplete -1
# Get the printer usage report
$printerReport = Get-MgReportMonthlyPrintUsageByPrinter -All -Filter "completedJobCount gt 0 and usageDate ge $StartDate and usageDate lt $EndDate"
## Join extended printer info with the printer usage report
$reportWithPrinterNames = $printerReport |
Select-Object (
@{Name = "UsageMonth"; Expression = {$_.Id.Substring(0,8)}},
@{Name = "PrinterId"; Expression = {$_.PrinterId}},
@{Name = "DisplayName"; Expression = {$_.PrinterName}},
@{Name = "TotalJobs"; Expression = {$_.CompletedJobCount}},
@{Name = "ColorJobs"; Expression = {$_.CompletedColorJobCount}},
@{Name = "BlackAndWhiteJobs"; Expression = {$_.CompletedBlackAndWhiteJobCount}},
@{Name = "ColorPages"; Expression = {$_.ColorPageCount}},
@{Name = "BlackAndWhitePages"; Expression = {$_.BlackAndWhitePageCount}},
@{Name = "TotalSheets"; Expression = {$_.MediaSheetCount}})
# Write the aggregated report CSV
$printerReport | Export-Csv -Path .\printerReport.csv
}
##################
# GET USER REPORT
##################
if (!$PrinterOnly)
{
Write-Progress -Activity "Gathering User usage..." -PercentComplete -1
# Get the user usage report
$userReport = Get-MgReportMonthlyPrintUsageByUser -All -Filter "completedJobCount gt 0 and usageDate ge $StartDate and usageDate lt $EndDate"
$reportWithUserInfo = $userReport |
Select-Object (
@{Name = "UsageMonth"; Expression = {$_.Id.Substring(0,8)}},
@{Name = "UserPrincipalName"; Expression = {$_.UserPrincipalName}},
@{Name = "TotalJobs"; Expression = {$_.CompletedJobCount}},
@{Name = "ColorJobs"; Expression = {$_.CompletedColorJobCount}},
@{Name = "BlackAndWhiteJobs"; Expression = {$_.CompletedBlackAndWhiteJobCount}},
@{Name = "ColorPages"; Expression = {$_.ColorPageCount}},
@{Name = "BlackAndWhitePages"; Expression = {$_.BlackAndWhitePageCount}},
@{Name = "TotalSheets"; Expression = {$_.MediaSheetCount}})
$reportWithUserInfo | Export-Csv -Path .\userReport.csv
}
echo "Reports were written to 'printerReport.csv' and 'userReport.csv'."