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