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

从模块内部访问PowerShell脚本参数,powershell,powershell-module,Powershell,Powershell Module,我有一个PowerShell模块,其中包含许多常见的管理和部署功能。这安装在我们所有的客户端工作站上。通过登录时、通过计划任务或部署期间执行的大量脚本调用此模块 在模块内,可以获取调用脚本的名称: function Get-CallingScript { return ($script:MyInvocation.ScriptName) } 但是,在模块中,我没有找到任何方法来访问最初传递给调用脚本的参数。出于我的目的,我更喜欢以dictionary对象的形式访问它们,但即使是原始命令行

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

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

function Get-CallingScript {
    return ($script:MyInvocation.ScriptName)
}
但是,在模块中,我没有找到任何方法来访问最初传递给调用脚本的参数。出于我的目的,我更喜欢以dictionary对象的形式访问它们,但即使是原始命令行也可以。不幸的是,在我的用例中,从脚本中访问参数并将其传递给模块不是一个选项


有什么想法吗?谢谢。

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

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

来自:

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

也就是说,这在一个模块中对我有效:

$Global:MyInvocation.UnboundArguments
请注意,当脚本没有参数定义时,我使用未命名的参数调用脚本,因此
UnboundArguments
是有意义的。如果已定义参数,则可能需要此选项:

$Global:MyInvocation.BoundParameters

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