リモート ホストがネットワーク共有への読み取り/書き込みアクセスを持っているかどうかを確認したいと考えています。まず、ターゲット ホストが UNC パスの情報を照会する機能を照会できるかどうかを確認したかったのです。
var query = string.Format("select * from CIM_Directory where name = '{0}'", path);
これは、ローカルファイルに対してはうまく機能します。
var path = @"c:\\Windows";
しかし、UNC パス (\\foo\bar など) を照会する適切な方法がわかりません。クエリは常に空白のセットを返します。リモートファイルの実行に関する関連する質問を見ましたが、その解決策は最終的に PsExec でした。理想的には、サード パーティの exec に依存したり、独自のツールをリモート ホストにアップロードしたりせずに、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();
}
}
}