我正在尋找一種方法來獲取我創建的腳本。只需一次對各個列印機運行它。如果可能的話,我不關心回傳成功或失敗以外的任何資訊。
到目前為止,這就是我想出的:
$scriptBlock = {
param($PRINTSERVER,$PRINTER)
. \\rictx-script-p2\Scripts\Module\OS\Print Server\Set-Permissions\Apply-PrinterPermissions3.ps1
Apply-PrinterPermissions -PrintServers $PRINTSERVER -PrinterName_Single $PRINTER
}
$PSERVER = "MTHOH-PRINT-P06"
$MyPrinter = "WILPA0P30"
#Async
Start-Job -ScriptBlock $scriptBlock -ArgumentList @($PSERVER,$MyPrinter)
該腳本并行作業得很好。但我正在嘗試加快在環境中 900 多臺不同列印機上運行 12 到 13 小時的速度。通過應用腳本異步。該腳本已配置為在整個列印服務器上和單獨在列印機上作業。確保根據公司政策為他們分配一致的權限。平均而言,每臺列印機的腳本大約需要 1 到 1.5 分鐘來應用列印機 ACL 更改。
我的想法是讓腳本塊加載列印機權限腳本,使用列印服務器單獨呼叫每個作業的列印機。一次運行大約 50 到 100 個作業。這需要向腳本塊發送 2 個引數以呼叫函式。
最好的方法是什么?目前,當我開始作業時,腳本什么都不做。但是如果我直接呼叫 apply-printerpermissions3 腳本就可以了。
我嘗試過的其他事情:
$scriptBlock = {
param($P)
. \\rictx-script-p2\Scripts\Module\OS\Print Server\Set-Permissions\Apply-PrinterPermissions3.ps1
Apply-PrinterPermissions -PrintServers $P[0] -PrinterName_Single $P[1]
}
$PSERVER = "MTHOH-PRINT-P06"
$MyPrinter = "WILPA0P30"
#Async
Start-Job -ScriptBlock $scriptBlock -ArgumentList @($PSERVER,$MyPrinter)
#Syncroneous
& $scriptBlock -PRINTSERVER $PServer -PRINTER $MyPrinter
Sycroneous 行程有效,但異步無效。
抱歉,我不確定如何使用代碼塊添加我的評論作為回復:我試過這個:
$s = New-PSSession -ComputerName mthoh-print-p06
$scriptBlock = { param($PRINTSERVER,$PRINTER)
Write-Host "$PRINTSERVER"
Write-Host "------------"
Write-Host "$Printer"
. \\rictx-script-p2\Scripts\Module\OS\Print Server\Set-Permissions\Apply-PrinterPermissions3.ps1
Apply-PrinterPermissions -PrintServers $PRINTSERVER -PrinterName_Single $PRINTER }
$ArgumentList = "PSERVER", "Wilpa0p30"
Invoke-Command -Session $s -ScriptBlock $scriptBlock -AsJob -ArgumentList $ArgumentList
$s = New-PSSession -ComputerName mthoh-print-p06
$scriptBlock = { param($P)
Write-Host "$PRINTSERVER"
Write-Host "------------"
Write-Host "$Printer"
. \\rictx-script-p2\Scripts\Module\OS\Print Server\Set-Permissions\Apply-PrinterPermissions3.ps1
Apply-PrinterPermissions -PrintServers $P[0] -PrinterName_Single $P[1]
}
$ArgumentList = "PSERVER", "Wilpa0p30"
Invoke-Command -Session $s -ScriptBlock $scriptBlock -AsJob -ArgumentList $ArgumentList
我的問題是這已完成,但似乎沒有做任何事情。如果我在本地呼叫它而不使用 Invoke-command,該腳本就可以作業。
我不擔心傳遞每個列印機名稱的程序。我可以輕松做到:
foreach ( $Printer in ((Get-Printer -Computername $Server).Name) )
{do something to pass each command to my Printer ACL Script...}
My Printer ACL Script is configured to do a printer individually and process a server as a whole.
I think I have found something that works. Thanks for your help:
$parameters = @{
ComputerName = "mthoh-print-p06"
ScriptBlock = { param($PRINTSERVER,$PRINTER)
Write-host "$($env:COMPUTERNAME) --- $($env:USERNAME)"
Write-Host "$PRINTSERVER"
Write-Host "------------"
Write-Host "$Printer"
$item = "\\rictx-script-p2\Scripts\Module\OS\Print Server\Set-Permissions\Apply-PrinterPermissions3.ps1"
([System.IO.File]::Exists($Item))
. "\\rictx-script-p2\Scripts\Module\OS\Print Server\Set-Permissions\Apply-PrinterPermissions3.ps1"
Apply-PrinterPermissions -PrintServers $PRINTSERVER -PrinterName_Single $PRINTER }
ArgumentList = "mthoh-print-p06", "Wilpa0p30"
}
Invoke-Command @parameters -EnableNetworkAccess -AsJob
$j = Get-Job
$j | Format-List -Property *
$results = $j | Receive-Job
get-job | Where {$_state -ne "Running"} | Remove-Job
uj5u.com熱心網友回復:
如上評論所述。我會嘗試通過運行該腳本塊Invoke-Command與-AsJob引數。這將回傳一份作業,你可以等待。與 PSRemoting 結合使用,您可以觸發多個Invoke-Command將作業回傳到遠程執行的 s。有關示例,請參閱PowerShell 檔案。如果您需要以只讀方式將本地引數傳遞給遠程作業,請參閱此示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405499.html
標籤:
