我为自定义TFS任务(构建和发布任务)编写了一个powershell脚本。现在我需要使用特定凭据执行一些命令。为此我创建了以下语句:
Start-Process powershell -Credential $mycred -Wait -ArgumentList "-file $taskDir\task.ps1" -RedirectStandardOutput C:\Temp\taskOutput.log
如果我在powershell中执行命令,一切正常。但是一旦命令将从TFS服务执行,它就不起作用。如果我删除-Credential $mycred
参数,该命令也适用于TFS执行的上下文。
我想问题是,-Credential $mycred
打开了一个新窗口。因此它在TFS执行中不起作用。
任何人都知道使用特定凭据执行powershell脚本的更好解决方案吗?
谢谢!
UPDDATE 1:
为了更好地理解,我上传了完整的自定义任务here
答案 0 :(得分:1)
使用Invoke-Command代替。相关主题:Start-Job with credential in custom task problems。
$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 $Cre
答案 1 :(得分:0)
对构建进行排队时,所有构建任务都应在构建服务帐户(如NetworkService)下运行。如果您运行脚本,则弹出一个PS窗口并立即关闭。它无法以不同的用户身份直接运行脚本。
TFS Builds允许您通过构建中的设置访问PAT令牌 定义。这些都是动态生成的PAT令牌,所以你不会 需要在任何地方存储任何秘密。
要在开发人员的计算机上运行脚本,您可以询问 开发人员输入PAT或有一个if else逻辑,你可以问他 用户名密码。
更多详情请参阅此链接: link
你也可以看看这个类似的问题:https://docs.microsoft.com/en-us/vsts/build-release/actions/scripts/powershell#use-the-oauth-token-to-access-the-rest-api