Sdílet prostřednictvím


Ukázky použití Univerzálního tisku v PowerShellu

Modul PowerShellu UniversalPrintManagement podporuje zavedené vzory skriptování PowerShellu. Tento článek ukazuje některé vzory jako výchozí bod toho, jak se rutiny dají kombinovat, aby bylo možné řešit vybrané případy použití.

Neinteraktivní připojení univerzálního tisku

Jednou z hlavních hodnot použití PowerShellu je vytvoření neinteraktivních skriptů, které se dají spustit znovu a znovu. K vytvoření připojení k Univerzálnímu tisku je potřeba zadat přihlašovací údaje uživatele. Jednou z možností je bezpečné uložení tajného kódu uživatelského hesla a jeho načtení podle potřeby.

  1. Bezpečné uložení tajného kódu hesla do souboru
  2. Načtení hesla těsně před voláním 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

Poznámka:

Další informace o ConvertFrom-SecureString této službě a ConvertTo-SecureString jsou k dispozici zde.

Zrušení registrace tiskáren Připojení oru

Za předpokladu, že už znáte název registrovaného Připojení or použitý k registraci tiskáren. Informace o načtení seznamu registrovaných Připojení orů najdete v rutině Get-UP Připojení or.

  1. Připojení do univerzálního tisku
  2. Získání seznamu tiskáren registrovaných prostřednictvím konkrétního Připojení oru
  3. Odebrání registrované tiskárny
Connect-UPService
$ConnectorPrinters = Get-UPPrinter -IncludeConnectorDetails
$ConnectorPrinters.Results | Where-Object {$_.Connectors.DisplayName -Contains "<Connector Name>"} | Remove-UPPrinter

Identifikace registrované tiskárny za názvem sdílené tiskárny

  1. Připojení do univerzálního tisku
  2. Načtení seznamu tiskáren a použití místního počítače k filtrování výsledků
Connect-UPService
$Printers = Get-UPPrinter
$Printer = $Printers.Results | Where-Object {$_.Shares.DisplayName -eq "<Share Name>"}

Zrušení sdílení tiskáren ve službě Batch

  1. Připojení do univerzálního tisku
  2. Získání seznamu tiskáren, které jsou zajímavé
  3. Zrušení sdílení kolekce tiskáren

Poznámka:

Tento příklad ukazuje sdílení všech sdílených tiskáren. Pokud chcete zrušit sdílení jenom vybraných tiskáren, můžete při načítání tiskáren přidat další filtry.

Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results.Shares | Remove-UPPrinterShare

Batch uděluje všem uživatelům přístup ke sdíleným tiskárnám.

  1. Připojení do univerzálního tisku
  2. Získání seznamu sdílených složek tiskáren, které jsou zajímavé
  3. Udělení přístupu uživatelům ke kolekci tiskáren
Connect-UPService
$PrinterShares = Get-UPPrinterShare
$PrinterShares.Results | Grant-UPAccess -AllUsersAccess

Batch uděluje uživatelům nebo skupinám uživatelů přístup ke sdíleným tiskárnám.

  1. Předběžné požadavky: Načtení ID uživatelů a ID skupin uživatelů
  2. Připojení do univerzálního tisku
  3. Získání seznamu sdílených složek tiskáren, které jsou zajímavé
  4. Udělení přístupu konkrétním uživatelům nebo skupinám ke kolekci tiskáren
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}

Dávkové nastavení vlastností umístění tiskárny

  1. Připojení do univerzálního tisku
  2. Získání seznamu tiskáren, které jsou zajímavé
  3. Udělení přístupu uživatelům ke kolekci tiskáren
Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results | Set-UPPrinterProperty -Latitude 47.642391 -Longitude -122.137001 -Organization "Contoso" -Site "Main Campus" -City "Redmond" -Building "101"

Použití funkce ContinuationToken

  1. Připojení do univerzálního tisku
  2. Získání seznamu tiskáren, které jsou zajímavé
  3. Pokud dojde k přerušovanému selhání, vrátí se částečné výsledky spolu s tokenem pokračování.
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)"
  1. Funkce ContinuationToken zajišťuje, aby výsledky byly robustnější. Opakování je možné přidat a připojit k sobě navzájem. Všimněte si, že to je potřeba jenom pro tenanty, kteří mají vysoké číslo (přibližně 8 000+) registrovaných tiskáren, konektorů, sdílených složek atd. a při iterování celým seznamem dochází k konzistentním selháním.
do
{
    $i = Get-UPPrinter -ContinuationToken $i.ContinuationToken 
    $allprinters += $i.Results
}
while (![string]::IsNullOrEmpty($i.ContinuationToken))

$allprinters.Results

Stáhnout rozšířené sestavy o využití uživatelů a tiskáren za poslední měsíc

  1. Ujistěte se, že je nainstalovaný správný modul Microsoft Graphu.
  2. Přihlášení k Microsoft Graphu
  3. Vyžádání požadovaného oboru autorizace Reports.Read.All
  4. Shromáždění a export sestavy tiskárny
  5. Shromáždění a export sestavy uživatele
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'."