我正在嘗試Send-MailMessage使用我之前通過Get-Credential并存盤在$creds變數中檢索到的憑據在后臺運行。
以下命令幾乎會立即在后臺被阻止:
Start-Job -ScriptBlock { Send-MailMessage -to "[email protected]" -from "[email protected]" -Subject "2342332" -Credential $creds }
運行Get-Job或將上一個命令分配給一個變數并顯示它會給我這個狀態:
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
25 Job25 BackgroundJob Blocked True localhost Send-MailMessage -to ...
直接運行完全相同的命令(不帶Start-Job)將立即完成(在這種情況下,它將失敗,因為我沒有提供 smtp 服務器)。此外,不帶-Credential引數運行完全相同的命令將直接完成作業,以及在后臺運行(由于相同的缺少 smtp 服務器原因,它會失敗,但這并不重要)。
有沒有辦法為此命令提供憑據,最好使用Get-Credential并能夠運行它Start-Job?
uj5u.com熱心網友回復:
后臺作業在單獨的子行程中運行,并且$creds不存在于所述單獨的行程中。Send-MailMessage不接受$null-values 作為 的引數-Credential,因此提示呼叫者輸入有效的非空引數。
您可以在互動式 shell 中重現此阻塞行為:
PS ~> Send-MailMessage -Credential:$null
PowerShell credential request
Enter your credentials.
User:
由于作業在沒有互動功能的運行空間中運行,因此無法滿足請求并且作業狀態被阻塞。
更改-Credential $creds為-Credential $using:creds強制 powershell 將$creds變數復制到作業的運行空間:
Start-Job -ScriptBlock { Send-MailMessage -to "[email protected]" -from "[email protected]" -Subject "2342332" -Credential $using:creds }
或者在呼叫時將其作為顯式引數傳遞Start-Job:
Start-Job -ScriptBlock { Send-MailMessage -to "[email protected]" -from "[email protected]" -Subject "2342332" -Credential $args[0] } -ArgumentList $creds
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405022.html
標籤:
