【问题标题】:Start-process raises an error when providing Credentials - possible bug提供凭据时启动过程引发错误 - 可能的错误
【发布时间】:2020-03-23 01:36:23
【问题描述】:

您是否知道为什么在响应下面的代码时会引发此错误。用户名和密码已验证正确。

$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 命令提示符窗口中运行该块时它可以工作??

【问题讨论】:

  • 用我的域用户凭证测试过,它可以工作!
  • 请注意,使用 Power GUI 或 ISE 时会出现此错误
  • 在 ISE 上测试,它可以工作。
  • 可能是你需要测试以本地账户登录,然后将脚本定向到你的域账户
  • 在 ISE 上测试,本地帐户通过域用户凭据。它有效!

标签: powershell start-process


【解决方案1】:

我有同样的错误。

此功能在 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'

【讨论】:

  • 这不是 ISE 与控制台的问题。 Start-Process 似乎将工作目录默认为当前(或起始)目录。首先,将目录更改为帐户有权访问的目录也可以解决问题。我所做的是指定所有用户配置文件目录。 -WorkingDirectory $env:ALLUSERSPROFILE
  • 设置工作目录对我有用。当我试图从映射的驱动程序中运行它时,该脚本遇到了奇怪的错误。只有当我从“\\myRemoteHost\folder\”而不是“S:\folder”执行脚本时,它才会起作用
【解决方案2】:

最好的问题解释埋在comment by Nathan Hartley里,所以我在这里总结一下:

该问题仅与文件系统权限有关,与主机环境(控制台与 ISE)无关:

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

  • 由于您使用-Credential 以其他用户身份运行 - 此时没有提升 - 目标用户可能没有访问当前目录的权限,例如,如果当前目录位于当前用户的主目录子树内,就会发生这种情况。

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

修复

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

例如,要从目标 script 所在的目录启动目标进程,您可以使用类似:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • tl;dr:修改启动 Powershell ISE 的快捷方式,将“开始于”字段更新为 %WINDIR% 而不是 %HOMEDRIVE%%HOMEDIR% 我可以确认这个固定的 powershell ISE 适合我在 Windows XP 上
    • 我不知道您使用的是哪个版本的 PowerShell(或者是否重要),但 Start-Process cmdlet 有一个 -WorkingDirectory 参数。我发现如果您指定类似-WorkingDirectory C:\ 的内容,它可以解决问题。我相信这是因为您拥有的凭据将能够在没有任何权限问题的情况下看到 C:\ 驱动器。
    【解决方案4】:

    我知道这已经很晚了,但该主题对我有所帮助(尤其是 suggestion from @Dionysoos),希望我的回答可能对其他人有所帮助。

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

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

    ...在无人看管的情况下运行脚本,而它在 ISE 中运行。

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 此评论因其长度和内容而被标记为“低质量”。也许应该是评论?
      【解决方案6】:

      在我的情况下,原因是 Windows 10 保存以按我预期的不同方向创建一个新文件,我尝试将 profile.ps1 文件添加到 C:\Users\Username\Documents\WindowsPowerShell 但它应该是 C:\Users\Username\**OneDrive**\Documents\WindowsPowerShell 所以请尝试按照这些步骤操作

      RUN:
      Test-Path C:\Users\User\Documents\WindowsPowerShell\
      IF FALSE
      New-Item -Path C:\Users\User\Documents\WindowsPowerShell\ -ItemType Directory
      THEN
      New-Item -Path $profile.CurrentUserAllHosts -Type File
      THEN
      start $profile.CurrentUserAllHosts
      

      【讨论】:

        【解决方案7】:

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

        【讨论】:

        • 嗨,欢迎来到 Stack Overflow!也许您可以稍微增强您的答案,以便用户理解您的观点。
        猜你喜欢
        • 2019-01-17
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 2018-04-13
        • 2020-08-15
        • 2022-11-11
        • 2020-02-11
        • 1970-01-01
        相关资源
        最近更新 更多