从模块内部访问 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
我有一个包含许多常用管理和部署功能的 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