자체 PowerShell CmdLets를 사용하여 C# Windows 서비스에 관리 명령 보내기

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

  •  04-07-2019
  •  | 
  •  

문제

서비스를 실행하는 C# Windows 응용 프로그램이 있습니다.실행 중인 서비스를 관리하기 위한 명령줄 관리 인터페이스를 제공하기 위해 PowerShell을 활용하고 싶습니다.

내 관점에서는 Exchange 2007과 동일한 관리 인터페이스를 제공하려고 합니다.

실행 중인 서비스에 "연결"하여 관리 명령을 쿼리하거나 보내기 위해 관리 cmdlet을 시작/설계하는 방법에 대한 제안이나 샘플 코드가 있습니까?

powershell 명령줄에서 서비스의 내부 런타임 상태에 어떻게 액세스할 수 있나요?예를 들어 Get-ConnectionsInfo라는 cmdlet을 구현하여 cmdlet이 실행될 때 Windows 서비스에서 사용하는 아웃바운드 연결 수를 확인하고 싶습니다.

실제 예제나 예제에 대한 웹 링크는 환영받을 것입니다.

고마워요, 로버트

도움이 되었습니까?

해결책

여기서 핵심은 .Net에서 액세스할 수 있는 API를 작성하여 시작한 다음 이 API에 대한 호출을 PowerShell cmdlet인 클래스를 노출하는 DLL로 쉽게 래핑할 수 있다는 것입니다.누군가가 귀하의 서비스를 원격으로 관리할 수 있기를 원한다면 아마도 가장 좋은 방법은 이 작업을 수행하는 웹 서비스 또는 WCF 서비스를 만든 다음 이를 PowerShell에서 래핑할 수 있는 것이라고 생각합니다.codeplex를 살펴보면 시작하는 데 도움이 되는 몇 가지 샘플 코드를 제공하는 GoGrid 및 SQL 데이터 서비스와 같은 원격 웹 기반 서비스 관리에 대한 몇 가지 예를 찾을 수 있습니다.

다른 팁

Windows 서비스가 WCF를 통해 관리 인터페이스를 노출시키는 솔루션입니다. PowerShell 명령은이 WCF 서비스를 사용하여 정보를 철수하고 Windows 서비스가 작업을 수행하도록합니다.

Windows 서비스의 내부 상태를 노출시키는 또 다른 방법이 떠 올랐습니다. PowerShell 또는 PowerShell 명령에서 소비 할 수있는 WMI를 통해 정보를 노출시킬 수 있습니다.

WMI를 통해 행동을 수행하도록 서비스를 알릴 수 있는지 확실하지 않지만 적어도 상태를 꺼낼 수있을 것입니다.

세 번째 대안은 Windows 서비스를 PowerShell 컨텐츠 제공 업체. 그러나 나는 직접 만들지 않았으므로 서비스가 항상 실행되지 않을 수 있으므로 Windows 서비스에서 호스팅하기에 적합한 지 확실하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top