Powershell 在自定义任务问题中使用凭据启动作业
我正在尝试使用Powershell开发一个自定义任务,它需要使用Powershell 在自定义任务问题中使用凭据启动作业,powershell,azure-devops,azure-pipelines,Powershell,Azure Devops,Azure Pipelines,我正在尝试使用Powershell开发一个自定义任务,它需要使用Start Job-Cred切换到其他位置的用户。代理正在以用户A的身份运行,我需要切换到用户B。以用户A的身份登录到运行代理的服务器,然后运行脚本可以正常工作-Start Job切换凭据并以用户B的身份运行脚本块 使用作为用户A运行代理的相同(在prem上)代理服务器从云中的VST运行完全相同的内容失败,并出现非信息性错误: "The background process reported an error with the fo
Start Job-Cred
切换到其他位置的用户。代理正在以用户A的身份运行,我需要切换到用户B。以用户A的身份登录到运行代理的服务器,然后运行脚本可以正常工作-Start Job
切换凭据并以用户B的身份运行脚本块
使用作为用户A运行代理的相同(在prem上)代理服务器从云中的VST运行完全相同的内容失败,并出现非信息性错误:
"The background process reported an error with the following message: ."
我做了更多的调试,没有其他错误消息。它似乎与Start Job
的-Cred
参数有关,因为它对脚本块运行中的内容没有影响,如果我删除-Cred
参数,也可以
- 用户A位于运行代理的服务器上的Adminstrators组中
- 代理以用户身份运行
有什么想法吗?根据您的经验,您的证书没有正确通过。尝试此方法并将其插入脚本: 在脚本之外,获取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可以被有专门知识的人撤销,但是如果脚本和/或帐户是安全的,那么这并不重要。使用Invoke命令尝试,例如(输出当前用户名):
尝试将代码包装在Try/catch块中,查看是否有错误报告给shell。确保在命令末尾添加
-EA Stop
。在catch块中,您可以使用Write Output“[$($).Exception.GetType().FullName)]$($).Exception.Message)”
已经尝试过了-无法获得比我提到的错误更多的信息。该错误似乎是由启动作业|等待作业|接收作业
中的接收作业
触发的,因为启动作业
由于某种原因失败。云设备上的执行策略是否相同?我不确定您的意思-如何检查?获取执行策略
嗯,我不能这样做,所有内容都必须来自脚本内部,但我正在从纯文本(从安全密码库等检索)转换为安全字符串,然后按您所说的那样传递$Cred
。@PLK您是否使用ConvertTo-SecureString cmdlet转换纯文本?您是对的-这很有效,非常感谢。你知道为什么这个有效,但启动作业无效吗?@PLK抱歉,我不知道。
$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