作为管理员的Start-Process -WorkingDirectory不设置位置

时间:2017-04-19 11:46:58

标签: powershell

当我输入命令

Start-Process powershell -WorkingDirectory "D:\folder"

它会打开新的PowerShell窗口并设置D:\folder位置。

但是当我输入命令时

Start-Process powershell -WorkingDirectory "D:\folder" -Verb RunAs

它会打开新的PowerShell窗口,其管理员权限并设置了C:\Windows\system32位置。

如何打开具有管理员权限的新PowerShell窗口并确定我自己的位置?

5 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题,并使用以下命令解决了该问题:

Start-Process powershell.exe -verb runAs -ArgumentList '-NoExit', '-Command', 'cd D:\folder'

运行上述命令后,Windows将以管理员权限和指定目录启动。

答案 1 :(得分:1)

这是另一个示例,可用于以管理员身份从PowerShell打开CMD到当前文件夹:

Start-Process cmd -ArgumentList ("/k cd {0}" -f (Get-Location).path) -Verb RunAs
如果用于脚本中,则可以使用
Start-Process cmd -ArgumentList ("/k cd {0}" -f $PSScriptRoot) -Verb RunAs

如果要从当前未提升的新的提升的PowerShell会话中打开,可以使用:
Start-Process powershell.exe -ArgumentList ("-NoExit",("cd {0}" -f (Get-Location).path)) -Verb RunAs

Start-Process powershell.exe -ArgumentList ("-NoExit",("cd {0}" -f (Get-Location).path)) -Verb RunAs
在脚本中使用时

答案 2 :(得分:0)

以管理员身份运行Powershell后;

使用push-location命令,如下所示:

Push-Location -Path C:\

或将其放入脚本并从提升的Powershell提示符运行脚本。

答案 3 :(得分:0)

我刚刚运行了您的代码示例,它在WorkingDirectory位置为我正确打开了。在运行命令之前,请确保目录存在。我在C和辅助驱动器上都对驱动器进行了测试,并且都可以正常工作。

答案 4 :(得分:0)

当将 Start-Process-Verb RunAs 一起使用时,-WorkingDirectory 参数如果目标可执行文件是 em>.NET 可执行;示例:

  • pwsh.exePowerShell (Core) CLI)确实尊重它。
  • cmd.exe 和奇怪的是 powershell.exeWindows PowerShell CLI),并且总是使用 C:\Windows\System32

除非您知道您正在调用一个 .NET 可执行文件,否则需要一种解决方法,在新进程中更改所需的工作文件夹;为 ふゆな's helpful answer 提供更强大的替代方案:

$dir = $PWD.ProviderPath # use the current dir.

Start-Process -Verb RunAs powershell.exe @"
-noexit -c Set-Location -LiteralPath "$dir"
"@
  • "..." 周围嵌入的 $dir 引号确保带空格的路径也得到正确处理。 (要使用没有中间变量的当前目录,请将 "dir" 替换为 "$($PWD.ProviderPath)"

    • 使用 here-string (@"<newline>...<newline>"@) 不是绝对必要的,但可以简化嵌入的引用;使用常规 expandable string ("..."),嵌入的 " 必须转义为 `"(或 "")。
  • 使用 $PWD.ProviderPath 属性可确保使用文件系统-本机路径(基于 {{1} },例如),假设调用会话的当前位置可能基于提升进程可能未定义的仅限 PowerShell 的驱动器(请参阅 New-PSDrive)(完全或不基于相同的根位置) .

    • 警告:如果本机路径在映射的网络驱动器上,这将不起作用,因为提升的进程看不到相同的驱动器映射;在这种情况下,传递基础 UNC 路径。

启动从给定工作目录提升的 GUI 应用程序的解决方法

由于必须在新的提升进程中更改工作目录,因此需要一个 helper shell 进程来执行此操作,最好通过 cmd.exe 完成(为了获得更好的性能) ):

cmd.exe