使用动词时,workingdirectory不起作用

时间:2016-08-02 03:20:01

标签: powershell windows-10

使用Start-Process,当使用Verb时,Workingdirectory选项不起作用,新的PowerShell始终在C:\WINDOWS\system32开始。为什么是这样?如果没有额外的cd命令,我怎么能这样做?

PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14393.0
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.0
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\> Start-Process -FilePath powershell.exe -Verb Runas -WorkingDirectory C:\ws\

# the new ps shell always in system32:

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\WINDOWS\system32> pwd

Path
----
C:\WINDOWS\system32

1 个答案:

答案 0 :(得分:3)

至于为什么 - 请参阅此答案的底部

至于有效的解决方法(但是,这需要使用cdSet-Location)):

Start-Process -FilePath powershell.exe -Verb Runas `
  -ArgumentList '-NoExit -Command "cd C:\ws"'

为了避免引用头痛,您还可以单独传递参数,但命令字符串本身除外:

Start-Process -FilePath powershell.exe -Verb Runas `
  -ArgumentList '-NoExit', '-Command', 'cd C:\ws'

实际上,从PSv5开始 - docs do not mention that - 如果您启动进程提升,则-WorkingDirectory参数 >(使用管理权限,这是-Verb RunAs - 有点模糊不清):位置默认为$env:SYSTEMROOT\system32 (通常为C:\Windows\System32

请注意,这不是-Verb参数本身就是问题,而是其特定的RunAs参数。

这种行为是否存在良好的技术原因,或者这是否是 bug ,我不知道。 如果你这样做,请告诉我们。

在所有其他情况下:

  1. 以当前用户身份运行(默认值)

  2. 使用-Verb RunAsUser模拟其他用户(通常会以交互式凭据提示)

  3. -Credential <PSCredential>

  4. 作为其他用户以非交互方式投放

    尊重-WorkingDirectory参数

    但是,如果(不同的)目标用户缺少访问隐含(当前位置)或明确指定的工作目录(通过-WorkingDirectory)的权限,则当前位置默认为C:\以防万一( 2),并在案例(3)中导致Start-Process命令的失败