Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.035
  • Registriert seit

  • Letzter Besuch

Beste Lösungen

  1. BOfH_666's post in PowerShell Array auslesen und abgleichen wurde als beste Lösung markiert.   
    OK. Tust Du mir bitte einen Gefallen und führst mal bitte den folgenden Code aus ... so wie er ist - nur mit Deinen Variablen?
     
    $SourceACL = Get-Acl $Quelle | Select-Object -ExpandProperty Access $TargetACL = Get-Acl "\\$TargetServer\$Type\$Folder" | Select-Object -ExpandProperty Access Compare-Object -ReferenceObject $SourceACL -DifferenceObject $TargetACL -Property IdentityReference, FileSystemRights -IncludeEqual Was erhältst Du als Ausgabe? ... ich gehe davon aus, dass Du ein paar Zeilen mit den Titeln IdentityReference, FileSystemRights und SideIndicator erhältst, richtig? Du hast also MEHRERE Zeilen mit dem gleichen Ergebnis. Und das versuchst Du mittels -eq '==' zu vergleichen. Das kann nicht zuverlässig funktionieren.  Und wenn es doch funktioniert, kannst Du dem Ergebnis nicht vertrauen. Wenn Du das -IncludeEqual weglässt, erhältst Du nur noch die Unterschiede - was Du ja möchtest. Und wenn es keine Unterschiede gibt, wird auch keine Ausgabe erzeugt. 
  2. BOfH_666's post in Skript für Ordnerstruktur teilweise kopieren wurde als beste Lösung markiert.   
    Nee ... wir werden doch jetzt nicht anfangen, Pfade oder Laufwerksbuchstaben im Code hart zu verdrahten ...   ich hätte vielleicht dazusagen sollen: "Pfoten weg von meinem Code! "    ... nicht meinen Code anpassen - eigenen ergänzen.    
    Dieser Teil hier:
    $QuellPfad = 'C:\Quelle\Desktop\Kopier-Skript\Test\Quelle' $ZielPfad = 'C:\Ziel\Desktop\Kopier-Skript\Test\Ziel' $OrdnerSuchMuster = '\\B\d{2}_' $PotenzielleBackupOrdnerListe = Get-ChildItem -Path $QuellPfad -Directory -Recurse | Where-Object { $_.FullName -match $OrdnerSuchMuster } | ForEach-Object { $DateiSuchMuster = Join-Path -Path $_.FullName -ChildPath '*.pdf' if (Test-Path -Path $DateiSuchMuster) { [PSCustomObject]@{ FullName = $_.FullName ShortName = $_.FullName -replace [REGEX]::Escape($QuellPfad) } } } ... war doch nur dazu da, zu zeigen, wie man die zu kopierenden Ordner ermittelt und die Pfade entsprechend aufbereitet. Die damit erzeugte Liste $PotenzielleBackupOrdnerListe können wir dazu benutzen, den Zielpfad zusammenzubauen und den Copy-Job anzustoßen:
    foreach ($PotenzielleBackupOrdner in $PotenzielleBackupOrdnerListe) { $KopierZielPfad = Join-Path -Path $ZielPfad -ChildPath $PotenzielleBackupOrdner.ShortName "Quelle : '$($PotenzielleBackupOrdner.FullName)' - Ziel: '$($KopierZielPfad)'" # Robocopy.exe $PotenzielleBackupOrdner.FullName $KopierZielPfad *.pdf } Die robocopy-Zeile ist noch auskommentiert. Wenn Du geprüft hast, ob die ausgegebenen Pfade zu Deinen Anforderungen passen, kannst Du das "#" vor robocopy entfernen.  ... trotzdem nochmal mit Test-Daten und Test-Pfaden testen bitte!! 
    Wenn dann mit den Test-Daten alles wie gewünscht funktioniert, brauchst Du nur noch die Variablenzuweisungen vom Anfang des Codes anpassen und es passt auch für die produktiven Daten.
     
    Doch, aber dann musst Du diesen auch angeben. Wie Martin schon erwähnte, ist $PotenzielleBackupOrdnerListe ein Array von Objekten mit Eigenschaften. Es gäbe zwar Möglichkeiten, das so zu bauen, dass sich Copy-Item die richtige Eigenschaft aus dem Object rauspickt, aber wir wollen ja sowieso robocopy benutzen. Und das kann damit eben nicht umgehen. Also müssen wir die entsprechende Eigenschaft der Objekte explizit angeben.
     
    Du hattest erwähnt, dass Du Dich näher mit dem Thema Scripting befassen möchtest. Das ist mit Sicherheit eine sehr gute Idee. Du solltest Dir ein bissl Zeit nehmen, um Dir die Grundlagen von Powershell draufzuschaffen. 
    Ein guter Einstieg, wie ich finde, ist immernoch der Video-Kurs mit Jeffrey Snover: Getting Started with Powershell. Und wenn Du was zum Nachschlagen brauchst, kannst Du Dir das hier anschauen: Windows PowerShell™ 4: TFM.  ... beides kostenlos. 
  3. BOfH_666's post in Script Problem, Suche aller PST Dateien auf Client mit anschließendem umbenennen wurde als beste Lösung markiert.   
    Das sollte nur ein Spaß sein ... ich hatte das schon so verstanden. 
    Die Aufgabe klingt danach, als würdest Du wenigstens gelegentlich davon profitieren, wenigstens Basis-Kenntnisse im Scripten zu haben. Ich kann Dir nur empfehlen, Dir die Grundlagen von Powershell anzueignen. Es würde sich auf jeden Fall für Dich lohnen.  ... und es ist nicht schwer.   
     
    Mit dem folgenden Schnipsel würdest Du z.B. auf allen lokalen Laufwerken nach *.PST-Dateien suchen und diese dann jeweils nach C:\Users kopieren. Man könnte sie natürlich auch gleich verschieben.
    $LocalDriveList = (Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}).DeviceID | ForEach-Object {"{0}\" -f $_} Get-ChildItem -Path $LocalDriveList -Filter *.pst -Recurse -Force -ErrorAction SilentlyContinue | ForEach-Object { $NewName = $Env:COMPUTERNAME + '_' + $Env:USERNAME + '_' + ($_.FullName -replace ':' -replace '\\','_') $Destination = Join-Path -Path C:\Users -ChildPath $NewName Copy-Item -Path $_.FullName -Destination $Destination } Dabei setzen sich die neuen Namen am neuen Ablageort aus dem Computernamen, dem Usernamen und dem ursprünglichen Pfad zusammen. So ist eine Zuordnung möglich und man kann sogar nachvollziehen, wo die Dateien ursprünglich gelegen haben.
  4. BOfH_666's post in Powershell foreach-object wurde als beste Lösung markiert.   
    $Array1 = @' Nummer,Produkt 1,Produkt1 2,Produkt2 3,Produkt3 4,Produkt1 5,Produkt2 6,Produkt3 7,Produkt1 8,Produkt2 9,Produkt3 '@ | ConvertFrom-Csv $array2 = $array1 | where-object { $_.produkt -match 'produkt1' } | Select-Object -Property * $array3 = $array1 | where-object { $_.produkt -match 'produkt1' -or $_.produkt -match 'produkt2' } | Select-Object -Property * $array3 | foreach-object { $_.produkt = 'TEST' } $Array1 $array2 $array3 Ergibt das das erwartete Ergebnis?
  5. BOfH_666's post in Verzeichnisname ist ungültig wurde als beste Lösung markiert.   
    Du machst es Dir aber auch schwer ...
    $CimSession = New-CimSession -ComputerName 'Print01' -Credential $Credentials Get-CimInstance -CimSession $CimSession -ClassName Win32_Printer | Select-Object -Property ShareName | Out-File C:\Drucker\Printer_List.txt Remove-CimSession -CimSession $CimSession Um die Probleme zu umgehen, dass es quasi keine einfache Möglichkeit gibt, Credentials sicher für die Benutzung in Scripten zu speichern, könntest Du einfach die Aufgabenplanung benutzen. Du erstellst eine entsprechende Aufgabe mit den nötigen Anmeldedaten und führst diese bei Bedarf aus. Dann lässt Du den ganzen Credentials-Kram im Script einfach weg.
  6. BOfH_666's post in Problem mit einem PowerShell-Objekt wurde als beste Lösung markiert.   
    Hmmm ... verstehe ich das richtig - diese beiden Zeilen
    $result = Invoke-RestMethod -Method Get -Uri $url -ContentType "application/json ; charset=utf-8" -Headers $header -DisableKeepAlive $result = $result | Select-Object -ExpandProperty attr -Property URL erzeugen also ein Objekt mit den Properties "ip","prefixLen" und "url"?   
     
    Wenn dem so ist, ist eine einfache Möglichkeit, eine weitere Property hinzuzufügen, eine sogenannte "calculated property" zu verwenden (erklärt in der Hilfe zu Select-Object Example #10).  Um bei Deinem Beispiel mit dem Zufall zu bleiben ....
    $result = $result | Select-Object -ExpandProperty attr -Property URL, @{Name = 'ID'; Expression = { get-random -Minimum 1 -Maximum 100}} Ein besseres Beispiel ist vermutlich sowas hier: 
    $result = $result | Select-Object -ExpandProperty attr -Property URL, @{Name = 'capitalizedURL'; Expression = { $($_.URL).toUpper()}} Du benutzt also einfach das aktuelle Pipeline-Element ($_), um damit in einem Scriptblock etwas anzustellen. Wenn's was komplexeres sein soll, lohnt sich's vermutlich, vorher dafür eine entsprechende Funktion zu bauen.
  7. BOfH_666's post in Powershell User anlegen; Gruppe hinzufügen wurde als beste Lösung markiert.   
    Du kannst den Befehl New-ADUser mit dem Parameter -PassThru auf rufen und das Ergebnis einer Variablen zuweisen. Mit dieser Kannst Du dann die Gruppenzuweisung durchführen. Oder Du pipe'st das Ganze einfach an Add-LocalGroupMember weiter.
     
    Bist Du sicher, dass Du Add-LocalGroupMember meinst?  Sollte das nicht besser Add-ADGroupMember sein?
  8. BOfH_666's post in Textdatei zeilenweise zerlegen wurde als beste Lösung markiert.   
    Ich habe Deine Logik nicht ganz verstanden, aber hier einfach ein paar generelle Hinweise. Wenn Deine Daten quasi CSV-Daten sind, machst Du Dir das Leben einfacher, wenn Du sie auch so behandelst.
    $SourceData = @' 0200 A510158 Hauptsatz1 0300 A510158 Nebensatz1 0300 A510158 Nebensatz2 '@ | ConvertFrom-Csv -Header STZ,Index,Auftrag -Delimiter ' ' $SourceData $SourceData | Group-Object -Property STZ $SourceData | Group-Object -Property Auftrag Ich hab jetzt einfach mal das Leerzeichen als Trenner angenommen. Wenn die Daten als "Tabelle" vorliegen, dann hast Du mit Powershell vielfältige Möglichkeiten mit den Daten zu "jonglieren". Hier oben z.B. hab ich die Daten einfach mal nach verschiedenen Attributen gruppiert ...
     
    Fragen? Fragen! 
  9. BOfH_666's post in Powershell Skript zum Löschen von Dateien die älter sind als X Tage wurde als beste Lösung markiert.   
    Wir (Powershell)-Scripter schreiben nicht so gern code doppelt und dreifach. Dafür gibt es Arrays und Schleifen. Hier mal ein Beispiel, der von Deinem Code "inspiriert" wurde. Der Muss selbstverständlich noch angepasst werden.
    $ComputerNameList = (Get-ADComputer -Filter Name -like 'COMPUTER').Name $DirectoryList = @( 'C:\xxx\xxx1' 'C:\xxx\xxx2' 'C:\xxx\xxx3' ) $10DaysBefore = (Get-Date).AddDays(-10) $30DaysBefore = (Get-Date).AddDays(-30) foreach ($ComputerName in $ComputerNameList) { if (Test-Connection -ComputerName $ComputerName -Quiet -Count 1) { Invoke-Command -ComputerName $ComputerName { foreach ($Directory in $DirectoryList) { Get-ChildItem -Path $DirectoryList -Include *.bat, *.cat, *.txt, *.ini, *.zip, *.pdf, *.log -Recurse -Force -File | Where-Object { $_.LastWriteTime -lt $10DaysBefore } | Remove-Item -Force } } } } Wie Du siehst, ist keine CodeZeile doppelt vorhanden. Das macht den Code deutlich leichter zu lesen, zu debuggen falls nötig und auch leichter zu erweitern, falls gewünscht.    Wenn Du z.B. ein weiteres Verzeichnis behandeln möchtest, fügst Du einfach ein weiteres Verzeichnis dem Array $DirectoryList hinzu.
     
    Fragen? Fragen!    
     
    Edit: Achja ... noch vergessen ... der Code dürfte auch so deutlich schneller laufen, da Du die Dateien nicht über die administrativen Freigaben löschen musst, sondern quasi lokal unterwegs bist. 
  10. BOfH_666's post in PS New-ADUser Frage zu -Name und -Samaccountname wurde als beste Lösung markiert.   
    Kurze Antwort: Das ist soweit richtig.  
  11. BOfH_666's post in Passendes Forum für WPF/XAML wurde als beste Lösung markiert.   
    Ich bin mir ziemlich sicher, dass es hier auch Kollegen gibt, die sich mit dem Thema gut auskennen. Ein dediziertes WPF/XAML Forum kenn ich nicht, aber ich weiß, dass im deutschen und auch im englischen Microsoft Technet Powershell Forum gelegentlich danach gefragt wird und üblicherweise auch hilfreiche Antworten gegeben werden. StackOverflow ist auch immer eine gute Adresse.  Bei allen Foren bitte - die Hinweise für Newbies lesen! 
  12. BOfH_666's post in Ausgabe als CSV wurde als beste Lösung markiert.   
    Wow ... vielleicht beschreibst Du uns erstmal, was Du eigentlich erreichen möchtest. Ich vermute, dass Du Dir das Leben viel zu schwer machst. Viele Sachen sind in Powershell eingebaut ... es ist ja schließlich für Admins gemacht ... nicht für Programmierer. 
     
    Ergänzung:
    Dein Code ist wahnsinning schwer zu lesen weil er schlecht formatiert und strukturiert ist. Du benutzt englische und deutsche Begriffe gemischt und Du benutzt Variablennamen in Einzahl obwohl es ein Array (eine Liste) ist. Ausserdem erzeugst Du viele Variablen, die nicht nötig sind. Deine geschachtelte Schleife würde ich z.B. so schreiben:
    foreach ($GroupName in $Groups.Name) { $GroupMemberList = Get-ADGroupMember -Identity $GroupName foreach ($Groupmember in $GroupMemberList.Name) { ## ... mehr Code } } Dann vergleichst Du Namen von Gruppenmitgliedern mit einer Zahl  ...
    If($User1 -eq "$i") ... ich vermute mal, dass diese Bedingung nicht so häufig zutrifft, oder? 
    Weiter ...
    $gefunden = "false" $defunden = "true" dafür solltest Du die eingebauten boolschen Variablen $true und $false verwenden. Damit kann Powershell gut umgehen und sie sind nicht so fehleranfällig wie String-Vergleiche und Du brauchst quasi auch keine Variablen dafür zu erzeugen.
  13. BOfH_666's post in AD-Abfrage per Powershell wurde als beste Lösung markiert.   
    Ben,
    Als Einstieg hier mal ein Code-Schnipsel, der Dir die Unterschiede der Mitglieder der Gruppen auflistet. Schau Dir die Ausgabe mal an, lies mal die Hilfe für Compare-Object und spiel ein bissl mit den Parametern ....  z.B. tauschst Du mal RefenceObject gegen DifferenceObject oder Du hängst ein -IncludeEqual an und vergleichst die Ausgabe ...
    $Gruppe1Liste = Get-ADGroupMember -Identity 'Gruppe1' $Gruppe2Liste = Get-ADGroupMember -Identity 'Gruppe2' Compare-Object -ReferenceObject $Gruppe1Liste -DifferenceObject $Gruppe2Liste -Property Name  
  14. BOfH_666's post in Zufällige Datei von einem Verzeichnis ins andere verschieben wurde als beste Lösung markiert.   
    Das einfachste wär wohl
    Get-Random ( Get-ChildItem -Path 'Pfad zu den Dateien' ) | Move-Item ...  
  15. BOfH_666's post in Anzahl Gruppenmitglieder vergleichen wurde als beste Lösung markiert.   
    Probier ma das hier:
    $groups = Get-ADGroup -Filter { Name -like "WSUS*" } $GroupList = foreach ($group in $groups) { [PSCustomObject]@{ Group = $group.name MemberCount = (Get-ADGroupMember -Identity $group.Name).count } } $GroupList | Sort-Object -Property MemberCount Wenn Du jetzt noch ein Select-Object -First 1 dran hängst, hast Du die Gruppe mit den wenigsten Mitgliedern.
  16. BOfH_666's post in Problem beim Kopieren von Ordnern mit Powershell wurde als beste Lösung markiert.   
    OK, es geht natürlich auch mit Powershell
    $Source = 'D:\Quelle' $Destination = 'D:\Ziel' Get-ChildItem -Path $Source -Directory | ForEach-Object { New-Item -Path $Destination -Name $_.Name -ItemType Directory }  
  17. BOfH_666's post in Commandlet nicht verfügbar / generelle Mindestversion von PS? wurde als beste Lösung markiert.   
    Die Verfügbarkeit einzelner cmdlets hängt nicht nur von der Powershell-Version ab, sondern auch von der Windows-Version auf der die Powershell läuft. Wenn Du Dir die Dokumentation auf den Microsoft-Seiten anschaust, hast Du immer auf der Linken Seite die Liste der cmdlets und darüber ein Suchfeld und die für die aktuell angezeigte Seite gültige Version von Windows oder Powershell. Wenn Du z.B. nach Install-Module suchst, findest Du standardmäßig erstmal die Dokumentation für Powershell Version 6. Wenn Du jetzt versuchst, die entsprechende Hilfe für die Version 3 aufzurufen, bekommst Du die Meldung, dass diese Seite nicht für die Version 3 verfügbar ist.
  18. BOfH_666's post in Powershell: ForEach in Function frühzeitig verlassen wurde als beste Lösung markiert.   
    Oooops ... ich muss zu meiner Schande gestehen, dass ich aufgrund der Fragestellung gar nicht genau hingeschaut hatte. Mit break kann man, wie man auch in der Hilfe nachlesen kann, nur aus Loops oder Swich-Statements ausbrechen (also For, While, Do oder Foreach - Loops). Foreach-Object gehört da nicht dazu ...  genau deswegen plädiere ich immer dafür in Scripten so ausführlich wie möglich zu coden und Aliasse auf jeden Fall zu vermeiden.
    Aber wie schon erwähnt ... es gibt eine andere Lösung:
    Import-Csv -Path $Path -Delimiter ';' | Select-Object -First 2 ... wirft nur die ersten beiden Zeilen der CSV-Datei aus.
     
    Davon abgesehen, bin ich auch bei tesso. Der Code sieht umständlich aus. Vielleicht lässt Du uns mal ein paar Zeilen Deiner CSV-Datei sehen (natürllich um sensible Informationen bereinigt) und erklärst kurz, was das eigentliche Ziel ist. Da kann man bestimmt was verbessern. 
     
    Edit:
    Noch vergessen - Thema Datum formatieren:
    Get-Date -Format 'yyyyMMdd'
  19. BOfH_666's post in Zeilen in PowerShell ersetzen wurde als beste Lösung markiert.   
    Wenn ich Dich nicht falsch verstanden habe, kannst Du Deinen Code deutlich einfacher gestallten
    $original_file = 'C:\Desktop\TEST.xcs' $destination_file = 'C:\Desktop\TEST+.xcs' $X_Offset = '5' # value to add to the existing value $Y_Offset = '5' # value to add to the existing value $TypeOfProcessArg5 = '3' # value to add to the existing value $ReplacedContent = Get-Content $original_file | Foreach-Object { if ($_ -match '(?:SetWorkpieceSetupPosition)\((\d+\.\d+),\s*(\d+\.\d+),\s*.*\);') { $X_Offset = ($Matches[1] -as [decimal]) + [decimal]$X_Offset $Y_Offset = ($Matches[2] -as [decimal]) + [decimal]$Y_Offset $_ -replace 'SetWorkpieceSetupPosition\(.*\);', "SetWorkpieceSetupPosition($X_Offset, $Y_Offset, 0.0, 0.0);" } elseif ($_ -match '(?<=TypeOfProcess\.Drilling,\s*"-1",\s*"-1",\s*0,\s*-1,\s+)(-*\d+)') { $TypeOfProcessArg5 = ($Matches[1] -as [int]) + [int]'3' $_ -replace '(?<=TypeOfProcess\.Drilling,\s*"-1",\s*"-1",\s*0,\s*-1,\s+)(-*\d+)', $TypeOfProcessArg5 } else { $_ } } $Ergaenzung = @' CreateNullOperation("Wegfahrschritt", 2000.0000, 0.0000, 1); ResetPneumaticHood(); ResetApproachStrategy(); ResetRetractStrategy(); '@ $ReplacedContent[0..($ReplacedContent.Length - 6)] + $Ergaenzung + $ReplacedContent[($ReplacedContent.Length - 5)..($ReplacedContent.Length)] | Set-Content -Path $destination_file -Force Was Du mit den beiden in here-strings versteckten Try-Catch-Blöcken bezwecken möchtest, habe ich nicht verstanden.
     
    Achja ... fast hätte ich's vergessen. Wenn Du hier im Forum Code postest, formatier den doch bitte auch als Code. Sonst hast im Zweifel ungewollte Zeilenumbrüche drinne und der Code ist quasi kaputt.
  20. BOfH_666's post in PS: Set-FSRMQuota mit Variable wurde als beste Lösung markiert.   
    Wenn noch keine Quota auf dem Ordner vorhanden ist, muss erstmal eine erstellt werden ... das ist hoffentlich klar ... oder?
    Bei mir funktioniert es zum Testen so:
    $TestPath = "OrdnerPfad zum Testen" [INT]$InitialQuota = Read-Host -Prompt "Initial Quota" [UINT64]$InitialQuota = [INT]$InitialQuota * 1GB New-FsrmQuota -Path $TestPath -Size $InitialQuota [INT]$NewQuota = Read-Host -Prompt "Initial Quota" [UINT64]$NewQuota = [INT]$NewQuota * 1GB Set-FSRMQuota -Path $TestPath -Size $NewQuota Remove-FsrmQuota -Path $TestPath -Confirm:$false  
  21. BOfH_666's post in Ergebnis in geschwungenen Klammern? wurde als beste Lösung markiert.   
    Die Klammern im Ergebnis deuten darauf hin, das das Ergebnis ein Array ist. Du kannst die Elemente in diesem Array auf verschiedene Weisen "extrahieren". Die einfachste dürfte sein, wenn Du das Ergebnis an  | Select-Object -ExpandProperty <PropertyName> pipe-st.
  22. BOfH_666's post in Powershell Gruppenauslese DFS wurde als beste Lösung markiert.   
    Mit dem Vergleich-Operator -contains prüfst Du ob ein einzelnes Element in einem Array von Elementen enthalten ist. Dabei müssen, bis auf die -Groß-Klein-Schreibung, die Elemente identisch sein, um einen positiven Treffer zu erzeugen.
    $a = 'Eins','zwei','DREI','vIeR','FuEnF','sechs' $b = 'drei' $a -contains $b sollte ein $true zurückliefern. Während zum Beispiel ...
    $a = 'Eins','zwei','DREI','vIeR','FuEnF','sechs' $b = ' drei' $a -contains $b ... ein $false als Ergebnis liefert. (Man beachte das zusätzliche Leerzeichen).
    Hast Du überprüft, ob Dein Trimmen, die von Dir erwarteten Resultate liefert?
    Gibt es ein Muster bei den Gruppen, die nicht erkannt werden?
     
    Unabhängig davon:
    Get-ADGroup -Filter * -Properties * Diese Zeile saugt ALLE Gruppen mit ALLEN Eigenschaften aus Deinem AD. Das dauert länger als nötig und erzeugt (wenigstens kurzzeitig) unnötig große Last auf dem AD-Controller. Empfehlenswert wäre, die Suche mittels -SearchBase auf die entsprechende OU zu begrenzen und unter -Properties nur die zusätzlichen Eigenschaften auszugeben, die wirklich im weiteren Verlauf des Scripts benötigt werden.
  23. BOfH_666's post in Unterordner von mehreren Ordnern im Stamm löschen wurde als beste Lösung markiert.   
    ... kann mich meinem Vorredner nur anschließen .... Powershell!! 
     
    Es ist sogar egal, ob der Name des Unterordners bekannt ist oder nicht. Wenn es um einen konkreten Unterordner geht, kannst Du es so machen:
    Get-ChildItem -Path C:\Users\*\Desktop Geht es um alle Unterordner, funktioniert es dann so:
    Get-ChildItem -Path C:\Users\*\* (Ich hab als Beispiel mal den Users-Ordner genommen, weil es den überall gibt)
  24. BOfH_666's post in Ausgabe in eine Datei ohne den Spaltenname exportieren wurde als beste Lösung markiert.   
    Du könntest für's exportiren Export-CSV benutzen, um die Daten dann wieder mit Import-CSV einzulesen. Dann kannst Du direkt auf die "Eigenschaft" Name zugreifen. Oder Du benutzt beim Ausgeben in die Textdatei einfach Select-Object -ExpandProperty Name. Damit landet nur der Name in der Datei.
  25. BOfH_666's post in Powershell Gruppe aus Ordnerberechtigung entfernen wurde als beste Lösung markiert.   
    Sehr oft wenn es eine Methode Get...() und Set...() gibt, gibt häufig auch Methoden wie Add....() und Remove...().
     
    Eine, wie ich finde, ziemlich gute Übersicht findest Du hier. Powershell Praxis Datei- und Verzeichnisberechtigungen.
     
    Ich persönlich finde die Berechtigungspflege mit Powershell alles andere als intuitiv und elegant gelöst. Ich verwende, wenn nötig, das bewährte Tool icacls.
×
×
  • Neu erstellen...