2016-09-12 1 views
1

C#에서 프로덕션 서버에 액세스하고 IIS/서비스 상태를보고하는 PowerShell cmdlet을 작성하고 있습니다.ServerManager의 컴퓨터 이름 사이트 및 ApplicationPool

ServiceController 클래스는 MachineName 속성을 갖지만, Site이나 ApplicationPool 클래스도이 속성을 갖지 않습니다.

컴퓨터 이름을 이러한 개체 (예 : Get-Service | select MachineName,Status,DisplayName)와 함께 반환하려면 어떻게해야합니까? 나는 수업을 연장하는 것을 고려했다. 그러나 그들은 봉인되었고 나는 this solution을 구현하는 데 시간을 보내고 싶지 않다.

작성 cmdlet을 숙련 된 사람이라면 누구나 쉽게이 작업을 수행 할 수있는 아이디어가 있습니까?

답변

0

나는 내가 원하는 클래스를위한 간단한 래퍼를 작성했다. 완벽하지는 않지만 시간을 보내는 것 또한 중요하지 않습니다.

public class MyApplicationPool 
{ 
    public MyApplicationPool(ApplicationPool appPool, string machineName) 
    { 
     Name = appPool.Name; 
     MachineName = machineName; 
     State = appPool.State; 
     Cpu = appPool.Cpu; 
     QueueLength = appPool.QueueLength; 

     ApplicationPool = appPool; 
    } 

    public string MachineName { get; } 
    public string Name { get; } 
    public ObjectState State { get; } 
    public long QueueLength { get; } 
    public ApplicationPoolCpu Cpu { get; } 

    public ObjectState Start() 
    { 
     return ApplicationPool.Start(); 
    } 

    public ObjectState Stop() 
    { 
     return ApplicationPool.Stop(); 
    } 

    public ObjectState Recycle() 
    { 
     return ApplicationPool.Recycle(); 
    } 

    private ApplicationPool ApplicationPool { get; } 
} 
1

Select cmdlet과 함께 사용자 지정 식을 사용하여 사용자 지정 속성을 반환 할 개체에 추가 할 수 있습니다.

$mn = $env:COMPUTERNAME 
Get-Service | Select @{Expression={$mn};Label="MachineName"},Status,DisplayName 

맞춤식에 대한 자세한 내용은 link을 참조하십시오.

+0

감사합니다. 이것은 PowerShell의 유용한 팁입니다. 어떤 아이디어를 C에서 그것을 달성하는 방법 #? 동적 객체를 사용하려고 할 수 있습니다. – hsimah