自定义TFS任务 - 使用特定凭据执行Powershell脚本

时间:2017-09-24 16:54:11

标签: powershell tfs tfsbuild

我为自定义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

2 个答案:

答案 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