从模块内部访问PowerShell脚本参数

时间:2015-09-14 02:14:33

标签: powershell powershell-module

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

在模块中,可以获取调用脚本的名称:

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

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

有什么想法吗?谢谢。

2 个答案:

答案 0 :(得分:2)

来自about_Scopes

  

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

话虽这么说,这对我来说是一个模块:

$Global:MyInvocation.UnboundArguments

请注意,在没有参数的情况下定义脚本时,我使用未命名参数调用脚本,因此UnboundArguments有意义。如果您已定义参数,则可能需要此选项:

$Global:MyInvocation.BoundParameters

答案 1 :(得分:1)

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

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