Che cosa è il modo migliore per avvolgere una classe C # per l'utilizzo da parte di script PowerShell

StackOverflow https://stackoverflow.com/questions/1185868

  •  19-09-2019
  •  | 
  •  

Domanda

Ho un motore che esegue gli script PowerShell, e quando si eseguono, necessità per alimentare di nuovo in formato XML al chiamante. Il motore richiede solo I / O come un messaggio XML IDMEF. Quindi lo script deve restituire un messaggio XML in modo simile formattato. Ho una classe che fa la mia formattazione per me e vorrei le sceneggiatori di usarlo.

Quindi domanda è che voglio avvolgere una classe C # per consentirgli di essere utilizzato da PowerShell.

Ho visto qualcosa di un po 'dove si può fare riferimento alla classe C # utilizzando la folla parentesi quadra, ad es.

Come si effettua il c # disponibile per essere utilizzato in questo modo. Mi sa che ha bisogno di essere fatto in classe e in qualche modo lib caricato nella fase di esecuzione di PowerShell, ma come. Inoltre, come sto correndo il PowerShell da C #, come posso aggiungo nell'ambiente in quel punto.

Qualsiasi aiuto sarebbe apprezzato. Bob.

È stato utile?

Soluzione

Se abbia un assieme (exe o dll) con la classe in esso, PowerShell può caricarla tramite [System.Reflection.Assembly]::LoadFile("PathToYourAssembly") o V2

Add-Type -Path "PathToYourAsembly"

Se si sta creando uno spazio di esecuzione nella propria applicazione e volete fare un assembly disponibile, è possibile farlo con un RunspaceConfiguration .

RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
AssemblyConfigurationEntry myAssembly = new AssemblyConfigurationEntry("strong name for my assembly", "optional path to my assembly");
rsConfig.Assemblies.Append(myAssembly);
Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
myRunSpace.Open();

Altri suggerimenti

Non credo che qualsiasi cosa è necessario. È possibile accedere a praticamente tutto il .NET Framework da PowerShell. Sono sicuro che non hanno creato alcun wrapper per farlo.

Si occupano di interfacce in PowerShell è molto difficile, se non impossibile, almeno nel V1, in modo da evitare questi nella tua classe. In PowerShell una semplice [reflection.assembly] :: Load o LoadFile è tutto quello che serve.

Vorrei scrivere un cmdlet in C # che prende un sacco di parametri e sputa fuori l'XML che si desidera. Quindi è possibile utilizzare che Cmdlet da PowerShell reindirizzando le cose in esso. Spero che questo aiuta!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top