我想知道远程主机是否有r / w访问网络共享。首先,我想看看我是否可以查询目标主机查询UNC路径信息的能力,ala
var query = string.Format("select * from CIM_Directory where name = '{0}'", path);
这适用于本地文件,例如
var path = @"c:\\Windows";
但是,我无法找到一种查询UNC路径的合适方法(例如\\ foo \ bar)。查询始终返回空白集。我看到了一个关于执行远程文件的相关问题,并且该解决方案最终成为了PsExec。我希望完全使用WMI解决这个问题,而不必依赖第三方高管,或将我自己的工具上传到远程主机。
干杯
这是我现在尝试做的一些用法示例(取出var值):
using System;
using System.Linq;
using System.Management;
namespace netie
{
class Program
{
static void Main()
{
var connection = new ConnectionOptions
{
Username = "user",
Password = "pass",
Authority = "domain",
Impersonation = ImpersonationLevel.Impersonate,
EnablePrivileges = true
};
var scope = new ManagementScope("\\\\remote\\root\\CIMV2", connection);
scope.Connect();
var path = @"\\\\foo\\bar\\";
var queryString = string.Format("select * from CIM_Directory where name = '{0}'", path);
try
{
var query = new ObjectQuery(queryString);
var searcher = new ManagementObjectSearcher(scope, query);
foreach (var queryObj in searcher.Get().Cast<ManagementObject>())
{
Console.WriteLine("Number of properties: {0}", queryObj.Properties.Count);
foreach (var prop in queryObj.Properties)
{
Console.WriteLine("{0}: {1}", prop.Name, prop.Value);
}
Console.WriteLine();
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.ReadLine();
}
}
}
答案 0 :(得分:0)
所以看起来这基本上是不可能的,因为出于安全原因,WMI将您锁定在网络访问之外。看起来你最好的选择是WinRM或PsExec一次性。您可以通过WMI启用WinRM,如果它是您唯一的访问路径,但我认为该功能可以被组策略阻止。第三种选择是编写自己的Windows服务,如果您有权访问,它将响应请求并通过WMI安装。
简而言之:我的问题的答案是否。使用WinRm,PsExec或自定义win-service解决方案。
答案 1 :(得分:0)
我知道这是一个老问题,但对于任何想要这样做的人来说,以下代码都有效。 (我知道它不是WMI。鉴于OP的答案,我甚至没有尝试过WMI,但我不禁想到人们可能会为这样的事情写一个服务。)< / p>
if (System.IO.Directory.Exists(@"[SOME UNC PATH]"))
{
System.IO.DirectoryInfo info = new System.IO.DirectoryInfo(@"[SOME UNC PATH]");
var securityInfo = info.GetAccessControl();
var rules = securityInfo.GetAccessRules(
true,
true,
typeof(System.Security.Principal.SecurityIdentifier));
foreach (var rule in rules)
{
var fileSystemRule = rule as System.Security.AccessControl.FileSystemAccessRule;
if (ruleastype != null)
{
string user = fileSystemRule.IdentityReference.Translate(
typeof(System.Security.Principal.NTAccount)).Value;
System.Diagnostics.Debug.Print("{0} User: {1} Permissions: {2}",
fileSystemRule.AccessControlType.ToString(),
user,
fileSystemRule.FileSystemRights.ToString());
}
}
}
运行时会产生以下输出:
Allow User: Everyone Permissions: ReadAndExecute, Synchronize
Allow User: CREATOR OWNER Permissions: FullControl
Allow User: NT AUTHORITY\SYSTEM Permissions: FullControl
Allow User: BUILTIN\Administrators Permissions: FullControl
Allow User: BUILTIN\Users Permissions: ReadAndExecute, Synchronize