PowerShell 脚本上下文菜单条目以管理员身份运行脚本而无需退出

PowerShell 脚本上下文菜单条目以管理员身份运行脚本而无需退出

我对这个非常接近了。基本上,我想为 .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 方法。

PowerShell 限制暂停脚本接受的键

相关内容