在Powershell Cmdlet调用之间保持状态的最佳实践是什么?

我是Powershell开发的完全新手,我正在尝试用C#编写一个Powershell Cmdlet,它将用作REST API的接口。

我想有一些设置Cmdlet,用户将被提示输入REST API的Uri,用户名和密码,然后调用Cmldlets,如Get-Item,而不必输入这些参数。 非常类似于Powershell的Azure提供程序,您可以通过调用Select-AzureSubscription设置当前订阅,然后再调用Save-AzureVhd而无需再输入订阅名称。

在不同Cmdlet的调用之间保持状态的最佳实践是什么?

编辑:我不确定这是解决它的最佳方法,但我所做的是我添加了一个持有状态的单例类。 我有一个Cmdlet,Select-Project -Name MyProject,它在我的单例类中设置一个公共属性,然后我的其他Cmdlet可以访问该属性。

如果它们运行V3或更高版本,您可以让设置在$ PSDefaultParameterValues中设置这些值。

看到:

get-help about_parameters_default_values 

有关设置值的详细信息。

也许像PowerShell的CimSession支持? 您使用new-cimsession创建会话(包含状态),然后将cimsession对象传递给其他各种cmdlet。 这不适用于OP中提到的get-item。

然而,OP中的EDIT描述了一个不太可能与get-item一起使用的实现(如果我理解正确的话)。

如果get-item的支持确实是一个要求,那么我相信PS提供商(如在get-PSProvider中)将是可行的方式。 PS提供商将使用像get-item这样的cmdlet,并且可以通过PSDrives保存状态(如在get-PSDrive中)。