我正在尝试使用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
参数,它也没问题
有什么想法吗?
答案 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 可以由具有专有技术的人员撤销,但如果脚本和/或帐户是安全的,那么这无关紧要。