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

Access PowerShell script parameters from inside module

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

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

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

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

有什么想法吗?谢谢。

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

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

来自about_Scopes

Sessions, modules, and nested prompts are self-contained environments, but they are not child scopes of the global scope in the session.

话虽这么说,这在模块内对我有用:

$Global:MyInvocation.UnboundArguments

请注意,当脚本是在没有参数的情况下定义时,我使用未命名的参数调用我的脚本,因此 UnboundArguments 是有道理的。如果您定义了参数,您可能需要这个:

$Global:MyInvocation.BoundParameters