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

我正在尝试使用Powershell开发一个自定义任务,它需要使用
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