2016-09-12 5 views
1

プロダクションサーバーにアクセスし、IIS/Serviceの状態をレポートするために、C#でPowerShellコマンドレットを作成しています。ServerManagerのコンピュータ名サイトとApplicationPool

クラスはMachineNameですが、SiteApplicationPoolもありません。

これらのオブジェクトの横にコンピュータ名を返すとどうすればよいですか(つまり、Get-Service | select MachineName,Status,DisplayName)?私はクラスを拡張することを検討しましたが、彼らは封印されており、this solutionを実装するのに時間を費やしたくありません。

書込みコマンドレットのスキルが豊富な方は、どのように簡単にこれを達成できるのか考えていますか?

答えて

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コマンドレットでカスタム式を使用して、カスタムプロパティを返すオブジェクトにカスタムプロパティを追加できます。

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

カスタム式の詳細については、linkを参照してください。

+0

これはPowerShellの便利なヒントです。どのようにC#でそれを達成するための任意のアイデア?私は動的オブジェクトを使用しようとするかもしれません。 – hsimah