Partager via


Exemples de cas d’utilisation d’impression universelle PowerShell

Le module PowerShell UniversalPrintManagement prend en charge les modèles de script PowerShell établis. Cet article présente certains modèles comme point de départ de la façon dont les applets de commande peuvent être combinées pour aborder les cas d’usage sélectionnés.

Connexion d’impression universelle non interactive

L’une des principales valeurs d’utilisation de PowerShell consiste à créer des scripts non interactifs qui peuvent être exécutés à nouveau. La nécessité d’entrer les informations d’identification de l’utilisateur pour établir la connexion à l’impression universelle est contraire à cette idée. L’une des options consiste à stocker le secret de mot de passe utilisateur de manière sécurisée et à le récupérer selon les besoins.

  1. Stocker en toute sécurité le secret de mot de passe dans un fichier
  2. Récupérer le mot de passe juste avant d’appeler 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

Remarque

Des informations supplémentaires sur ConvertFrom-SecureString et ConvertTo-SecureString sont disponibles ici.

Annuler l’inscription par lot d’imprimantes d’un Connecter or

En supposant que vous connaissez déjà le nom du Connecter or inscrit utilisé pour inscrire les imprimantes. Reportez-vous à l’applet de commande Get-UP Connecter or pour récupérer la liste des Connecter ors inscrits.

  1. Connecter à l’impression universelle
  2. Obtenir la liste des imprimantes inscrites via le Connecter or particulier
  3. Supprimer l’imprimante inscrite
Connect-UPService
$ConnectorPrinters = Get-UPPrinter -IncludeConnectorDetails
$ConnectorPrinters.Results | Where-Object {$_.Connectors.DisplayName -Contains "<Connector Name>"} | Remove-UPPrinter

Identification de l’imprimante inscrite derrière un nom d’imprimante partagé

  1. Connecter à l’impression universelle
  2. Récupérer la liste des imprimantes et utiliser l’ordinateur local pour filtrer les résultats
Connect-UPService
$Printers = Get-UPPrinter
$Printer = $Printers.Results | Where-Object {$_.Shares.DisplayName -eq "<Share Name>"}

Imprimantes de partage Batch

  1. Connecter à l’impression universelle
  2. Obtenir la liste des imprimantes intéressantes
  3. Annuler le partage de la collection d’imprimantes

Remarque

Cet exemple montre un partage de toutes les imprimantes partagées. Pour annuler le partage uniquement des imprimantes, des filtres supplémentaires peuvent être ajoutés lors de la récupération des imprimantes.

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

Batch accorde à tous les utilisateurs l’accès aux imprimantes partagées

  1. Connecter à l’impression universelle
  2. Obtenir la liste des partages d’imprimantes d’intérêt
  3. Accorder à l’utilisateur l’accès à la collection d’imprimantes
Connect-UPService
$PrinterShares = Get-UPPrinterShare
$PrinterShares.Results | Grant-UPAccess -AllUsersAccess

Batch accorder aux utilisateurs ou aux groupes d’utilisateurs l’accès aux imprimantes partagées

  1. Prééquité : Récupérer les ID d’utilisateur et les ID de groupe d’utilisateurs
  2. Connecter à l’impression universelle
  3. Obtenir la liste des partages d’imprimantes d’intérêt
  4. Accorder à des utilisateurs ou des groupes spécifiques l’accès à la collection d’imprimantes
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}

Propriétés de l’emplacement de l’imprimante batch set

  1. Connecter à l’impression universelle
  2. Obtenir la liste des imprimantes intéressantes
  3. Accorder à l’utilisateur l’accès à la collection d’imprimantes
Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results | Set-UPPrinterProperty -Latitude 47.642391 -Longitude -122.137001 -Organization "Contoso" -Site "Main Campus" -City "Redmond" -Building "101"

Utilisation de ContinuationToken

  1. Connecter à l’impression universelle
  2. Obtenir la liste des imprimantes intéressantes
  3. Si une défaillance intermittente est rencontrée, les résultats partiels sont retournés, ainsi qu’un jeton de continuation.
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. ContinuationToken rend l’appel aux résultats plus robustes. Les nouvelles tentatives peuvent être ajoutées et ajoutées les unes aux autres. Notez que cela n’est nécessaire que pour les locataires qui ont un nombre élevé (~8000+) d’imprimantes/connecteurs/partages/etc. inscrits et qui rencontrent des échecs cohérents lors de l’itération dans toute la liste.
do
{
    $i = Get-UPPrinter -ContinuationToken $i.ContinuationToken 
    $allprinters += $i.Results
}
while (![string]::IsNullOrEmpty($i.ContinuationToken))

$allprinters.Results

Télécharger les rapports d’utilisation étendus de l’utilisateur et de l’imprimante pour le mois dernier

  1. Vérifiez que le module Microsoft Graph correct est installé
  2. Se connecter à Microsoft Graph
  3. Demander l’étendue d’autorisation « Reports.Read.All » requise
  4. Collecter et exporter le rapport d’imprimante
  5. Collecter et exporter le rapport utilisateur
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'."