2011-06-13 3 views
2

Je travaille sur une classe .NET qui sera utilisée dans les outils pour gérer nos comptes Active Directory. Chacun de nos comptes obtient un répertoire de base de réseau, qui peut être situé sur plusieurs serveurs différents, selon le type de compte avec lequel nous travaillons.Comment partager des dossiers distants?

Je peux créer et supprimer les dossiers très bien, mais j'ai des problèmes pour partager les dossiers. I found some code here qui semble être ce que je veux, mais cela ne fonctionne pas correctement pour moi. La valeur de retour que je reçois est 2, mais je ne suis pas sûr de ce que cela indique. Cela ne devrait pas être un problème de permission de fichier, puisque j'utilise mon application de test comme moi-même, et que j'ai le contrôle total du dossier que j'essaie de partager (et de chacun de ses dossiers parents).

Voici mon (modifié) version du code:

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); 

J'ai essayé pour sortir les autres outparams, mais il semble que ReturnValue est tout ce que je reçois.

Existe-t-il un moyen différent de partager un dossier distant qui fonctionnerait mieux?

Répondre

1

Je me réponds, au cas où quelqu'un d'autre le trouverait plus tard.

J'ai fini par aller avec la réponse extrêmement unsexy d'utiliser PSExec et NET PART:

// 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(); 

Notez que dans notre environnement, le programme est déjà en cours d'exécution en vertu d'un utilisateur disposant d'autorisations de contrôle total sur le dossier étant partagé. Pour autoriser un utilisateur non privilégié, vous devez spécifier un nom et un mot de passe au startInfo.Arguments.

Questions connexes