提供凭据时,启动进程会引发错误 - 可能的错误

时间:2011-09-06 12:07:34

标签: powershell start-process

您是否可能知道为什么会出现此错误以响应下面的代码。用户名和密码已经过验证是正确的。

$secPassword = ConvertTo-SecureString "Password" -AsPlaintext -Force 
$farmCredential = New-Object System.Management.Automation.PsCredential "SharePoint\SP_Farm",$secPassword

Start-Process $PSHOME\powershell.exe -Credential $FarmCredential -ArgumentList "-NoExit","-Command `"&{`$outvar1 = 4+4; `"write-output `"Hello:`"`$outvar1`"}`"" -Wait

错误;

Start-Process : This command cannot be executed due to the error: The directory name is invalid.
At C:\Users\Administrator.SHAREPOINT\AppData\Local\Temp\fb2956d7-87fc-4235-9f3c-742698cafe9f.ps1:8 char:14
+ Start-Process <<<<  $PSHOME\powershell.exe -Credential $FarmCredential -ArgumentList "-NoExit","-Command `"&{`$outvar1 = 4+4; `"write-output 
`"Hello:`"`$outvar1`"}`"" -Wait
    + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

然而,这很好用。

Start-Process $PSHOME\powershell.exe -ArgumentList "-NoExit","-Command `"&{`$outvar1 = 4+4; `"write-output `"Hello:`"`$outvar1`"}`"" -Wait

注意:这是从PowerGUI或ISE ide中执行的 文件fb2956d7-87fc-4235-9f3c-742698cafe9f.ps1确实存在于路径位置,因此由于某种原因,ide对此具有不足之处。然而,它直接在power shell命令提示符/ shell中运行时工作。 我使用本地管理员运行的本地计算机帐户登录,该脚本将执行指向没有管理员权限的域帐户,并且仅使用用户权限运行。

这是一个错误吗,因为作为开发人员,IDE不应该因为它在powershell命令提示符窗口中运行块时工作而被绊倒?

7 个答案:

答案 0 :(得分:10)

我有同样的错误。

使用Powershell ISE时此功能正常,但不适用于PowerGUI

Start-Process -FilePath "C:\WINDOWS\System32\cmd.exe" -Credential $credential -ArgumentList ("/c $sFileExecutable")

它适用于WorkingDirectory参数

Start-Process -FilePath 'cmd.exe' -Credential $credential -ArgumentList ("/c $sFileExecutable") -WorkingDirectory 'C:\Windows\System32'

答案 1 :(得分:5)

这是一个奇怪的,但我重新创建了错误,并修复了它......

http://support.microsoft.com/kb/832434

基本上,将Powershell_ISE(或PowerGUI!)的启动目录修改为系统范围的值。

答案 2 :(得分:3)

我知道这已经很晚了,但线程帮助了我(特别是suggestion from @Dionysoos),希望我的回答可以帮助别人。

我有同样的错误......

Start-Process : This command cannot be executed due to the error: The directory name is invalid.

...在无人值守的情况下运行脚本时,它在ISE中工作。

无人参与脚本使用特定于用户的$env:TEMP作为工作目录,这意味着新进程无法访问它。在-WorkingDirectory $env:windir命令上指定 Start-Process 可解决此问题。

答案 3 :(得分:3)

问题的最佳解释隐藏在comment by Nathan Hartley中,所以让我在这里总结一下:

问题完全与文件系统权限相关,与主机环境无关(控制台与ISE):

  • 使用Start-Process而未指定目标目录-WorkingDirectory时,PowerShell的当前位置(目录)也用于目标进程。

  • 由于您正在使用-Credential作为其他用户运行 - 此时没有提升 - 目标用户可能无权访问当前目录,如果当前目录位于当前用户的主目录子树中,则会发生这种情况。

    • 不幸的是,PowerShell的错误消息通过误导性报告掩盖了这一原因:The directory name is invalid.

<强>修正

  • 确保目标用户
  • 可以访问当前位置
  • 或者,最好使用-WorkingDirectory参数显式设置目标进程的当前目录。

例如,要从目标脚本所在的目录启动目标进程,可以使用以下内容:

$script = 'c:\path\to\your\script.ps1'
Start-Process -WorkingDirectory (Split-Path $script) -Credential ...

答案 4 :(得分:1)

我知道这可能有点晚了,但是当你当前目录是网络路径时,你是在运行那个命令吗?我经历过这个问题,如果我从系统驱动器运行相同的命令,它就可以工作。

答案 5 :(得分:0)

在我的情况下,原因是Windows 10保存下来,以我期望的不同方向创建新文件,我尝试将profile.ps1文件添加到C:\Users\Username\Documents\WindowsPowerShell,但它应该是{{1 }} 因此,只需尝试按照以下步骤操作

C:\Users\Username\**OneDrive**\Documents\WindowsPowerShell

答案 6 :(得分:-1)

将-WorkingDirectory设置为exe目录仍有问题... 发现将-WorkingDirectory设置为C:\ Windows \ System32并使用fq路径来执行exe。