Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.091
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von BOfH_666

  1. Es kommt mit Windows.
  2. Das wusste ich tatsächlich. Aber wenn ich sowieso schon PowerShell nutze, würd ich dann lieber das cmdlet nutzen. Das habe ich heute auch erst gelernt - Windows 10 und 11 bringen die tatsächlich schon mit - raus aus der Kiste - sozusagen. Ist vielleicht nicht die aller-aller-aktuellste Version, aber vermutlich für 99% der Alltagsfälle ausreichend.
  3. Achso? Warum das? Warum nicht direkt?
  4. Wieso "wenn"? Ich sag doch, dass es das gibt. Kriegst Du's selbst gegoogled?
  5. Warum? curl gibt es auch für Windows.
  6. $_ representiert immer das jeweilige Pipeline-Objekt an der aktuellen Stelle der Pipeline. Möchtest Du an einer späteren Stelle der Pipeline auf Elemente von einer früheren Stelle zugreifen, musst Du an der Stelle den "common Parameter" "-PipelineVariable" einsetzen, von dem Du später die Werte anzeigen möchtest. Also so, wie ich das in meinem Code-Beispiel gemacht habe. Hier noch ein bissl Material zum Nachlesen: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_commonparameters?view=powershell-7.2 https://fercorrales.com/powershell-practical-use-of-pipelinevariable-common-parameter/ https://mcpmag.com/articles/2016/12/15/pipelinevariable-common-parameter.aspx Eine weitere häufig genutzte Möglichkeit wäre, eine Schleife einzusetzen und darin ein "[PSCustomObject]" zu benutzen: $Result = Get-ChildItem -Path 'U:\Eigene Dateien\Privat' -Recurse -filter *.pdf | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-300) } | ForEach-Object { $ACL = Get-Acl -Path $_.FullName [PSCustomObject]@{ Owner = $ACL.Owner Name = $_.Name FullName = $_.FullName LastWriteTime = $_.LastWriteTime } } $Result
  7. Wieso 2? Warum zeigst Du den Code nicht so, wie Du ihn auch verwendest? ?? Je konkreter Deine Frage ist (und der Code, den Du zeigst), desto konkreter fallen auch die Antworten aus. Wie so häufig - es kommt darauf an. Ja - variablen haben einen "Scope" in dem sie "gültig" sind. Das sollte aber beim "Rumprobieren" in der Konsole oder ISE order VSCode erstmal keine Rolle spielen. Funktioniert der Code, den ich oben noch angefügt habe?
  8. Markus, willkommen im MCSEboard. Eine einfache Möglichkeit ist es, das Ergebnis der Abfrage in einer Variablen zu speichern und diese einmal auszugeben. Wenn alles wie gewünscht aussieht, könntest Du mit der Variablen weiterarbeiten und deren Inhalt einfach an "Remove-Item" weiterreichen. Statt "Write-Host" solltest Du dann aber bitte "Select-Object" benutzen. $Result = Get-ChildItem -Path 'U:\Eigene Dateien\Privat' -Recurse -filter *.pdf | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-300)} -PipelineVariable CurFile | Get-acl | Where-Object {$_.owner -like '*q0219005*'} | Select-Object -Property Owner, @{Name = 'LastWriteTime'; Expression= {$CurFile.LastWriteTime}}, @{Name = 'FullName'; Expression= {$CurFile.FullName}} $Result $Result | Remove-Item -WhatIf So ungefähr könnte es aussehen ... !! ungetestet - bitte vorher mit Test-Daten prüfen !!
  9. Das wär mir neu. Versuch mal Folgendes in einem beliebigen Verzeichnis: Get-ChildItem | ForEach-Object { try { Get-ItemProperty -Path 'bla keks' -ErrorAction stop } catch { 'bla keks' } } Du wirst so viele "Blakekse" sehen, wie es Dateien und Ordner in diesem Verzeichnis gibt.
  10. ... Angeber! Die Ursache für solche Fehler liegt nach meiner Erfahrung meistens in ungewöhnlichen, in der ISE nicht sichtbaren Zeichen, wenn man den Code aus z.B. Word oder manchmal auch aus einem Browserfenster kopiert. Deshalb wäre VSCode als IDE auch besser geeignet, weil dort die PowerShell-Erweiterung inzwischen solche Zeichen speziell markiert und auf potenzielle Fehler hinweist. Versuch mal bitte, Deinen Code einmal in ein Windows-Notepad-Fenster zu kopieren und dann von dort wieder zurück in eine neue frische PS1-Script-Datei. Das eliminiert meistens solche Zeichen.
  11. Entweder Du ersetzt den "-" mit einem anderen Zeichen ... z.B. einem "_", oder ... Du setzt ALLE Schlüsselnamen (die Bezeichnungen links vom Gleichheitszeichen) in Anführungszeichen (einfache oder doppelte). Ich würde ja die Namen deutlich kürzer und weniger redundant gestallten ... z.B. "OfficeBerechtigt" für den ersten und bei allen weiteren den Teil "remotedesktop-user" einfach weglassen. Noch ein Hinweis: Der Index eines Arrays in PowerShell beginnt bei "0"!! Mit "$GroupList[1]" erhältst Du also bereits das zweite Element des Arrays. Und noch ein Hinweis: bitte keine Screenshots von Code oder Konsolen-Output posten. Anstatt dessen, den Text posten und als Code formatieren. Dann kannst Du sensible Informationen auch leichter aus-X-en.
  12. Danke. OK, es geht also nicht um ALLE Gruppen eines ADs - dann hätte ich Deine Idee für untauglich gehalten, sondern nur einige wenige spezifische. ... und weil bald Weihnachten is, .... $SearchBase = 'OU=Users,DC=Contoso,DC=de' $GroupList = 'CN=Group1,OU=Groups,DC=Contoso,DC=de', 'CN=Group2,OU=Groups,DC=Contoso,DC=de', 'CN=Group3,OU=Groups,DC=Contoso,DC=de', 'CN=Group4,OU=Groups,DC=Contoso,DC=de' $UserList = Get-ADUser -Filter * -SearchBase $SearchBase -Properties MemberOf $Result = foreach ($UserName in $UserList) { [PSCustomObject]@{ UserName = $UserName.sAMAccountName Group1 = If($UserName.MemberOf -contains $GroupList[0]){'x'} Group2 = If($UserName.MemberOf -contains $GroupList[1]){'x'} Group3 = If($UserName.MemberOf -contains $GroupList[2]){'x'} Group4 = If($UserName.MemberOf -contains $GroupList[3]){'x'} } } $Result | Format-Table -AutoSize ... bei 800 Usern halte ich eine solche Ansicht immernoch für untauglich ... aber wenn Du Dir eine Pivot-Tabelle draus bastelst, kannst Du Dir die Daten ja nach den jeweils benötigten Kriterien anzeigen lassen. Ein Hinweis noch: Du musst hier tatsächlich mit den exakten "DistinguishedNames" der Gruppen arbeiten, sonst findet der "-contains" Operator keine Übereinstimmung.
  13. Wozu soll diese Matrix denn dienen?
  14. Ohne auf den Rest Deines Codes einzugehen ... Du könntest Dir den String/Wert für "-Identity" vorher zusammenbauen und dann als komplette Variable übergeben: $Identity = '{0}:\Posteingang' -f $element Get-MailboxFolderPermission -Identity $Identity
  15. Ah ... ok ... dann war's das.
  16. Klaus Dieter, Willkommen im MCSEboard. ... kein Denkfehler ... das ist leider unter bestimmten Voraussetzungen ein Feature by Design. Wenn Du den Befehl lokal auf einem OnPremisses-Exchange-Server ausführst, hast Du an der Property "DatabaseSize" noch die "Sub-Property" .Value. Bei einem Remote-Zugriff existiert diese Sub-Property leider nicht mehr. Da müsstest Du dann mit einer calculated Property die Bytes aus den Klammern extrahieren und danach sortieren. Übrigens ... wenn Du Code, Konsolen-Output oder Beispieldaten postest, formatier die bitte mal als Code. Danke schon mal im Voraus.
  17. BOfH_666

    Was kommt nach Twitter?

    ... und dabei ist die ganze Auswahl auch viel weniger umfangreich, als man uns das glauben machen will ...
  18. Da alle aktuellen Browser mit dem Speicher alles andere als sparsam umgehen, könnte ein bissl mehr RAM eventuelle eine Entspannung bringen.
  19. Bei mir sind im Moment 6 Tabs zu 16 Prozessen
  20. Meiner Meinung nach wäre dann ein PowerShell-Modul die bessere Wahl. Das ist ist deutlich flexibler, leichter zu pflegen und weniger fehleranfällig, denke ich.
  21. Dann zitiere ich mich mal selbst ...
  22. Das hört sich ziemlich unwahrscheinlich an. Besteht die Möglichkeit, dass die Operatoren doch richtig funktionieren? ... also, dass es einfach keine Einträge gibt, die aktuell genug sind?
  23. Nur mal aus Neugier .... warum? Wenn ich mich nicht irre, sind alle Betriebssysteme, die mit einer PowerShell-Version kleiner 3.0 ausgeliefert wurden, schon ne Weile aus dem Support, oder? ... und selbst, wenn nicht - man könnte z.B. per UNC-Pfad auf die gewünschte XML-Datei zugreifen. Davon unabhängig - vergucke ich mich, oder ist in der kompletten XML-Datei die Du gepostet hast, das gewünschte Muster gar nicht vorhanden? ... also jedenfalls nicht so, wie Du es in Deiner ursprünglichen Frage angegeben hattest!?
  24. Ich glaub, das ist nur ein Fehler vom Hier-Her-Kopieren. Die Fehlermeldung lässt ja leider Raum für Interpretation. Vielleicht ist auch das "[datetime]::today" die Ursache. Versuch doch stattdessen mal "$((Get-Date).Date)". Wenn das auch nix bringt ... vielleicht baust Du Deinen Code ein bissl um, um das Error-Handling zu erleichtern. Statt des "Where-Object" eine Schleife benutzen und die jeweiligen Variablen-Inhalte und -Typen ausgeben. Vielleicht zeigst Du uns etwas mehr von Deinem Code ... 'ist manchmal leichter, wenn man ein bissl Kontext hat.
  25. Georg, Willkommen im MCSEboard. Die leeren Anführungszeichen in der Fehlermeldung deuten darauf hin, dass die Eigenschaft, die Du benutzen möchtest, leer ist. (oder hast Du die nur hier für das Forum entfernt?)
×
×
  • Neu erstellen...