ServerManager站点和ApplicationPool中的计算机名称

时间:2016-09-12 03:35:32

标签: c# powershell

我正在用C#编写一些PowerShell cmdlet来访问我们的生产服务器并报告IIS /服务状态。

ServiceController类具有MachineName属性,但SiteApplicationPool类都没有。

如何将计算机名称与这些对象一起返回(即Get-Service | select MachineName,Status,DisplayName)?我考虑过延长课程,但是他们是密封的,我不希望花时间实施this solution

有没有更多写cmdlet技能的人知道我如何轻松完成这项工作?

2 个答案:

答案 0 :(得分:1)

您可以将自定义表达式与Select cmdlet一起使用,以将自定义属性添加到其返回的对象中。

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

有关自定义表达式的详细信息,请参阅此link

答案 1 :(得分: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; }
}