我对这个非常接近了。基本上,我想为 .ps1 文件创建一个上下文菜单项,以管理员身份运行脚本,而无需在运行后退出控制台窗口。所以我可以创建密钥:
Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit
其值为:
一切都很好创造进入。然而,为了真正做到这一点做我需要添加另一个键,即命令键:
Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit\command
在这个关键中,我有一些东西几乎可以,但不太好。因此,上述命令键的默认值为:
Powershell.exe -WindowStyle Hidden -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-NoLogo -NoExit -File """%1"""'}"
但有一个大问题使用此方法;当脚本完成时,它会将我返回到“C:\Windows\system32”目录,而不是脚本本身的目录。请参阅下面的图片以了解详情:
此外,当我使用我创建的上下文菜单项来运行包含如下行的脚本时:
$settingsfiles = Get-ChildItem -Recurse $scanPath
它没有递归遍历我刚刚运行的脚本的所有本地文件夹,而是尝试递归遍历“C:\Windows\system32!”下的所有文件夹。显然这是不受欢迎的。所以我的问题是:
为了让 PowerShell 脚本表现得好像它是从与脚本相同的目录运行的,我需要在命令键的默认值中进行哪些更改?
答案1
尝试利用... Set-Location 或 Push-Location cmdlet,或者 scritpblock ...
分割路径 $script:MyInvocation.MyCommand.Path
... 在你的最终命令中。
或者只需创建一个新的快捷方式,按照您希望的方式进行配置,然后使用右键单击发送到菜单,无需进行任何注册黑客攻击。
请参阅此线程,其中展示了 PowerShell 的 SendTo 方法。