如何使用用户凭据在Powershell中运行Start-Process?

时间:2014-02-13 15:35:45

标签: powershell jenkins

我有一个Windows服务(Jenkins),它运行一个需要以特定用户身份运行命令的脚本。

我试图这样做,但它不起作用:

$secpasswd = ConvertTo-SecureString "myPassword" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential("DOMAIN\myUsername", $secpasswd)

$Arguments = @()
$Arguments += "-Command"
$Arguments += "pwd"
$Arguments += ">"
$Arguments += "output.txt"
Start-Process powershell.exe -ArgumentList $Arguments -Credential $mycreds -NoNewWindow -WorkingDirectory $workingDir
Start-Sleep 2
Get-Content "$workingDir\output.txt"

我得到了这个输出:

Start-Process : This command cannot be executed due to the error: Access is denied.
At C:\Windows\TEMP\hudson2382859596554223918.ps1:32 char:14
+ Start-Process <<<<  powershell.exe -ArgumentList $Arguments -Credential $mycreds -NoNewWindow -WorkingDirectory $workingDir
    + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

现在,如果我删除-Credential $mycreds,它就可以了。最后Start-Sleep的原因是我在阅读this question on SO后删除了-Wait

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:10)

$username = "username"

$password = "password"


$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))


Start-Process dnscrypt-proxy.exe -WorkingDirectory path_here -Credential ($credentials)

- 来自powershell论坛;我在几天前搜索了同样的解决方案,这很有效。希望它可以帮助你。

来源:http://powershell.com/cs/forums/t/9502.aspx

答案 1 :(得分:6)

最后找到了解决方案:默认情况下,Jenkins作为“本地系统帐户”作为服务登录运行。要更改此启动服务应用程序(在开始菜单中键入“services”),请查找Jenkins,双击它并转到“登录”选项卡。

您现在应该看到该服务正在使用的帐户。更改为“此帐户”并填写您的帐户详细信息并瞧!

对于记录,我最初尝试运行的命令现在工作正常,而不必在顶部添加任何“更改用户”的东西。

特别感谢@Poorkenny让我按照他的评论走上了正确的轨道,谢谢你! Stackoverflow摇滚! (那一刻,感谢某人,你刚刚解决了一整天让你想出来的问题......)