C# ServerManager站点和应用程序池中的计算机名

C# ServerManager站点和应用程序池中的计算机名,c#,powershell,C#,Powershell,我正在用C#编写一些PowerShell cmdlet来访问我们的生产服务器并报告IIS/服务状态 ServiceController类有一个MachineName属性,但是Site和ApplicationPool类都没有这个属性 如何返回这些对象旁边的计算机名(即获取服务|选择MachineName、Status、DisplayName)?我考虑过扩展这些类,但它们是密封的,我不想花时间实现它们 编写cmdlet更熟练的人知道我如何轻松完成这一任务吗?您可以在Selectcmdlet中使用自定

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

ServiceController
类有一个
MachineName
属性,但是
Site
ApplicationPool
类都没有这个属性

如何返回这些对象旁边的计算机名(即
获取服务|选择MachineName、Status、DisplayName
)?我考虑过扩展这些类,但它们是密封的,我不想花时间实现它们


编写cmdlet更熟练的人知道我如何轻松完成这一任务吗?

您可以在
Select
cmdlet中使用自定义表达式,将自定义属性添加到它返回的对象中

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

有关自定义表达式的更多信息,请参见此。

我只是为我想要的类编写了一个小包装器。它并不完美,但也不够重要,不值得花时间在它上面

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; }
}

谢谢,这是PowerShell的有用提示。你知道如何用C语言完成吗?我可能会尝试使用动态对象。