2

ActiveDirectoryアカウントを管理するためのツールで使用される.NETクラスに取り組んでいます。各アカウントはネットワークホームディレクトリを取得します。このディレクトリは、使用しているアカウントの種類に応じて、いくつかの異なるサーバーに配置できます。

フォルダの作成と削除は問題なく実行できますが、フォルダの共有に問題が発生しています。ここで私が欲しいと思われるコードを見つけましたが、正しく機能していません。私が得る戻り値は2ですが、それが何を示しているのかわかりません。

テストアプリケーションを自分で実行していて、共有しようとしているフォルダー(およびその各親フォルダー)を完全に制御できるため、これはファイルのアクセス許可の問題ではありません。

これが私の(変更された)バージョンのコードです:

char[] delim = { '\\' };
// folderPath is a string (UNC path)
string[] drivePath = folderPath.Split(delim); 

// Create a ManagementClass object
ManagementClass managementClass = new ManagementClass("Win32_Share");

// Create ManagementBaseObjects for in and out parameters
ManagementBaseObject inParams = 
    managementClass.GetMethodParameters("Create");
ManagementBaseObject outParams;

// Set the input parameters
inParams["Description"] = "";
inParams["Name"] = drivePath[3];
inParams["Path"] = folderPath;
inParams["Type"] = 0x0; // Disk Drive

// Invoke the method on the ManagementClass object
outParams = managementClass.InvokeMethod("Create", inParams, null);

他のoutParamsを出力しようとしましたが、ReturnValueがすべて取得しているようです。

より適切に機能するリモートフォルダを共有する別の方法はありますか?

4

1 に答える 1

1

他の誰かが後でこれを見つけた場合に備えて、私は自分自身に答えます。

PSExecとNETSHAREを使用するという非常にセクシーでない答えになってしまいました。

// Retrieve drive path from AD
char[] delim = { '\\' };
string[] drivePath = userAD.HomeDirectory.Split(delim);

// Configure startup properties of process
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.FileName = "C:\\Windows\\System32\\psexec.exe";

// Build arguments for folder on alpha or student
startInfo.Arguments = "\\\\" + serverName + " -s net share " + shareName + "=" folderPath + "$ /GRANT:\"authenticated users\",full";

Process process = new Process();

process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

私たちの環境では、プログラムは、共有されているフォルダーに対するフルコントロールのアクセス許可を持つユーザーの下ですでに実行されていることに注意してください。非特権ユーザーに同様のことを許可するには、で名前とパスワードを指定する必要がありますstartInfo.Arguments

于 2011-06-20T13:57:11.957 に答える