2017-07-20 31 views
1

我正在嘗試使用Powershell開發自定義任務,該任務需要使用Start-Job -Cred才能切換到其他用戶。代理程序以用戶A的身份運行,我需要切換到用戶B.以用戶A身份登錄運行代理程序的服務器,然後運行腳本才能正常工作 - Start-Job切換憑據並以用戶B的身份運行腳本塊。在自定義任務問題中使用憑據啓動作業

"The background process reported an error with the following message: ." 

我已經做了更多的調試,並沒有其他的錯誤:使用運行代理的用戶A失敗,並在無信息的錯誤一樣(的預置型)代理服務器在雲從VSTS運行完全一樣的東西消息隨處可見這似乎與-Cred參數Start-Job有關,因爲它與腳本塊運行中的內容沒有什麼區別,並且如果我刪除了-Cred參數,它也很好。

  • 用戶A是管理員組中運行的代理
  • 代理的服務器上運行,爲用戶A

任何想法?

+0

嘗試在try/catch塊包裹你的代碼,並查看是否有錯誤被報告給殼。確保在命令的末尾添加「-EA Stop」。在你的catch塊中,你可以使用'Write-Output'[$($ _。Exception.GetType()。FullName)] $($ _。Exception.Message)「' – TheIncorrigible1

+0

已經嘗試過 - 無法再獲取信息錯誤比我提到的錯誤。錯誤似乎是由'Start-Job |中的'Receive-Job'觸發的等待作業| Receive-Job「,因爲'Start-Job'出於某種原因失敗。 – PLK

+0

雲端設備上的執行策略是否相同? – TheIncorrigible1

回答

1

與調用命令,例如(輸出當前用戶名)嘗試:

$mypwd = ConvertTo-SecureString -String "[password, could use variable]" -Force -AsPlainText 
$Cred = New-Object System.Management.Automation.PSCredential('[user name]',$mypwd) 
$scriptToExecute = 
{ 
$VerbosePreference='Continue' 
Write-Output "$env:UserName" 
# Write-Verbose "Verbose" 4>&1 
} 
$b = Invoke-Command -ComputerName localhost -ScriptBlock $scriptToExecute -Credential $Cred 
Write-Output "Content of variable B" 
Write-Host $b 
+0

你說得對 - 這很有用,非常感謝。你知道爲什麼這個工作,但開始工作不? – PLK

+0

@PLK對不起,我不知道。 –

0

根據您的經驗,您的憑據未被正確傳遞。試試這個方法,並將其插入到你的腳本:

你的腳本之外,獲得SecureString的對象 -

Read-Host -AsSecureString | ConvertFrom-SecureString 

把這個命令的輸出(在那裏你輸入密碼),在此之前把你的啓動求職

$Secure = ConvertTo-SecureString -String 'above output' 
$Cred = New-Object System.Management.Automation.PSCredential('Username',$Secure) 
Start-Job -Credential $Cred 

的SecureString的可以通過有人訣竅逆轉,但如果劇本和/或賬戶是安全的,那麼也沒關係。

+0

嗯,我不能這樣做,一切都必須來自腳本內部,但我從純文本轉換爲安全的字符串(從安全的密碼保險箱中檢索等),然後傳遞'$ Cred'與您一樣提到。 – PLK

+0

@PLK您是否使用ConvertTo-SecureString cmdlet轉換純文本? – TheIncorrigible1

相關問題