2

リモート ホストがネットワーク共有への読み取り/書き込みアクセスを持っているかどうかを確認したいと考えています。まず、ターゲット ホストが 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();
        }
    }
}
4

2 に答える 2

0

したがって、セキュリティ上の理由から WMI がネットワーク アクセスをロックアウトするため、これは基本的に不可能のようです。あなたの最善の策は、1 回限りの WinRM または PsExec のようです。それが唯一のアクセス パスである場合は、WMI を介して WinRM を有効にできる可能性がありますが、その機能はグループ ポリシーによってブロックされる可能性があると思います。3 番目のオプションは、要求に応答する独自の Windows サービスを作成し、アクセスできる場合は WMI を介してそれをインストールすることです。

要するに、私の質問に対する答えはノーです。WinRm、PsExec、またはカスタムの win-service ソリューションを使用してください。

于 2014-06-27T15:12:39.100 に答える