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

时间:2014-07-30 15:59:51

标签: powershell command-line

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

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

最初的问题是,当用户右键单击update-PrinterDNS.ps1并且"使用PowerShell"运行时,脚本刚刚执行并关闭。在脚本末尾添加暂停语句允许用户查看输出。但是,当调用脚本并传递参数时,这会将扳手引入自动化端。

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

问题:) 我想知道是否可以在脚本中确定是否可以通过Windows PowerShell'运行来启动它。为了有条不紊地停顿在最后。

3 个答案:

答案 0 :(得分:4)

使用PowerShell运行具有以下命令行(默认情况下,将来可能会更改等):

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

您可以在$MyInvocation变量中看到您的调用方式。

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

(Get-ExecutionPolicy -Scope Process) -eq 'Bypass'

就熟练的变通方法而言,我说这个应该工作一段时间。但不保证。

答案 1 :(得分:1)

使用用于启动脚本的命令填充调用行。我希望它在从PowerShell提示符调用时始终具有值,但在使用PowerShell执行时它是空的。

echo "hello world" if ($MyInvocation.Line -eq "") { pause }

答案 2 :(得分:0)

在脚本的主体中使用$ MyInvocation应该没问题。 但是,当用于从函数进行测试时,它将无法工作。

示例:

function ConditionalPause()
{
    if ($MyInvocation.Line -ne "")
    {
        pause  #will ALWAYS pause
    }

    # $MyInvocation.Line will be always the name of the function, i.e.: "ConditionalPause"
    # $MyInvocation.Line -ne "" will always return true
}