2013-12-11 21 views
7

Sono un novizio completo dello sviluppo di Powershell e sto provando a scrivere un Cmdlet Powershell in C# che verrà utilizzato come interfaccia per un'API REST.Qual è la migliore pratica per mantenere lo stato tra le chiamate ai cmdlet di PowerShell?

Vorrei disporre di un tipo di installazione Cmdlet in cui all'utente verrà richiesto un Uri, nome utente e password per l'API REST e quindi chiamare Cmldlet come Get-Item senza dover immettere tali parametri. Praticamente come il provider di Azure per PowerShell, in cui è possibile impostare l'abbonamento corrente chiamando Select-AzureSubscription e quindi chiamare Save-AzureVhd senza dover inserire nuovamente il nome dell'abbonamento.

Quali sono le migliori pratiche per mantenere lo stato tra chiamate a diversi cmdlet?

EDIT: Non sono sicuro che questo sia il modo migliore per risolverlo ma quello che ho fatto è che ho aggiunto una classe singleton che contiene lo stato. Ho un Cmdlet, Select-Project -Name MyProject che imposta una proprietà pubblica nella mia classe singleton e quindi gli altri Cmdlet possono accedere a tale proprietà.

risposta

1

Se sono in esecuzione V3 o superiore, è possibile impostare i valori in $ PSDefaultParameterValues.

Vedi:

get-help about_parameters_default_values 

per i dettagli su come impostare i valori.

+0

Forse questa è una soluzione ma sembra abbastanza complessa quando è necessario aggiornarla dal codice C#. – RobinHu

0

Forse qualcosa come il supporto di CimSession di powershell? Si utilizza new-cimsession per creare una sessione (che contiene lo stato) e quindi passare l'oggetto cimsession a vari altri cmdlet. Questo però non funzionerebbe con get-item come già detto nell'OP.

Tuttavia l'EDIT nell'OP descrive un'implementazione che sarebbe improbabile che funzioni con get-item (se ho capito bene).

Se il supporto di get-item era davvero un requisito, credo che un fornitore di PS (come in get-PSProvider) sarebbe la strada da percorrere. I provider PS lavoreranno con i cmdlet come get-item e possono mantenere lo stato tramite PSDrives (come in get-PSDrive).

Problemi correlati