您是否可能知道为什么会出现此错误以响应下面的代码。用户名和密码已经过验证是正确的。
$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命令提示符窗口中运行块时工作而被绊倒?
答案 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
作为其他用户运行 - 此时没有提升 - 目标用户可能无权访问当前目录,如果当前目录位于当前用户的主目录子树中,则会发生这种情况。
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。