2009-05-20 13 views
6

Stavo ascoltando il podcast su PowerShell 2.0 that Scott Hanselman did. In quell'episodio, hanno parlato delle possibilità di estendere l'applicazione per esporre le funzionalità di PowerShell.Come esporre funzionalità a PowerShell dall'interno dell'applicazione

Ora sembra interessante. Qualcuno di voi ha fatto tali estensioni che espongono funzionalità nella vostra applicazione? In tal caso, che tipo di funzionalità?

MODIFICA: Per essere più precisi: non sono interessato ad ospitare PowerShell nella mia applicazione. Sono più interessato ad aprire la mia applicazione con un'interfaccia tipo API. Quindi un fornitore di PowerShell sembra essere la tecnologia che sto cercando per approfondire.

risposta

4

Esistono diversi modi per sfruttare PowerShell in un'applicazione personalizzata. La bellezza del motore di automazione di PowerShell è che non devi occuparti dei parametri di gestione, dell'output di formattazione e di molte altre cose PITA che dovresti gestire da solo. Per lanciare un oggetto lungo la pipeline in PowerShell, è l'override del metodo ProcessRecord e chiamare WriteObject

protected override void ProcessRecord() 
{ 
    // Get the current processes 
    Process[] processes = Process.GetProcesses(); 

    // Write the processes to the pipeline making them available 
    // to the next cmdlet. The second parameter of this call tells 
    // PowerShell to enumerate the array, and send one process at a 
    // time to the pipeline. 
    WriteObject(processes, true); 
} 

È possibile scrivere cmdlet che consentono un amministratore per automatizzare il lato server di un'applicazione. I cmdlet sono sempre unità di funzionalità basate su attività con convenzione di denominazione verbale. Ad esempio, Get-Process o Restart-Service. I Cmdlet fanno una cosa e lo fanno molto bene. C'è un incredibile potere che viene fornito combinando insieme i cmdlet.

Inoltre, se la tua app ha una sorta di archivio dati, è anche possibile scrivere un provider che consentirebbe a qualcuno di navigare e/o gestire l'archivio dati usando cmds come cd (set-location) e md (new- articolo). Un provider è ciò che il team di PS ha scritto in modo da poter effettuare il cd nel registro con cd hklm: o l'archivio certificati con cd cert:

È anche possibile ospitare PowerShell stesso nell'applicazione.

Ci sono alcune buone informazioni su tutti e tre di queste opzioni su MSDN here

Considerando l'interesse per i fornitori, ecco alcuni esempi su how to create a PowerShell Provider.

Ci sono state alcune discussioni in merito alla progettazione e l'utilizzo di un set di cmdlet o per esporre qualcosa con un Provider. Quando si implementa un provider, si ottengono anche alcuni cmdlet, come Get-item, New-item, Get-Location, Set-Location. Tuttavia, ho trovato che avere alcuni cmdlet per attività specifiche in aggiunta a un provider può essere molto utile.

2

Ecco un buon libro su questo lato di PowerShell (che non ottiene molta copertura nella maggior parte dei libri).

Professional Poweshell Programming

Usando questo libro (e alcuni viaggi a MSDN), sono stato in grado di avere un costume PowerShell ospitare e runnning in un giorno. Alcuni giorni dopo, ho creato cmdlet personalizzati che interagiscono con il gui (per creare viste, griglie, diagrammi, menu, ecc.)

2

Ci sono un paio di livelli di supporto di PowerShell e non molte persone lo spiegano bene.

  1. . Classi .NET. Sì, PowerShell può accedere a qualsiasi cosa con un'API .NET senza fare nulla in più! Ma non ottieni abbastanza tutte le funzionalità extra di PowerShell. La minima quantità di lavoro.
  2. Un modulo PowerShell con cmdlet, script e/o funzioni. Ciò richiederà la scrittura di un codice specifico di PowerShell per avvolgere l'API esistente. Se segui questa strada, dovresti sederti e imparare le migliori pratiche per la progettazione di PowerShell e pensare al tuo supporto PowerShell. Questo è più lavoro richiesto per farlo bene.
  3. Provider di PowerShell. I fornitori sono un caso speciale, non tutto dovrebbe avere un fornitore. Devi davvero considerare se le tue informazioni hanno davvero senso in una vista del file system.

Questo non si applica alla tua domanda, ma la aggiungerò per completezza.

  1. PowerShell ospitato. Puoi ospitare il codice PowerShell nella tua app o accedere alle funzionalità di PowerShell dalla tua app. Questo ha senso in alcune situazioni, ma è anche un caso specializzato di supporto PowerShell.