Question

Je suis une boucle à travers un répertoire de réseau et d'essayer de sortir les noms d'utilisateur / groupe (autorisations) associées à chaque fichier / dossier. Je reçois le dos du SID mais je veux les noms comme « group_test » et non « S-1-5-32-544 ». Voici mon code -

var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly);

                foreach (var f in files2)
                {
                    var fileInfo = new FileInfo(f);
                    var fs = fileInfo.GetAccessControl(AccessControlSections.Access);

                    foreach (FileSystemAccessRule rule in fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
                    {
                        var value = rule.IdentityReference.Value;
                        Response.Write(string.Format("File: {0} \t Usergroup: {1} <br/>", fileInfo.Name, value));
                    }  }

Je reçois SID du code ci-dessus, mais dans la boucle foreach, si j'utilise cette place -

(NTAccount)((SecurityIdentifier)rule.IdentityReference).Translate(typeof(NTAccount)).Value

Je reçois cette exception - Some or all identity references could not be translated.

Il semble que la méthode Traduire ne fonctionne pas sur les actions à distance. Comment puis-je récupérer ce sont les vrais noms du SID? Le serveur distant ne dispose pas LDAP.

Merci.

Était-ce utile?

La solution

Le problème est que vous essayez de résoudre un SID qui est locale à une machine distante. Comme la réponse à cette question états:

  

La méthode objet SecurityReference Traduisons fonctionne sur le SMSN non locales mais seulement pour le domaine des comptes ...

lien fournit un exemple pour résoudre à distance un SID en utilisant WMI qui est probablement la meilleure méthode pour accomplir votre tâche.

Autres conseils

Si vous pouvez utiliser WMI vous devriez être en mesure de le faire via le la classe de Win32_UserAccount je pense. Il possède une propriété Name et une propriété SID.

Ou la classe Win32_Group pour les groupes.

Voici un article pour se connecter à un ordinateur distant en utilisant WMI qui a du code C #: Comment faire pour se connecter à un ordinateur distant

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top