Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.094
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von BOfH_666

  1. Wieso "Zeitraum"? Bisher war davon die Rede, dass Du Ordnergrößen ermitteln wolltest. Genau das macht die Funktion, die ich gepostet hatte. Davon unabhängig - formatierst Du bitte Code als Code, wenn Du Code postest? Danke. Zu Deinem letzten Code-Schnipsel - Wenn Du Get-ChildItem mit dem Parameter -Recurse benutzt und dann nach der Property length sortierst, dann sortierst Du Dateien nach der Größe, und das unabhängig vom Verzeichnis, in dem die Dateien liegen. Vielleicht wirst Du Dir erstmal darüber klar, was genau Du eigentlich machen möchtest.
  2. Wenn das 'ne einmalige Aktion sein soll, würd' ich auch TreeSizeFree oder SequoiaView empfehlen. Da bekommt man die Größenverteilung sehr gut grafisch aufbereitet. Wenn das eine regelmäßige, eventuell noch automatisch laufende Aktion sein soll, könntest Du 'ne Funktion benutzen, die ich vor 'ner Weile mal für genau solche Aufgaben gebaut habe. <# .SYNOPSIS Show information about a particular folder .DESCRIPTION The function Get-FolderInfo determines the size and the count of the files and subfolders of a given directory. (To improve the performance of the function it utilizes the command line tool Robocopy ) .PARAMETER Path Complete path of the folder. .EXAMPLE PS C:\> Get-FolderInfo Without any further parameter Get-FolderInfo determines the size and the count of files and subfolders of the current directory. .EXAMPLE PS C:\> Get-FolderInfo C:\windows\system32 This command will determine the size and the count of files and subfolders of the given directory. .EXAMPLE PS C:\> Get-ChildItem C:\users -Directory | Get-FolderInfo This command will determine the size and the count of files and subfolders of the directory C:\users. .EXAMPLE PS C:\> 'C:\temp', 'C:\Windows\Temp', "$ENV:TEMP" | Get-FolderInfo This command will determine the size and the count of files and subfolders of given three temp directories. .EXAMPLE PS c:\> Get-ChildItem -Path 'a particular folder containing subfolders' -Directory | Get-FolderInfo | Sort-Object -Property SubFolders,FileCount,Bytes -Descending This command will determine the size and the count of files and subfolders of 'a particular folder containing subfolders' and sort it descanding for SubFolder, FileCount and Bytes. .INPUTS System.IO.DirectoryInfo .OUTPUTS System.String System.Int64 .NOTES Author: O.Soyk Date: 20150604 .LINK http://social.technet.microsoft.com/wiki/contents/articles/1073.robocopy-and-a-few-examples.aspx .LINK https://technet.microsoft.com/en-us/library/cc733145(v=ws.10).aspx #> Function Get-FolderInfo { [CmdletBinding()] [OutputType([System.String])] param( [Parameter(ValueFromPipeline = $true, Position = 0, ValueFromPipelineByPropertyName = $true)] [ValidateNotNullOrEmpty()] [System.IO.DirectoryInfo[]] $Path = (Get-Location).Path ) process { Foreach ($Item in $Path) { $Result = robocopy $($Item.FullName) $([System.IO.Path]::GetTempPath()) /E /L /R:0 /NFL /NDL /NC /BYTES /NP /NJH /XJ /XJD /XJF Write-Verbose "Result:`n'$($Result)'" $Result -match '(FEHLER|ERROR)\s5\s\(' | Out-Null If ($Matches) { Write-Debug "`nFolder: '$($Item)' - 'Access denied'`n" } $Result | Where-Object { $_ -match '(Dateien|Files\s)\:\s+(\d+)\s' } | Out-Null Write-Verbose "Matches:`n '$($Matches)'" $FileCount = $Matches[2] $Result | Where-Object { $_ -match '(Verzeich\.|Dirs\s)\:\s+(\d+)\s' } | Out-Null $SubfolderCount = $Matches[2] $Size = (($Result | Where-Object { $_ -match 'Bytes' }).trim() -replace '\s+', ' ').split(' ')[2] [PSCustomObject]@{ Path = $Item.FullName Subfolders = [INT64]$SubfolderCount FileCount = [INT64]$FileCount Bytes = [Int64]$Size } } } } Hilfe und Beispiele sind dabei ... versuch ma!
  3. Das meinte ich natürlich eher in Richtung des OP: ... das interpretierte ich so, dass er eher ein Scripting-Anfänger ist. ... und dafür fand ich das Funktions-Feuerwerk von Jan ein bissl mit Kanonen auf Spatzen geschossen. Ausserdem bin ich ein großer Fan des KISS-Prinzips.
  4. Naja, nicht wirklich gleichzeitig ... aber nacheinander.
  5. Find ich gut .... bevor ich ein Script, welches ich vermutlich nicht wirklich verstehe, auf meine Daten loslassen ... und es sowieso nur eine einmalige Aktion sein soll ... dann doch lieber so.
  6. Du kannst auch jederzeit <F1> drücken und den Languagemode auf Powershell umschalten, wenn das bei Dir nicht der Standard-Languagemode ist.
  7. @daabm ich hätte es nicht besser erklären können.
  8. ... nur mal als Denkanstoss: SYSTEM ist ein lokaler Account eines einzelnen Computers. Wenn ein anderer Computer mit diesem Account Zugriff erhalten soll, müsstest Du diesen explizit angeben also auf Computer1 müsstest Du dann Computer2\SYSTEM berechtigen, damit er entsprechenden Zugriff erhält. Deshalb ist es keine gute Idee, den Account SYSTEM für irgendwelche explizit berechtigte Resourcen zu benutzen.
  9. Nu sei ma nich so! ... ich hole gelegentlich auch noch mal mein altes NES aus'm Keller und vertreibe mir ein bissl die Zeit ...
  10. Hmmm ... normalerweise liefern wir hier keine "schlüsselfertigen" Lösung frei Haus. Wir erwarten ein gewisses Maß an Eigentinitiative und Mitarbeit - es ist schließlich ein Forum für IT-Profis. Die Schnipsel oben waren nur dazu gedacht, Dir zu zeigen, dass Powershell alles andere als schwierig ist. Es liegt meiner Meinung nach aber jenseits der Aufgabe dieses Forums, Dir iterativ eine fertige Lösung für Dein Problem zusammenzubasteln. Ich empfehle Dir dingend, Dir die Grundlagen von Powershell anzueignen. Solltest Du vorhaben, Dich noch eine Weile im Windows-Server-Umfeld zu bewegen, lohnt sich das ganz sicher AUF JEDEN FALL. Das geht mit einem guten Buch oder einem online Tutorial oder sogar mit ein paar gut gewählten Videos ganz einfach. Dabei lernt man auch, wie und wo man am besten Hilfe bekommt - die ist bei Powershell quasi eingebaut. Für die Erweiterung des Codes mit den von Dir gewünschten Funktionen solltest Du Dir die Hilfe für die cmdlets Compress-Archive und Get-ChildItem näher ansehen. Du solltest Dir jeweils die komplette Hilfe inklusive der Beispiele ansehen, um zu lernen, wie man sie benutzt. Wenn Du Code hast, der aber eventuell nicht das tut, was Du erwartest oder der Fehlermeldung produziert, die Du nicht selbst beseitigt bekommst, kannst Du den hier gern posten und wir werden versuchen Dir zu helfen.
  11. Das kommt drauf an ... es kann aber nicht schaden, wenn Du in der Kommandozeile die Option -ExecutionPolicy Bypass mitgibst. Die anderen möglichen/nötigen Optionen kannst Du mit Powershell /? erfahren. Ach ja ... wie immer gilt natürlich, dass Du Scripte nicht an Deinen "produktiven Daten" testen solltest. Besonders, wenn Du sie nicht 100-ig verstehst.
  12. Na dann wollen wir Dir das mal ausnahmsweise ein bissl schmackhaft machen. In Powershell würde Dein erstest Script im einfachsten Fall vielleicht so aussehen können: $TimeStamp = Get-Date -Format 'yyyyMMdd' Copy-Item -Path "Server\Folder to be backed up" -Destination "c:\minecraft\backups\server_backup_$TimeStamp" Das erzeugt eine Kopie eines Ordners in einem anderen Ordner mit einem Zeitstempel statt einem Zähler. Das sollte jemand mit rudimentären English-Kenntnissen eigentlich ziemlich verständlich finden. Das zweite Script zum Aufräumen ist auch nicht schwer: Get-ChildItem -Path "c:\minecraft\backups" -Directory | Sort-Object -Property LastWriteTime -Descending | Select-Object -Skip 10 | Remove-Item -Recurse -Force Hier wird die mächtige Powershell Pipeline genutzt, um alle Unterverzeichnisse des Backup-Verzeichnisses zu ermitteln, diese nach letztem Zugriff absteigend zu sortieren und davon die ersten 10 zu überspringen. Der Rest wird gelöscht. Ich finde das deutlich einfacher zu lesen als die cryptischen cmd Befehle.
  13. Wir haben Ende 2019 ... wie lange wollen wir denn noch diese fruchtlose Diskussion führen? In weniger als 3 Monaten läuft der Support für Windows 7 aus. Und es wird wohl wenige Enterprise-Kunden geben, die jetzt noch auf Windows 8.1 migrieren. Also kommt nur Windows 10 in Frage - und das heißt Powershell 5.1.
  14. Kurze Antwort: Das ist soweit richtig.
  15. Sollte einfacher gehen ... (Get-Item -Path 'Voller Pfad zum Symlink' ).Target Probier ma!
  16. 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!
  17. Good catch ... ... sind die Laufwerkzuordnungen auch Registry-basiert? ... hab grad nix zum Nachgucken ... ... das fällt dann aber nicht mehr in die Kategorie "einfach" ... jedenfalls nach meiner Definition. 'n vernünftiges DNS ist da schon sehr hilfreich ...
  18. Ändern sich die Freigaben denn wieder? Warum nicht einmal einrichten und gut? OK, die Einrichtung ist dann einmal aufwändiger aber meines Wissens nach, gibt es keine einfache Möglichkeit, Gruppenrichtlinien per Script zu generieren.
  19. Per Gruppenrichtlinie ... klar ... dafür sind sie ja da. Entweder die organisierst die Zuordnung über die entsprechende OU oder über entsprechende Gruppen. Das ist dann aber kein Scripting-Thema mehr.
  20. Vermutlich hast Du aufgrund Deiner Erfahrung hier gleich zwischen den Zeilen gelesen ... ... dieses Gen fehlt mir wohl ...
  21. Wow! Das liest Du aus den Angaben oben heraus? Ich hatte nicht mal mitbekommen, dass es um User-Anlage ging. Ich dachte, es geht um's Auslesen aus dem AD.
  22. Wenn Du eine CSV-Datei einlesen möchtest, solltest Du das entsprechende cmdlet benutzen. Ich gehe mal davon aus, dass Deine CSV-Datei eine richtige CSV-Datei ist und einen Header hat, der mit sAMAccoutName benannt ist. Dann könnte Dein Code so aussehen: $UserList = Import-Csv -Path 'C:\Temp\SammelAccounts_Dispo.csv' $Result = foreach ($User in $UserList) { Get-ADUser -Identity $User.sAMAccountName -Properties whenChanged } $Result | Select-Object -Property sAMAccountName, whenChanged | Export-Csv -Path 'C:\Temp\USERS-ATTRIBUTES.csv' Sollte Deine CSV-Datei einen anderen Delimiter benutzen als das Komma, musst Du das natürlich noch ergänzen, z.B. -Delimiter ';' ... macht sich für deutsche Excel-Versionen immer gut, weil die dann das CSV gleich als Tabelle anzeigen und nicht erstmal als "Palin-Text". Ergänzung: Achso ... den Nachsatz mit der OU habe ich nicht verstanden. welchen Bezug zu welcher OU? Davon steht ja bisher gar nix in Deinem Code.
  23. 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.
  24. Wenn Du wieder an Land gepaddelt bist, fragst Du Deinen Chef nach einem "Schwimmkurs"!!
  25. Das macht Powershell für Dich, wenn Du nett drum bittest ... $NeuesArray = Compare-Object -ReferenceObject $Gruppe1Liste -DifferenceObject $Gruppe2Liste -Property Name | Where-Object {$_.SideIndicator -eq '=>'} Ich würde Dir empfehlen, Dir die Grundlagen von Powershell strukturiert anzueignen. Vielelicht mit einem guten Buch oder mit einem Online-Video-Tutorial oder wenn Dir Dein Chef ein Training bezahlt, am besten das ... Das kommentiere ich jetzt mal gar nicht ... wenn's funktioniert, ist das ja schön.
×
×
  • Neu erstellen...