Powershell - 可以通过右键单击“使用powershell运行”来确定脚本是否运行吗?

Fro*_*oul 3 powershell command-line

背景:我为我们的一级技术支持编写了一个小脚本,它执行一些验证(命名约定/IP 地址范围)并更新打印机范围的 DNS 记录。

它从命令行或文件获取输入,如果命令行上没有给出输入,它会从脚本内提示。

最初的问题是,当用户右键单击 update-PrinterDNS.ps1 并“使用 PowerShell 运行”时,脚本刚刚执行并关闭。在脚本末尾添加暂停语句允许用户查看输出。然而,当调用脚本并传递参数时,这会给自动化方面带来麻烦。

我考虑过在命令行中添加 -noPause 开关,或者推出使用 -noExit 调用 PowerShell 的快捷方式,但这些看起来更像是解决方法而不是解决方案。

问题:) 我想知道是否可以在脚本中确定它是否是由“使用 Windows PowerShell 运行”启动的,以便在最后有条件地暂停。

Joe*_*oey 5

Run with PowerShell 有以下命令行(默认情况下,未来版本中可能会有更改等):

powershell.exe "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
Run Code Online (Sandbox Code Playgroud)

您可以在变量中看到您是如何被调用的$MyInvocation

另一种方法是检查执行策略,这里明确设置了执行策略。除非您使用以下命令启动 PowerShell,否则-ExecutionPolicy Bypass仅适用于通过上下文菜单运行脚本的情况:

(Get-ExecutionPolicy -Scope Process) -eq 'Bypass'
Run Code Online (Sandbox Code Playgroud)

就黑客的解决方法而言,我想说这应该可以工作一段时间。但没有任何保证。