2016-08-02 67 views
2

使用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 

回答

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参数。

是否有一个良好的技术原因行为,或是否这是一个错误,我不知道。 如果您愿意,请告诉我们。

在所有其他方案:

  1. 运行作为当前用户原样(缺省值)

  2. 冒充与-Verb RunAsUser不同的用户(具有总是交互式凭证提示)

  3. 作为不同用户以非交互方式运行-Credential <PSCredential>

-WorkingDirectory参数尊重。

然而,如果(不同的)目标用户缺乏权限访问的隐含(当前位置)或者在情况(2)显式指定的工作目录(通过-WorkingDirectory),当前位置默认为C:\,并且在结果(3)中的Start-Process命令的失败

+1

感谢您的解释! – fluter