2016-08-02 81 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