如何在模块中的 cmdlet 之间共享数据?



我目前正在PowerShell中开发一个模块,该模块在后台使用标准的REST API。为此,我编写了一个Connect-Servercmdlet,用于检索身份验证密钥以供以后调用。 我的问题是:是否有关于与其他 cmdlet 共享数据的最佳做法?我知道我可以轻松地从Connect函数返回它并将其传递给以下 cmdlet,但这不是我要找的。

到目前为止,我一直在使用全局变量进行数据交换。但正如我在一些最佳实践指南中读到的那样,你应该尽量不要污染全球范围。 我见过的其他解决方案使用GetSetcmdlet,但我认为这不是最好的 PowerShell 方法。

那么还有其他方法可以解决这个问题吗?

正常方法是从一个 cmdlet 返回数据,并将其存储在变量中或转发到管道。共享数据的另一种方式可能是将其序列化(ConverTo-JsonConvertTo-Csv、...(到文件(例如$env:TEMP或通过New-Temporaryfile创建(,并在另一个 cmdlet 中再次反序列化它(以磁盘 I/O 为代价(。就个人而言,我总是产生一个用于泡沫使用的变量,并将其注入到下一个 cmdlet(或使用管道(中。

使用全局变量不是最佳主意,因为您不知道 cmdlet/函数依赖于哪些参数。

因此,正如PoshCode的人所说,执行此操作的最佳方法是在脚本范围内使用变量,因为它可用于模块中的所有cmdlet,但对用户不可见。

最新更新