Invia comandi amministrativi al mio servizio Windows C # usando i propri CmdLets di PowerShell

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

  •  04-07-2019
  •  | 
  •  

Domanda

Ho un'applicazione Windows C # che esegue un servizio. Vorrei sfruttare PowerShell per offrire un'interfaccia di gestione della riga di comando per l'amministrazione del mio servizio in esecuzione.

Dal mio punto di vista, sto cercando di offrire la stessa interfaccia amministrativa alla Exchange 2007.

Hai qualche suggerimento o codice di esempio su come avviare / progettare i cmdlet di gestione nell'ordine " connect " al servizio in esecuzione per interrogare o inviare comandi amministrativi?

Come posso accedere allo stato di runtime interno del servizio dalla riga di comando di PowerShell? Ad esempio, vorrei implementare un cmdlet chiamato Get-ConnectionsInfo per scoprire quante connessioni in uscita utilizza il mio servizio Windows quando viene eseguito il cmdlet.

Un esempio pratico o un collegamento Web a un esempio sarebbe più che ben accetto.

Grazie, Robert

È stato utile?

Soluzione

La chiave qui è iniziare scrivendo un'API a cui puoi accedere da .Net, quindi puoi avvolgere facilmente le chiamate a questa API in una DLL che espone le classi che sono cmdlet di PowerShell. Se vuoi che qualcuno sia in grado di amministrare il tuo servizio in remoto, penso che probabilmente la cosa migliore sia creare un servizio Web o un servizio WCF che lo faccia e quindi puoi racchiuderlo in PowerShell. Se dai un'occhiata a codeplex troverai alcuni esempi di servizi remoti basati su web come GoGrid e SQL Data Services che ti daranno un codice di esempio per iniziare.

Altri suggerimenti

Una soluzione sarebbe che il tuo servizio Windows esponesse un'interfaccia amministrativa tramite WCF. I comandi di PowerShell utilizzerebbero questo servizio WCF per estrarre informazioni e fare eseguire le azioni al servizio Windows.

Mi è venuto in mente un altro modo di esporre lo stato interno del servizio Windows. È possibile esporre informazioni tramite WMI che possono essere consumate da PowerShell o dai comandi di PowerShell.

Non sono sicuro che tu sia in grado di dire al tuo servizio di eseguire azioni tramite WMI ma almeno saresti in grado di estrarre lo stato.

Una terza alternativa potrebbe essere quella di rendere il servizio Windows un Provider di contenuti PowerShell . Tuttavia, non ne ho mai creato uno da solo, quindi non sono sicuro che siano adatti per l'hosting in un servizio Windows, poiché il servizio potrebbe non essere sempre in esecuzione.

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