使用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
答案 0 :(得分:3)
至于为什么 - 请参阅此答案的底部。
至于有效的解决方法(但是,这需要使用cd
(Set-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 ,我不知道。 如果你这样做,请告诉我们。
在所有其他情况下:
以当前用户身份运行(默认值)
使用-Verb RunAsUser
模拟其他用户(通常会以交互式凭据提示)
以-Credential <PSCredential>
尊重-WorkingDirectory
参数 。
但是,如果(不同的)目标用户缺少访问隐含(当前位置)或明确指定的工作目录(通过-WorkingDirectory
)的权限,则当前位置默认为C:\
以防万一( 2),并在案例(3)中导致Start-Process
命令的失败。