Wie kann ich mit dem Befehl ICACLS einen Ordner so einrichten, dass er vollen Zugriff auf alle Benutzer hat, unabhängig von der Windows-Sprache?

3755
Geesh_SO

Hintergrund

Sagen Sie, ich habe diesen Befehl

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

Dies funktioniert gut in englischen Versionen von Windows, scheint jedoch in französischen Versionen nicht zu funktionieren, was zu der folgenden Fehlermeldung führt, vermutlich aufgrund von UsersUnterschieden in Französisch. Everyonewird wie Tout le mondein Windows übersetzt, also auch keine Lösung.

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

Welches Google übersetzt als

Users: The mapping between account names and security IDs was not performed.

Frage

Gibt es einen Befehl, mit dem ich einen Ordner und seinen gesamten Inhalt rekursiv festlegen kann, um alle Benutzer mit allen Berechtigungen so zu versehen, dass sie für verschiedene Sprachversionen von Windows geeignet sind?

Inhalte aus dem Internet

Diese Seite mit einem weitgehend ähnlichen Problem spricht darüber, wie Everyonewird Jederin Deutsch und Tout le mondein Französisch.

8
Verwenden Sie einfach die SID: `icacls C: \ FullyAccessibleFolder / grant S-1-5-32-545: (OI) (CI) F` Funktioniert überall. Ben vor 7 Jahren 2
@Ben, das sollte `icacls C: \ folder / grant * S-1-5-32-545 sein: (OI) (CI) F`, Sie haben das Sternchen weggelassen. Harry Johnston vor 7 Jahren 2

3 Antworten auf die Frage

10
DavidPostill

Funktioniert nicht in französischen Versionen, vermutlich aufgrund von UsersUnterschieden

Sie haben drei Optionen, die unten beschrieben werden:

  1. Verwenden Sie das Sprachportal verwenden, um den übersetzten Namen abzurufen

  2. Rufen Sie den lokalisierten Namen von der UsersSID ab

  3. Verwenden Sie die UsersSID miticacls


Option 1: Verwenden Sie das Sprachportal (kanonische Ressource für Microsoft-Terminologie)

Eine Suche nach Benutzern kehrt zurück:

Übersetzungen in lokalisierten Microsoft-Produkten

 English Translation Product Users Utilisateurs Windows 7 Users des utilisateurs Windows 7 Users Utilisateurs Windows 8 Modern Voice Users Utilisateurs Windows 8 Users Utilisateurs Windows 8.1 USERS UTILISATEURS Windows 8.1 Users Utilisateurs Windows 10 Users des utilisateurs Windows 10 Users Utilisateurs Windows 10 Anniversary Update users utilisateurs Windows 10 Anniversary Update 

Dies deutet darauf hin, dass der folgende Befehl möglicherweise funktioniert:

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F 

Option 2: Abrufen des lokalisierten Namens von der UsersSID ( S-1-5-32-545)

SID: S-1-5-32-545

Name: Benutzer

Beschreibung: Eine eingebaute Gruppe. Nach der Erstinstallation des Betriebssystems ist die Gruppe Authentifizierte Benutzer das einzige Mitglied. Wenn ein Computer einer Domäne beitritt, wird die Gruppe Domänenbenutzer der Gruppe Benutzer auf dem Computer hinzugefügt.

Quelle Bekannte Sicherheits-IDs in Windows-Betriebssystemen

So rufen Sie den lokalisierten UsersGruppennamen ab:

Dieses einfache Skript gibt Ihnen den tatsächlichen Namen der Benutzergruppe (S-1-5-32-545)auf einem bestimmten PC:

 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'") Wscript.Echo objAccount.AccountName 

Legen Sie es in eine Datei mit der Erweiterung vbs (Nehmen wir an, wir nehmen an usersName.vbs).

Jetzt ausführen:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F 

Quelle Cacls, Windows 7, vollständige Berechtigungen, lokale Namen von wmz


Option 3: Verwenden Sie die UsersSID miticacls

Verwenden Sie den folgenden Befehl:

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F 

Quellkommentar von Harry Johnston

`xcacls` scheint ein Skript zu sein, das Sie herunterladen können. Es ist nicht nötig; `icacls` ist in Windows integriert und kann den gleichen Job erledigen. Harry Johnston vor 7 Jahren 0
@HarryJohnston: Richtig, aber meine Antwort zeigt, wie die lokalisierte Version von 'Users' abgerufen wird. Ich habe die Antwort geklärt, da wir den 'xacls'-Teil der zitierten Lösung nicht benötigen. DavidPostill vor 7 Jahren 0
@HarryJohnston Ich habe auch hinzugefügt, "icacls" direkt mit Kredit an Sie. DavidPostill vor 7 Jahren 0
Ich habe die Antwort von DavidPostill akzeptiert, da sie auf eine echte Befehlszeilenweise ausgeführt wird. Dies ist besonders bei der Verwendung von Stapel- oder PS-Skripts von Vorteil. Am Ende habe ich tatsächlich eine kleine ausführbare Datei in C # erstellt, die nur einen Pfad nimmt und genau das macht, was ich brauche. Es ist nicht so anpassbar wie die Antworten und erfordert .NET Framework, aber es passt sehr gut zu meinem speziellen Zweck. Wenn jemand interessiert ist, hier ist die Basis des C # -Codes, mit dem ich gelaufen bin. http://stackoverflow.com/a/35461832/1639615 Geesh_SO vor 7 Jahren 0
6
Tonny

Sie müssen die AD-Gruppe nicht anhand ihres Namens, sondern anhand der SID-Nummer angeben.
Für Standardgruppen wie "EveryOne", "Domain Users" usw. gibt es standardisierte SID-Nummern. Diese finden Sie auf der MSDN-Seite. Bekannte Sicherheitskennungen (SIDs) .

Im Folgenden sind die häufigsten relativen Bezeichner aufgeführt.

Die Struktur einer SID wird wie folgt beschrieben:

Die Komponenten einer SID lassen sich leichter visualisieren, wenn SIDs mithilfe der Standardnotation vom Binär- in das Zeichenfolgenformat konvertiert werden:

SRX-Y1-Y2-Yn-1-Yn

 Component Definition  S Indicates that the string is a SID R Revision level X Identifier authority value Y A series of subauthority values, where n is the number of values 

Beispielsweise wird die SID für die integrierte Gruppe Administratoren in standardisierter SID-Notation als folgende Zeichenfolge dargestellt:

S-1-5-32-544

Diese SID besteht aus vier Komponenten:

  • Ein Revisionsstand (1)

  • Bezeichnerberechtigungswert (5, NT-Berechtigung)

  • Eine Domain-ID (32, Builtin)

  • Eine relative Kennung (544, Administratoren)

Funktionsweise von Sicherheits-IDs

Es ist darauf hinzuweisen, dass alle Benutzer standardmäßig zur Benutzergruppe gehören. Wenn Sie also "vollen Zugriff" auf alle Benutzerkonten gewähren möchten, verwenden Sie einfach die SID `S-1-5-32-544` und ändern Sie die ACL, um der Gruppe alle Berechtigungen für die betreffende Datei oder den betreffenden Ordner zu erteilen Ramhound vor 7 Jahren 0
@Ramhound `544` ist Administratoren,` 545` ist Benutzer. DavidPostill vor 7 Jahren 0
@DavidPostill - Ja; Fehler beim Kopieren und Einfügen Ramhound vor 7 Jahren 0
@ Ramhound Viel besser. Es war das Beste, was ich tun konnte, während ich telefonierte. Danke für die Bearbeitung. Tonny vor 7 Jahren 0
3
Ben N

Wenn Sie PowerShell-Skripts mögen, sich die Nummern für SIDs nicht merken können:

$acl = Get-Acl .\myfolder $sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null) $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow') $acl.AddAccessRule($rule) Set-Acl .\myfolder $acl 

Ich weiß, das sieht aus wie eine Menge Tippen, aber diese langen Bezeichner sind tabulatorfertig:

  • System.Security.Principal.SecurityIdentifier von securityi
  • System.Security.Principal.WellKnownSidType von wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule von filesystem

Alle diese Zeichenfolgen sind .NET-Bezeichner, sodass sie nicht lokalisiert werden.

Wenn Sie Everyonestattdessen die SID verwenden möchten, verwenden Sie WorldSidanstelle von BuiltinUsersSid. Die Liste aller WellKnownSidTypeOptionen finden Sie unter MSDN oder führen Sie den folgenden Befehl aus:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name 
_FileSystemAccessRule_ ohne *** Sid *** und Verwendung von Gruppennamen? Kiquenet vor 5 Jahren 0
@Kiquenet Ich bin mir nicht ganz sicher, was Sie fragen, aber wenn Sie lieber einen von Menschen lesbaren Gruppennamen angeben, wird dies nicht mehr sprachunabhängig sein. Wenn Sie damit einverstanden sind, können Sie die Zeile "$ sid =" entfernen und "$ sid" in der Zeile "$ rule =" durch eine Zeichenfolge ersetzen, die die Gruppe identifiziert. Ben N vor 5 Jahren 0