1

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

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

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

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

有任何想法吗?谢谢你。

4

2 回答 2

2

about_Scopes

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

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

$Global:MyInvocation.UnboundArguments

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

$Global:MyInvocation.BoundParameters
于 2015-09-14T03:31:44.777 回答
1

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

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

于 2015-09-14T02:57:55.067 回答