当我输入命令
时Start-Process powershell -WorkingDirectory "D:\folder"
它会打开新的PowerShell窗口并设置D:\folder
位置。
但是当我输入命令时
Start-Process powershell -WorkingDirectory "D:\folder" -Verb RunAs
它会打开新的PowerShell窗口,其管理员权限但并设置了C:\Windows\system32
位置。
如何打开具有管理员权限的新PowerShell窗口并确定我自己的位置?
答案 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.exe
(PowerShell (Core) CLI)确实尊重它。cmd.exe
和奇怪的是 powershell.exe
(Windows PowerShell CLI)不,并且总是使用 C:\Windows\System32
。
System.Diagnostics.ProcessStartInfo
)。除非您知道您正在调用一个 .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)"
。
@"<newline>...<newline>"@
) 不是绝对必要的,但可以简化嵌入的引用;使用常规 expandable string ("..."
),嵌入的 "
必须转义为 `"
(或 ""
)。使用 $PWD
的 .ProviderPath
属性可确保使用文件系统-本机路径(基于 {{1} },例如),假设调用会话的当前位置可能基于提升进程可能未定义的仅限 PowerShell 的驱动器(请参阅 New-PSDrive
)(完全或不基于相同的根位置) .
启动从给定工作目录提升的 GUI 应用程序的解决方法:
由于必须在新的提升进程中更改工作目录,因此需要一个 helper shell 进程来执行此操作,最好通过 cmd.exe
完成(为了获得更好的性能) ):
cmd.exe