2013-12-11 72 views
7

我是Powershell開發的完全新手,我正在嘗試在C#中編寫一個Powershell Cmdlet,它將用作REST API的接口。在調用Powershell Cmdlet之間保持狀態的最佳做法是什麼?

我想要一些設置Cmdlet,其中用戶將被提示輸入Uri,用戶名和密碼到REST API,然後調用Cmdlet像Get-Item,而不必輸入這些參數。非常像Powershell的Azure提供程序,您可以通過調用Select-AzureSubscription來設置當前訂閱,然後調用Save-AzureVhd,而無需再次輸入訂閱名稱。

在不同的Cmdlet調用之間保持狀態的最佳實踐是什麼?

編輯: 我不確定這是解決它的最好方法,但我所做的是我添加了一個包含狀態的單例類。 我有一個Cmdlet,Select-Project - 名稱MyProject,它在我的單例類中設置公共屬性,然後我的其他Cmdlet可以訪問該屬性。

回答

1

如果它們運行的​​是V3或更高版本,則可以在$ PSDefaultParameterValues中設置這些值。

請參見:

get-help about_parameters_default_values 

關於設置值的詳細信息。

+0

也許這是一個解決方案,但是當您需要從C#代碼更新它時,它似乎相當複雜。 – RobinHu

0

也許像powershell的CimSession支持?您使用new-cimsession創建會話(其中包含狀態),然後將cimsession對象傳遞給各種其他cmdlet。這在OP中提到的get-item不起作用。

然而,OP中的編輯描述了一個不太可能與get-item一起工作的實現(如果我理解正確的話)。

如果獲得物品的支持確實是一個需求,那麼我相信一個PS提供者(就像在get-PSProvider中)將是一條路。 PS提供者將使用像get-item這樣的cmdlet,並且可以通過PSDrives保持狀態(如get-PSDrive)。

相關問題