Megosztás a következőn keresztül:


Univerzális nyomtatási PowerShell-használati esetminták

A UniversalPrintManagement PowerShell modul támogatja a létrehozott PowerShell-szkriptelési mintákat. Ez a cikk néhány mintát mutat be a parancsmagok kombinálásának kiindulópontjaként a kiválasztott használati esetek kezeléséhez.

Nem interaktív univerzális nyomtatási kapcsolat

A PowerShell használatának egyik fő értéke, hogy nem interaktív szkripteket hoz létre, amelyek újra és újra végrehajthatók. Az univerzális nyomtatáshoz való kapcsolat létrehozásához meg kell adnia a felhasználói hitelesítő adatokat. Az egyik lehetőség az, hogy biztonságosan tárolja a felhasználói jelszót, és szükség szerint lekérje.

  1. Jelszó titkos kód biztonságos tárolása fájlban
  2. Jelszó lekérése a hívás előtt 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

Megjegyzés:

További információ és ConvertFrom-SecureString ConvertTo-SecureString itt érhető el.

Csatlakozás or nyomtatóinak kötegelt regisztrációjának törlése

Feltéve, hogy már ismeri a nyomtatók regisztrálásához használt regisztrált Csatlakozás or nevét. A regisztrált Csatlakozás orok listájának lekéréséhez tekintse meg a Get-UP Csatlakozás or parancsmagot.

  1. Csatlakozás univerzális nyomtatásra
  2. Az adott Csatlakozás oron keresztül regisztrált nyomtatók listájának lekérése
  3. A regisztrált nyomtató eltávolítása
Connect-UPService
$ConnectorPrinters = Get-UPPrinter -IncludeConnectorDetails
$ConnectorPrinters.Results | Where-Object {$_.Connectors.DisplayName -Contains "<Connector Name>"} | Remove-UPPrinter

A regisztrált nyomtató azonosítása megosztott nyomtatónév mögött

  1. Csatlakozás univerzális nyomtatásra
  2. A nyomtatók listájának lekérése és az eredmények szűrése helyi géppel
Connect-UPService
$Printers = Get-UPPrinter
$Printer = $Printers.Results | Where-Object {$_.Shares.DisplayName -eq "<Share Name>"}

Batch unshare nyomtatók

  1. Csatlakozás univerzális nyomtatásra
  2. A fontos nyomtatók listájának lekérése
  3. Nyomtatók gyűjteményének megosztásának megszüntetése

Megjegyzés:

Ez a példa az összes megosztott nyomtató megosztásának megszüntetését mutatja be. Ha csak a nyomtatók megosztását szeretné megszüntetni, további szűrők is hozzáadhatók a nyomtatók lekérésekor.

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

A Batch minden felhasználónak hozzáférést biztosít a megosztott nyomtatókhoz

  1. Csatlakozás univerzális nyomtatásra
  2. A fontos nyomtatómegosztások listájának lekérése
  3. Hozzáférés biztosítása a felhasználó számára a nyomtatók gyűjteményéhez
Connect-UPService
$PrinterShares = Get-UPPrinterShare
$PrinterShares.Results | Grant-UPAccess -AllUsersAccess

A Batch hozzáférést biztosít a felhasználóknak vagy a felhasználói csoportoknak a megosztott nyomtatókhoz

  1. Előzetes visszahívás: Felhasználói azonosítók és felhasználói csoportazonosítók lekérése
  2. Csatlakozás univerzális nyomtatásra
  3. A fontos nyomtatómegosztások listájának lekérése
  4. Adott felhasználók vagy csoportok hozzáférésének biztosítása a nyomtatók gyűjteményéhez
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}

A Batch-készlet nyomtatóhelyének tulajdonságai

  1. Csatlakozás univerzális nyomtatásra
  2. A fontos nyomtatók listájának lekérése
  3. Hozzáférés biztosítása a felhasználó számára a nyomtatók gyűjteményéhez
Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results | Set-UPPrinterProperty -Latitude 47.642391 -Longitude -122.137001 -Organization "Contoso" -Site "Main Campus" -City "Redmond" -Building "101"

A ContinuationToken használata

  1. Csatlakozás univerzális nyomtatásra
  2. A fontos nyomtatók listájának lekérése
  3. Időszakos hiba esetén a rendszer részleges eredményeket ad vissza a folytatási jogkivonattal együtt.
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. A ContinuationToken robusztusabbá teszi az eredmények meghívását. Az újrapróbálkozásokat egymáshoz lehet adni és hozzáfűzni. Vegye figyelembe, hogy erre csak azoknak a bérlőknek van szükség, akik magas számú (~8000+) regisztrált nyomtatóval/összekötővel/megosztással/stb. rendelkeznek, és a teljes lista iterálása során konzisztens hibákat tapasztalnak.
do
{
    $i = Get-UPPrinter -ContinuationToken $i.ContinuationToken 
    $allprinters += $i.Results
}
while (![string]::IsNullOrEmpty($i.ContinuationToken))

$allprinters.Results

Kiterjesztett felhasználói és nyomtatóhasználati jelentések letöltése az elmúlt hónapra vonatkozóan

  1. Győződjön meg arról, hogy a megfelelő Microsoft Graph-modul telepítve van
  2. Bejelentkezés a Microsoft Graphba
  3. Kérje le a szükséges "Reports.Read.All" engedélyezési hatókört
  4. A Nyomtató jelentés összegyűjtése és exportálása
  5. A Felhasználói jelentés összegyűjtése és exportálása
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'."