Zum Inhalt wechseln


Foto

Warum geht Script mit dieser MS Gruppe nicht?


  • Bitte melde dich an um zu Antworten
18 Antworten in diesem Thema

#1 wos

wos

    Newbie

  • 24 Beiträge

 

Geschrieben 27. März 2017 - 14:59

Hallo zusammen, bin jetzt nicht so der Powershell Guru, aber ich google mir mein Zeug so zusammen. Ein aber bereits funktionierendes Skript, welches den Ersteller-Besitzer aus einer Verzeichnisberechtigung entfernt ...

# ERSTELLER BESITZER aus ACLs entfernen
$IdentityRef = "ERSTELLER-BESITZER"
$ACL = Get-Acl $LocalInstDir 
$ACEs=(Get-Acl $LocalInstDir).Access | where {$_.IdentityReference -eq $IdentityRef}
$ACEs | foreach{
    try{
    $null=$ACL.RemoveAccessRule($_)
    Set-ACL $LocalInstDir $ACL
    "ACE für $IdentityRef erfolgreich entfernt"
    }
    catch{
    #keine ACE mehr vorhanden
    }
 }

... funktioniert einfach nicht, sobald ich ALLE ANWENDUNGSPAKETE (anstatt ERSTELLER-BESITZER) entfernen will.

 

Mit anderen Gruppen geht es schon, aber nicht dieses Anwendungspaketdingens. Ich hab es auch schon mit der englischen Benennung versucht, das hat nichts gebracht. Dann dachte ich, ich kann das evtl. mit der dazugehörigen SID realisieren (die steht ja im MSDN für die Gruppe drinnen), das krieg ich aber auch nicht hin-/umgebaut (weiss gar nicht üb das überhaupt geht).

 

Weiss einer, warum das Skript offensichtlich mit allen Gruppen geht, aber nicht diesem konkreten Ding? Per Mausklick ist die ganz einfach entfernt, es ist also nicht so, dass das gar nicht ginge. Wäre das mit der SID ein gangbarer Weg?



#2 lefg

lefg

    Expert Member

  • 20.510 Beiträge

 

Geschrieben 27. März 2017 - 15:26

Moin

 

ist der Ablauf des Skriptes beobachtbar eventuell in Einzelschritten? Sind auftretende Fehler protokollierbar?

 

Ist der Ersteller/Besitzer überhaupt entfernbar? Wurde das händisch in dem selben Kontext schon einmal probiert?


Bearbeitet von lefg, 27. März 2017 - 15:29.

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#3 wos

wos

    Newbie

  • 24 Beiträge

 

Geschrieben 28. März 2017 - 11:10

Ja, wie geschrieben, kann man das händisch über die GUI machen. Ich weiss nicht, wie man das in Einzelschritten debuggen könnte oder geschweige denn, wo da irgendwo ein Log wäre. Aber es geht ja mit allen anderen Gruppen, die ich rausmachen wollte, nur mit dieser ALLE ANWENDUNGSPAKETE halt nicht. So falsch kann das Skript nicht sein, wahrscheinlich findet er den Namen nicht?! Wenn jemand weiss, wie man das auf die SID umbauen könnte, statt über den Namen, würde das sogar Sprachunabhängig gehen ...



#4 BOfH_666

BOfH_666

    Junior Member

  • 147 Beiträge

 

Geschrieben 28. März 2017 - 11:31

Hmmm .... ich kann das leider nicht nachvollziehen, da ich so eine Gruppe bei mir nicht finden kann. Aber was willst Du denn eigentlich erreichen? Warum willst Du denn diese spezielle zugriffsberechtigte Gruppe entfernen? Meistens sind diese Rechte ja aus einem bestimmten Grund gewährt. Vielleicht kannst Du hier auch mal einen Auszug aus Deinen ACLs posten. Eventuell erkennt ja jemand das Problem.

 

Übrigens kannst Du das hier:

$ACL = Get-Acl $LocalInstDir 
$ACEs=(Get-Acl $LocalInstDir).Access

so etwas verkürzen ...

$ACL = Get-Acl $LocalInstDir 
$ACEs=($ACL).Access

... dann brauch die Abrage nicht zweimal laufen.   ;)


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#5 MurdocX

MurdocX

    Board Veteran

  • 585 Beiträge

 

Geschrieben 28. März 2017 - 17:59

Ich würde es mal damit probieren

$Pfad = "C:\Users\Jan\Desktop\Neuer Ordner"
$IstACL = Get-Acl -Path $Pfad

$BöseACL = $IstACL.Access | Where-Object {$_.IdentityReference -like "Ersteller-Besitzer"} 
$IstACL.RemoveAccessRule($BöseACL)

Set-Acl -Path $Pfad -AclObject $IstACL

:)


Dein "ForEach" gibt übrigens keinen Sinn, da jede AccessRule von Dir einzeln entfernt und die neue ACL dann auf das Objekt geschrieben wird. 4x AccessRule heißt 4x die Berechtigung auf eine Datei setzen und 4x eine weniger dazu schreiben. Am Ende hast du nix mehr  ;)


Mit freundlicher Unterstützung
Jan


#6 NilsK

NilsK

    Expert Member

  • 12.471 Beiträge

 

Geschrieben 29. März 2017 - 09:34

Moin,

 

das Problem könnte das Leerzeichen sein. Dein Skript übergibt den Namen als Text. Besser wäre es, in der PowerShell immer ein Objekt zu übergeben.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#7 wos

wos

    Newbie

  • 24 Beiträge

 

Geschrieben 30. März 2017 - 08:03

Hallo zusammen,

 

erst mal danke für die Antworten, ich hab es aber auch damit nicht hingekriegt:

 

Hmmm .... ich kann das leider nicht nachvollziehen, da ich so eine Gruppe bei mir nicht finden kann. Aber was willst Du denn eigentlich erreichen? Warum willst Du denn diese spezielle zugriffsberechtigte Gruppe entfernen? Meistens sind diese Rechte ja aus einem bestimmten Grund gewährt.

 

Dank Dir für Deine sicherlich besten Absichten mir diese Frage zu stellen. Ich bin aber generell (so wie in meinem Fall auch) der Meinung, dass in 9 von 10 Fällen die Frage an sich am Problem vorbei geht und man sich diese meist sparen kann. Ich hab mir auch abgewöhnt, anderen diese Frage zu stellen. Für die meissten würde ich unterstellen, dass diese schon einen guten Grund haben, das machen zu wollen. Nix für ungut - ist nicht böse gemeint, nur meine Meinung. Aber so viel vielleicht dazu: Diese Gruppe ist bspw. standardmäßig im Programmverzeichnis eines Servers vorhanden auch auf einem W10 wird man die wohl finden.

 

Übrigens kannst Du das hier:
$ACL = Get-Acl $LocalInstDir 
$ACEs=(Get-Acl $LocalInstDir).Access

so etwas verkürzen ...

$ACL = Get-Acl $LocalInstDir 
$ACEs=($ACL).Access

... dann brauch die Abrage nicht zweimal laufen.   ;)

 

Danke auch für den Hinweis, wie man das besser über das Objekt lösen kann. So ist es sicherlich auch eleganter. Ich hab ich mir den bisherigen Powershell Code auch nur über Google zusammen geklaut, in der Hoffnung dass die, von denen ich abschreibe, vielleicht halbwegs einen Plan haben, was die da so machen.

 

Ich würde es mal damit probieren

$Pfad = "C:\Users\Jan\Desktop\Neuer Ordner"
$IstACL = Get-Acl -Path $Pfad

$BöseACL = $IstACL.Access | Where-Object {$_.IdentityReference -like "Ersteller-Besitzer"} 
$IstACL.RemoveAccessRule($BöseACL)

Set-Acl -Path $Pfad -AclObject $IstACL

 

Habe auf meinem Server 2012 R2 einen Ordner C:\Program Files (x86)\Test angelegt. Das Skript läuft durch und macht auch keinen Fehler. Es löscht aber nicht den Ersteller-Besitzer, das was ich vorher schon mit meinem so machen konnte.

 


Dein "ForEach" gibt übrigens keinen Sinn, da jede AccessRule von Dir einzeln entfernt und die neue ACL dann auf das Objekt geschrieben wird. 4x AccessRule heißt 4x die Berechtigung auf eine Datei setzen und 4x eine weniger dazu schreiben. Am Ende hast du nix mehr 

 

Das mag sein, dass das nicht so elegant geschrieben ist, wie es sein könnte. Leider krieg ich es mit den aufgezeigten Alternativen gar nicht mehr hin, dass auch nur eine Gruppe entfernt wird.

 

das Problem könnte das Leerzeichen sein. Dein Skript übergibt den Namen als Text. Besser wäre es, in der PowerShell immer ein Objekt zu übergeben.

 

Danke, an so was hab ich auch schon gedacht, dass es u.U. daran liegen könnte. Daher ja auch der Gedanke, wenn man meinen Ansatz (der vielleicht nicht so elegant gecodet ist, aber im Prinzip in der Lage ist, so eine Gruppe raus zu löschen) so umbauen kann, dass es bspw. direkt mit einer SID umgehen kann. Die SID für diese Gruppe wäre lt. MSDN ...

 

https://msdn.microso...y/cc980032.aspx

 

... die S-1-15-2-1. Ich weiss nur nicht, wie ich dem Skript quasi ein

... where Identity = "S-1-15-2-1"

... (oder wie man dass dann auch immer vom Syntax her schreiben muss) beibringen kann. Dann wäre das Ganze nämlich auch noch Sprachunabhängig.

 

Vielleicht hat ja noch einer den entscheidenden Tipp auf Lager. Irgendwie muss das doch mit dieser Powershell hinzubekommen sein (ist es auch sicherlich). Danke schon mal an alle für Ihre Antworten.



#8 MurdocX

MurdocX

    Board Veteran

  • 585 Beiträge

 

Geschrieben 30. März 2017 - 08:24

Habe auf meinem Server 2012 R2 einen Ordner C:\Program Files (x86)\Test angelegt. Das Skript läuft durch und macht auch keinen Fehler. Es löscht aber nicht den Ersteller-Besitzer, das was ich vorher schon mit meinem so machen konnte.

 

Das funktioniert bei mir einwandfrei. Ich vermute, dass du das auf Ordnern entfernen möchtest, die die Berechtigung vererbt bekommen haben. Probiere mein Skript mal mit einem einfachen Ordner auf dem Desktop aus und du wirst sehen es klappt.  ;)


EDIT:

 

Zum entfernen der Vererbung kannst du icacls.exe /inheritance:d nutzen.


Mit freundlicher Unterstützung
Jan


#9 wos

wos

    Newbie

  • 24 Beiträge

 

Geschrieben 30. März 2017 - 08:57

Hallo MurdocX,

 

Das funktioniert bei mir einwandfrei. Ich vermute, dass du das auf Ordnern entfernen möchtest, die die Berechtigung vererbt bekommen haben. Probiere mein Skript mal mit einem einfachen Ordner auf dem Desktop aus und du wirst sehen es klappt.  

 

da hast Du völlig recht, das vermutest Du richtig. Logo, dass das so nicht kann. Asche über mein Haupt.

 

In meinem Skript, wo vorher alles mögliche passiert, lege ich aber unterhalb des x86 Programmverzeichnisses ein neues Verzeichnis XXXXX an. Dann breche ich die Vererbung mit der Powershell auf und übertrage alle vorher vererbten Rechte direkt als ALC an dieses Verzeichnis. Bei "Geerbt von" steht dann "Keine". Wollt gerade noch einen Screenshot anhängen, aber das ist mir irgendwie nicht erlaubt, wird mir angezeigt. Egal - musst Du mir glauben, dass das aufgebrochen ist.

 

Bei meinem ersten Test, hatte ich mir blöderweise erspart, dass vorher noch aufzubrechen.

 

Lasse ich jetzt das Skript aber auf einem Verzeichnis mit aufgebrochener Vererbung laufen, dann klappt es mit deinem Beispiel, die ERSTELLER-BESITZER rauszulöschen. Rufe ich es ein 2. mal mit dem gleichen Verzheichnis und der gleichen Gruppe auf, so kommt ein Fehler, dass irgenwas nicht NULL sein darf. Wohl die nun nicht mehr in der ACL vorhandene Gruppe. Insofern logisch und ok ...

 

Rufe ich dein Skript dann wieder mit der Gruppe VORDEFINIERT\BENUTZER auf (was mit meinem geklappt hat), so kommt auch der NULL Fehler. Die Gruppe bleibt dann auch in den ACLs erhalten. Er kann diese wohl wegen eines Namensproblems nicht finden. Ich habe Versionen mit $_.IdentityReference -eq blabla und -like blabla gesehen. Die kann ich so leider nun nicht mehr raus löschen.

 

Auch bei ALLE ANWENDUNGSPAKETE klappt es nicht, wohl auch wegen der Benennung.

 

Um all diesen Namensproblemen aus dem Weg zu gehen, würde ich auch gerne einfach die SID nutzen. Aber so einfach wie sich das anhört ist es wohl nicht. Auf jeden Fall komme ich nicht dahinter, wie man das schreiben muss, dass die Gruppe über die SID quasi als Objekt gefunden wird. Die SIDs selbst in Erfahrung zu bringen, wäre nicht das Problem. Mit der SID könnte ich das Objekt wohl bestimmt da raus löschen, wenn ich wüsste wie die Syntax ist bzw. wie das geht.



#10 MurdocX

MurdocX

    Board Veteran

  • 585 Beiträge

 

Geschrieben 30. März 2017 - 09:30

Auch bei ALLE ANWENDUNGSPAKETE klappt es nicht, wohl auch wegen der Benennung.

 

In Wirklichkeit heißt "Alle Anwendungspakete" nämlich: "ZERTIFIZIERUNGSSTELLE FÜR ANWENDUNGSPAKETE\ALLE ANWENDUNGSPAKETE". Die Berechtigung lässt sich damit aber nicht entfernen. Zumindest über Powershell.

 

Hiermit funktioniert es. Den Befehl könnte man in die PS einbauen und Verzeichnisse über "ForEach" durchrödeln.  :)

icacls.exe "C:\Users\Jan\Desktop\Neuer Ordner" /remove:g "Alle Anwendungspakete"

Mit freundlicher Unterstützung
Jan


#11 NilsK

NilsK

    Expert Member

  • 12.471 Beiträge

 

Geschrieben 30. März 2017 - 09:48

Moin,

 

Berechtigungen würde ich nur und ausschließlich mit SetACL automatisieren.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#12 BOfH_666

BOfH_666

    Junior Member

  • 147 Beiträge

 

Geschrieben 30. März 2017 - 11:37

Ich bin aber generell (so wie in meinem Fall auch) der Meinung, dass in 9 von 10 Fällen die Frage an sich am Problem vorbei geht und man sich diese meist sparen kann. Ich hab mir auch abgewöhnt, anderen diese Frage zu stellen. Für die meissten würde ich unterstellen, dass diese schon einen guten Grund haben, das machen zu wollen. 

 

... und genau da ist meine Erfahrung eine ganz andere - ganz allgemein und besonders in Foren wie diesem hier. Ich frage IMMER erst mal nach dem Mehrwert. Wenn das Angeforderte weder die Leistung noch die Sicherheit verbessert, wozu dann den ganzen Aufwand betreiben? Gerade Anforderungen aus dem "nicht-technischen" Management sind nach meiner Erfahrung gerne mal pure Verschwendung von Zeit und Energie. Nur weil etwas technisch möglich ist, ist es noch lange nicht sinnvoll. Und gerade bei Berechtigungsanpassungen sind mir schon das ein oder andere mal die Nebenwirkungen später wieder auf die Füße gefallen.

Also denn ... ich drück die Daumen!   ;)  :)


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#13 wos

wos

    Newbie

  • 24 Beiträge

 

Geschrieben 30. März 2017 - 12:30

Hallo zusammen,

 

In Wirklichkeit heißt "Alle Anwendungspakete" nämlich: "ZERTIFIZIERUNGSSTELLE FÜR ANWENDUNGSPAKETE\ALLE ANWENDUNGSPAKETE". Die Berechtigung lässt sich damit aber nicht entfernen.

 

Das stimmt, auch mit dem Namen hatte ich es anfangs probiert (hatte diesen mit einem get-acl ermittelt), aber habe auch bemerkt, dass es damit auch nicht geht.

 

Berechtigungen würde ich nur und ausschließlich mit SetACL automatisieren.

 

Das würde ich auch gern so bevorzugen. Vielleicht fällt einem ja noch ein, wie man das gegen die SID machen könnte. Das liegt bestimmt an dem Namen! Ich werde mich parallel hierzu noch ein wenig durch die Gegend googeln ... falls ich auf die Lösung komme, schreib ich die natürlich hier rein ...


Hallo,

 

... und genau da ist meine Erfahrung eine ganz andere - ganz allgemein und besonders in Foren wie diesem hier. Ich frage IMMER erst mal nach dem Mehrwert. Wenn das Angeforderte weder die Leistung noch die Sicherheit verbessert, wozu dann den ganzen Aufwand betreiben? Gerade Anforderungen aus dem "nicht-technischen" Management sind nach meiner Erfahrung gerne mal pure Verschwendung von Zeit und Energie. Nur weil etwas technisch möglich ist, ist es noch lange nicht sinnvoll. Und gerade bei Berechtigungsanpassungen sind mir schon das ein oder andere mal die Nebenwirkungen später wieder auf die Füße gefallen.

Also denn ... ich drück die Daumen!   ;)  :)

 

also nochmal Danke für Deine Bedenken. Ich hab nur zum Ausdruck bringen wollen, dass in den verschiedensten Foren jemand einfach eine Frage stellt und oft, kommen dann einfach Gegenfragen, warum so und nicht so. Dann geht es plötzlich den ganzen Thread um solche Sachen, oft dann gar nicht mehr um die eigentliche Frage. Wenn der Threadstarter Glück hat, bekommt er seine Frage vielleicht nach 30 anderen Posts dann mal beantwortet. Daher denke ich, dass das in 9 von 10 Fällen eigentlich nicht nötig wäre.

 

Ich seh aber, ich komm jetzt wohl doch nicht umhin, das jetzt darzulegen, auch wenn ich mich jetzt dann leider schon wieder aufregen muss *lach*:

 

Unterhalb von x86 Programme erstelle ich ein Programmverzeichnis. Die Vererbung wird unterbrochen. Dort kommt eine eigene Anwendung rein, die nicht im entferntesten irgendein Recht bräuchte, dass eine Windows App oder was das sein möchte, darauf Zugriff haben soll. Wenn ich das Wort App schon hör, dreht sich mir alles um. Dieser ganze App Mist auf einem Server, könnt mich schon wieder aufregen wenn ich nur daran denke was MS die letzten Jahre so verzapft, früher hatte ich die Fahne für die noch hochgehalten. Ich muss jetzt somit auch aufhören zu schreiben, sonst dreh ich gar noch durch ...

 

Auf jeden Fall, handet es sich um eine eigene Anwendung, die einen Webservice zur Verfügung stellt. Ich weiss, wer, welche Dienste und Accounts darauf Zugriff bekommen sollen. Ganz sicher gehört da diese App Gruppe und auch normale Benutzer oder Ersteller-Besitzer nicht dazu und daher will ich auch nicht, dass irgendwelche Apps  über die Gruppe darauf zugreifen dürfen. Es wird sich daher auch nicht zu einem Nachteil entwickeln, wenn die Gruppe weg ist.

 

So ... kurz durchatmen ... Om ... Nix für ungut, aber wenn ich über solche Dinge nachdenken muss und warum das bei MS alles so mistig wurde, kann ich mittlerweile nicht mehr ruhig bleiben ,)



#14 BOfH_666

BOfH_666

    Junior Member

  • 147 Beiträge

 

Geschrieben 30. März 2017 - 12:36

Alles klar ... dann weiß ich jetzt Bescheid ... der ganze Aufwand für keinen messbaren technischen Mehrwert.  SCNR    :D  :)  ;)  :cool:  :p


Bearbeitet von BOfH_666, 30. März 2017 - 12:36.

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#15 NilsK

NilsK

    Expert Member

  • 12.471 Beiträge

 

Geschrieben 30. März 2017 - 12:49

Moin,

 

also nochmal Danke für Deine Bedenken. Ich hab nur zum Ausdruck bringen wollen, dass in den verschiedensten Foren jemand einfach eine Frage stellt und oft, kommen dann einfach Gegenfragen, warum so und nicht so. Dann geht es plötzlich den ganzen Thread um solche Sachen, oft dann gar nicht mehr um die eigentliche Frage. Wenn der Threadstarter Glück hat, bekommt er seine Frage vielleicht nach 30 anderen Posts dann mal beantwortet. Daher denke ich, dass das in 9 von 10 Fällen eigentlich nicht nötig wäre.

 

ach je. Nicht schon wieder diese Diskussion. Wenn du wüsstest, wie oft wir hier an irgendwas rumlaborieren, nur um hinterher festzustellen, dass man mit Kenntnis der Hintergründe viel schneller zu einem besseren Ergebnis gekommen wäre.

 

Du kannst uns glauben, dass wir auch unsere Erfahrungen haben.

 

Gruß, Nils


  • BOfH_666 gefällt das

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!