2016-06-14 97 views
1

我们正在开发需要了解Microsoft DirectAccess连接状态的.NET应用程序。我知道可以通过PowerShell命令Get-DAConnectionStatus查询状态。适用于DirectAccess状态的.NET API

但是,是否也可以通过托管.NET库/ API查询此DirectAccess状态?解决方法是从C#运行PowerShell脚本,但我认为从性能角度来看这并不理想(我们需要定期检查这个状态)。

+0

这似乎是你想要查询一次,当你配置你的服务器,之后不再这样编写代码返回状态似乎是不需要的东西(国际海事组织)。也许我错了? – Igor

回答

1

我能想象以下(不testet尚未虽然):

您可以通过

Get-CimInstance -Namespace "root/StandardCimv2" MSFT_DAConnectionStatus 

查询相同的信息,您可以通过为Windows SDK装配Microsoft.Management.Infrastructure查询由C#CIM实例解释here

1

最终我想出了这个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; 
} 
+0

'/// -1如果DA在此系统上不可用。 “这是不好的,你应该在这种情况下返回一个布尔值。这是在C#/ .NET中工作时推荐的方法,这与C约定不同。因此,该方法应该被称为“IsDirectAccessAvaliable()” – user9993

+0

你是对的user9993,我确实提供了一个公共'get'属性:IsDirectAccessEnabled()调用GetDAStatus()。私有函数未公开,但在别处用于访问真正的DirectAccess状态(如果可用)。 –