Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Moduł UniversalPrintManagement programu PowerShell obsługuje ustanowione wzorce skryptów programu PowerShell. W tym artykule przedstawiono pewne wzorce jako punkt początkowy sposobu łączenia poleceń cmdlet w celu rozwiązania wybranych przypadków użycia.
Nieinterakcyjne połączenie usługi Universal Print
Jedną z głównych wartości użycia programu PowerShell jest utworzenie skryptów nieinterakcyjnych, które można wykonać ponownie. Konieczność wprowadzenia poświadczeń użytkownika w celu nawiązania połączenia z usługą Universal Print jest sprzeczna z tym pomysłem. Jedną z opcji jest bezpieczne przechowywanie wpisu tajnego hasła użytkownika i pobieranie go zgodnie z potrzebami.
- Bezpieczne przechowywanie wpisu tajnego hasła do pliku
- Pobieranie hasła tuż przed wywołaniem
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
Uwaga
Dodatkowe informacje o ConvertFrom-SecureString
i ConvertTo-SecureString
są dostępne tutaj.
Wsadowe wyrejestrowywanie drukarek Połączenie or
Zakładając, że znasz już nazwę zarejestrowanego Połączenie or używanego do rejestrowania drukarek. Zapoznaj się z poleceniem cmdlet Get-UP Połączenie or, aby pobrać listę zarejestrowanych Połączenie or.
- Połączenie do usługi Universal Print
- Pobieranie listy drukarek zarejestrowanych za pośrednictwem określonego Połączenie or
- Usuwanie zarejestrowanej drukarki
Connect-UPService
$ConnectorPrinters = Get-UPPrinter -IncludeConnectorDetails
$ConnectorPrinters.Results | Where-Object {$_.Connectors.DisplayName -Contains "<Connector Name>"} | Remove-UPPrinter
Identyfikowanie zarejestrowanej drukarki za nazwą drukarki udostępnionej
- Połączenie do usługi Universal Print
- Pobieranie listy drukarek i filtrowanie wyników przy użyciu komputera lokalnego
Connect-UPService
$Printers = Get-UPPrinter
$Printer = $Printers.Results | Where-Object {$_.Shares.DisplayName -eq "<Share Name>"}
Drukarki wsadowe cofania udostępniania
- Połączenie do usługi Universal Print
- Pobieranie listy interesujących drukarek
- Anulowanie udostępniania kolekcji drukarek
Uwaga
W tym przykładzie pokazano anulowanie udostępniania wszystkich udostępnionych drukarek. Aby anulować udostępnianie tylko drukarek, podczas pobierania drukarek można dodawać dodatkowe filtry.
Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results.Shares | Remove-UPPrinterShare
Usługa Batch udziela wszystkim użytkownikom dostępu do udostępnionych drukarek
- Połączenie do usługi Universal Print
- Pobieranie listy interesujących udziałów drukarek
- Udzielanie użytkownikowi dostępu do kolekcji drukarek
Connect-UPService
$PrinterShares = Get-UPPrinterShare
$PrinterShares.Results | Grant-UPAccess -AllUsersAccess
Usługa Batch udziela użytkownikom lub grupom użytkowników dostępu do udostępnionych drukarek
- Pre-requite: Pobieranie identyfikatorów użytkowników i identyfikatorów grup użytkowników
- Połączenie do usługi Universal Print
- Pobieranie listy interesujących udziałów drukarek
- Udzielanie określonym użytkownikom lub grupom dostępu do kolekcji drukarek
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}
Właściwości lokalizacji drukarki zestawu usługi Batch
- Połączenie do usługi Universal Print
- Pobieranie listy interesujących drukarek
- Udzielanie użytkownikowi dostępu do kolekcji drukarek
Connect-UPService
$Printers = Get-UPPrinter
$Printers.Results | Set-UPPrinterProperty -Latitude 47.642391 -Longitude -122.137001 -Organization "Contoso" -Site "Main Campus" -City "Redmond" -Building "101"
Korzystanie z elementu ContinuationToken
- Połączenie do usługi Universal Print
- Pobieranie listy interesujących drukarek
- Jeśli wystąpi sporadyczne niepowodzenie, zostaną zwrócone częściowe wyniki wraz z tokenem kontynuacji.
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)"
- Funkcja ContinuationToken sprawia, że wywołanie wyników jest bardziej niezawodne. Ponowne próby można dodawać i dołączać do siebie. Należy pamiętać, że jest to wymagane tylko w przypadku dzierżaw, które mają dużą liczbę (~8000+) zarejestrowanych drukarek/łączników/udziałów/itp. i występują spójne błędy podczas iteracji po całej liście.
do
{
$i = Get-UPPrinter -ContinuationToken $i.ContinuationToken
$allprinters += $i.Results
}
while (![string]::IsNullOrEmpty($i.ContinuationToken))
$allprinters.Results
Pobieranie rozszerzonych raportów użycia użytkowników i drukarek w ostatnim miesiącu
- Upewnij się, że zainstalowano prawidłowy moduł programu Microsoft Graph
- Zaloguj się do programu Microsoft Graph
- Zażądaj wymaganego zakresu autoryzacji "Reports.Read.All"
- Zbieranie i eksportowanie raportu drukarki
- Zbieranie i eksportowanie raportu użytkownika
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'."