【问题标题】:Access PowerShell script parameters from inside module从模块内部访问 PowerShell 脚本参数
【发布时间】:2015-09-14 02:14:32
【问题描述】:

我有一个 PowerShell 模块,其中包含许多常见的管理和部署功能。这安装在我们所有的客户端工作站上。该模块从登录时、通过计划任务或部署期间执行的大量脚本中调用。

从模块内部,可以获得调用脚本的名称:

function Get-CallingScript {
    return ($script:MyInvocation.ScriptName)
}

但是,在模块内,我没有找到任何方法可以访问最初传递给调用脚本的参数。出于我的目的,我更喜欢以字典对象的形式访问它们,但即使是原始命令行也可以。不幸的是,鉴于我的用例,从脚本中访问参数并将它们传递给模块不是一种选择。

有什么想法吗?谢谢。

【问题讨论】:

    标签: powershell powershell-module


    【解决方案1】:

    来自about_Scopes

    会话、模块和嵌套提示是自包含的环境, 但它们不是会话中全局范围的子范围。

    话虽如此,这在一个模块中对我有用:

    $Global:MyInvocation.UnboundArguments
    

    请注意,当脚本定义为不带参数时,我使用未命名参数调用脚本,因此UnboundArguments 有意义。如果你已经定义了参数,你可能需要这个:

    $Global:MyInvocation.BoundParameters
    

    【讨论】:

    • 谢谢 - 使用全局 MyInvocation 变量的技巧为我解决了这个问题,但并不完全按照您建议的方式。在我的测试中,UnboundArguments 和 BoundParameters 始终为空。但是,$global:MyInvocation.MyCommand 值确实填充了完整的命令行,并且可以从那里提取参数。
    【解决方案2】:

    我可以看到这通常是一个安全问题。例如,如果有一个凭据从您传递到堆栈上的函数,您将能够访问该凭据。

    可以通过$PSBoundParameters 访问传递给当前函数的参数,但没有一种机制可以查看调用堆栈函数的参数。

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 2011-08-27
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多