Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义TFS任务-使用特定凭据执行Powershell脚本_Powershell_Tfs_Tfsbuild - Fatal编程技术网

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

自定义TFS任务-使用特定凭据执行Powershell脚本,powershell,tfs,tfsbuild,Powershell,Tfs,Tfsbuild,我为自定义TFS任务构建和发布任务编写了powershell脚本。现在,我需要使用特定凭据执行一些命令。为此,我创建以下语句: Start-Process powershell -Credential $mycred -Wait -ArgumentList "-file $taskDir\task.ps1" -RedirectStandardOutput C:\Temp\taskOutput.log 如果在powershell中执行该命令,则一切正常。但是一旦从TFS服务执行该命令,它就不起作

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

谢谢

更新日期1:


为了更好地理解我上载了完整的自定义任务

当您对生成进行排队时,所有生成任务都应该在您的生成服务帐户(如NetworkService)下运行。如果运行脚本,将弹出一个PS窗口并立即再次关闭。它无法作为其他用户直接运行脚本

TFS构建允许您通过构建中的设置访问PAT令牌 释义这些是即时生成的PAT令牌,因此您不会 需要在任何地方存储任何秘密

要在开发人员的机器上运行脚本,可以询问 开发人员输入PAT或具有if else逻辑,您可以在其中询问他 用户名和密码

更多详细信息请参阅此链接:


您还可以看看这个类似的问题:

改用Invoke命令。相关线程:


您使用的是什么TFS版本?一般来说,我建议使用已创建的解决方案-。如果您想要定制BuildTasks,您可以扩展github one。当执行build task时,是否使用TFS build service帐户?您的意思是希望使用构建管道中的另一个凭据运行任务吗?我使用TFS 2015-但我认为该链接与我的问题无关@Patrick MSFT确切地说,我需要与另一个用户一起执行powerschell脚本,因为该任务运行具有集成安全性的EntityFramework迁移。我上传了完整的任务,你可以在问题中看到。你能理解我的问题吗?谢谢,但这并不能解决我的问题。我的问题是,如果要执行具有特定凭据的脚本,powershell会为Start Process命令打开一个新窗口。但是,通过从tfs构建服务执行此操作,在Start process参数中指定的进程将不会执行。
$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