2014-05-19 11 views
6

Sto tentando di accedere ai dettagli manifest per un modulo PowerShell personalizzato che contiene il file manifest memorizzato insieme al file modulo (psm1) nella struttura della directory.Come leggere il file manifest di PowerShell (.psd1) utilizzando C#

Qual è il modo migliore per accedere ai dettagli manifest come Descrizione, GUID ecc.?

+0

La maggior parte delle linee sono in forma di chiave = valore, quindi basta leggere il file e filtrare tutto tranne le righe che sembrano così, magari con espressioni regolari e quindi caricare i valori che ti servono. Questo dovrebbe essere. Hai qualche problema specifico nel realizzare ciò che vuoi? –

risposta

6

Un file psd1 è uno script PowerShell valido, quindi è meglio consentire a PowerShell di analizzare il file.

Il modo più semplice è utilizzare il cmdlet Test-ModuleManifest. Da C#, che sarebbe un aspetto simile:

using (var ps = PowerShell.Create()) 
{ 
    ps.AddCommand("Test-ModuleManifest").AddParameter("Path", manifestPath); 
    var result = ps.Invoke(); 
    PSModuleInfo moduleInfo = result[0].BaseObject as PSModuleInfo; 

    // now you can look at the properties like Guid or Description 
} 

Altri approcci non in grado di gestire la complessità di analisi PowerShell, ad esempio, sarebbe facile gestire in modo errato i commenti o le stringhe qui presenti quando si tenta di utilizzare un'espressione regolare.

0

Aggiungere un riferimento a System.Management.Automation. Quindi, utilizzare il seguente codice per ottenere un Hashtable dal file .psd1.

static void Main(string[] args) 
{ 
    PowerShell ps = PowerShell.Create(); 
    string psd = "C:\\Users\\Trevor\\Documents\\WindowsPowerShell\\Modules\\ISESteroids\\ISESteroids.psd1"; 
    ps.AddScript(String.Format("Invoke-Expression -Command (Get-Content -Path \"{0}\" -Raw)", psd)); 
    var result = ps.Invoke(); 
    Debug.WriteLine(((Hashtable)result[0].ImmediateBaseObject)["Description"]); 
} 
+3

Si noti che questo metodo è pericoloso se non ci si fida dell'input: Invoke-Expression eseguirà volentieri qualsiasi cosa si abbia nel file psd1, ad es. potrebbe non essere una tabella hash (PowerShell non caricherà il modulo, ma questo esempio lo ignora). –

Problemi correlati