我们正在开发需要了解Microsoft DirectAccess连接状态的.NET应用程序。我知道可以通过PowerShell命令Get-DAConnectionStatus
查询状态。适用于DirectAccess状态的.NET API
但是,是否也可以通过托管.NET库/ API查询此DirectAccess状态?解决方法是从C#运行PowerShell脚本,但我认为从性能角度来看这并不理想(我们需要定期检查这个状态)。
我们正在开发需要了解Microsoft DirectAccess连接状态的.NET应用程序。我知道可以通过PowerShell命令Get-DAConnectionStatus
查询状态。适用于DirectAccess状态的.NET API
但是,是否也可以通过托管.NET库/ API查询此DirectAccess状态?解决方法是从C#运行PowerShell脚本,但我认为从性能角度来看这并不理想(我们需要定期检查这个状态)。
我能想象以下(不testet尚未虽然):
您可以通过
Get-CimInstance -Namespace "root/StandardCimv2" MSFT_DAConnectionStatus
查询相同的信息,您可以通过为Windows SDK
装配Microsoft.Management.Infrastructure
查询由C#CIM
实例解释here
最终我想出了这个C#代码,该代码适用于带DirectAccess和不带DirectAccess的机器:
/// <summary>
/// </summary>
/// <returns>-1 if DA is not available on this system.</returns>
private int GetDAStatus()
{
int status = -1;
string NamespacePath = @"\\.\ROOT\StandardCimv2";
string ClassName = "MSFT_DAConnectionStatus";
try
{
ManagementClass oClass = new ManagementClass(NamespacePath + ":" + ClassName);
foreach (ManagementObject mo in oClass.GetInstances())
{
status = Convert.ToInt32(mo["Status"]);
break;
}
}
catch (System.Management.ManagementException mex)
{
if (mex.ErrorCode == ManagementStatus.InvalidNamespace)
{
status = -1;
}
else throw;
}
return status;
}
'///
你是对的user9993,我确实提供了一个公共'get'属性:IsDirectAccessEnabled()调用GetDAStatus()。私有函数未公开,但在别处用于访问真正的DirectAccess状态(如果可用)。 –
这似乎是你想要查询一次,当你配置你的服务器,之后不再这样编写代码返回状态似乎是不需要的东西(国际海事组织)。也许我错了? – Igor