在自定义任务问题中使用凭据启动作业

时间:2017-07-20 14:54:15

标签: powershell azure-devops azure-pipelines

我正在尝试使用Powershell开发一个自定义任务,需要使用Start-Job -Cred切换到其他用户的位置。代理以用户A的身份运行,我需要切换到用户B.以用户A的身份登录运行代理的服务器,然后运行脚本正常工作 - Start-Job切换凭据并以用户B的身份运行脚本块。

使用与用户A运行代理的相同(本地)代理服务器从云中的VSTS运行完全相同的操作失败,并显示无信息错误:

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

我做了更多调试,并且没有其他任何错误消息。它似乎与-Cred的{​​{1}}参数有关,因为它与脚本块运行中的内容没有区别,如果我删除Start-Job参数,它也没问题

  • 用户A位于运行代理的服务器上的Adminstrators组中
  • 代理以用户A
  • 运行

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试使用Invoke-Command,例如(输出当前用户名):

$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

答案 1 :(得分: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 可以由具有专有技术的人员撤销,但如果脚本和/或帐户是安全的,那么这无关紧要。