Powershell - Alle Ordner eines Tages zählen und ausgeben
Hallo Experten,
ich möchte mir ein Script bauen was überprüft wie viele Ordner in einem gewissen Verzeichnis am Vortag erstellt wurden.
Das Ergebnis soll in eine Variable geschrieben werden.
Ablauf:
Das Script wird automatisiert ausgeführt um z.B. 17.00 Uhr. (Windows Task Scheduler).
Es prüft alle Ordner die im Zielverzeichnis am Vortag erstellt wurden. Wenn das z.B. 30 Ordner sind, wird in die Variable 30 geschrieben.
Das Creation Date kann als Größe heran gezogen werden.
Eine Besonderheit: Wenn das Script an einem Montag ausgeführt wird, soll es die Summe aller Ordner die in der vorherigen Woche erstellt wurden in eine Variable schreiben.
Die Variable gebe ich dann aus und schreibe sie weg.
Mein bisheriger Versuch:
Freue mich über Hilfe
ich möchte mir ein Script bauen was überprüft wie viele Ordner in einem gewissen Verzeichnis am Vortag erstellt wurden.
Das Ergebnis soll in eine Variable geschrieben werden.
Ablauf:
Das Script wird automatisiert ausgeführt um z.B. 17.00 Uhr. (Windows Task Scheduler).
Es prüft alle Ordner die im Zielverzeichnis am Vortag erstellt wurden. Wenn das z.B. 30 Ordner sind, wird in die Variable 30 geschrieben.
Das Creation Date kann als Größe heran gezogen werden.
Eine Besonderheit: Wenn das Script an einem Montag ausgeführt wird, soll es die Summe aller Ordner die in der vorherigen Woche erstellt wurden in eine Variable schreiben.
Die Variable gebe ich dann aus und schreibe sie weg.
Mein bisheriger Versuch:
[String] $folder="C:\Zielpfad";
Get-ChildItem -Path $folder | SELECT Attributes, Name, CreationTime | Format-Table -AutoSize;
Freue mich über Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 595941
Url: https://administrator.de/contentid/595941
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
18 Kommentare
Neuester Kommentar
Hi
ist eigentlich das gleiche in Grün.
Ich habs mal mit -Recurse gemacht, damit auch die Unterordner entsprechend gezählt werden
ist eigentlich das gleiche in Grün.
Ich habs mal mit -Recurse gemacht, damit auch die Unterordner entsprechend gezählt werden
[String] $folder="C:\temp"
if ((Get-Date).DayOfWeek.value__ -gt 1){
$date = (Get-Date).AddDays(0).Date
$folders = Get-ChildItem -Recurse -Path $folder -Directory | where {$_.CreationTime.Date -eq $date }
$folders | SELECT Attributes, Name, CreationTime | Format-Table -AutoSize
Write-Host Count: $folders.Count
}
else {
$beginlastweek = (Get-Date).AddDays(-7).Date
$endlastweek = (Get-Date).Date #Anpassen, falls Ende der Woche Freitag sein soll und nicht Sonntag
$LastWeekCount = (Get-ChildItem -Recurse -Path $folder -Directory | where {$_.CreationTime -gt $beginlastweek -and $_.CreationTime -lt $endlastweek }).Count
}
Zitat von @Lupora:
Hab rausgefunden das ich mit
den Vortrag habe.
Jetzt bräuchte ich noch irgendwie ne Möglichkeit zu prüfen "überall wo Creationdate = Vortagsdatum zähle 1 hoch".
Evtl. noch ein Problem: In dem Zielverzeichnis gibt es circa 4000 bis 7000 Unterordner die zu prüfen wären.
Hab rausgefunden das ich mit
(get-date).AddDays(-1)
Jetzt bräuchte ich noch irgendwie ne Möglichkeit zu prüfen "überall wo Creationdate = Vortagsdatum zähle 1 hoch".
Evtl. noch ein Problem: In dem Zielverzeichnis gibt es circa 4000 bis 7000 Unterordner die zu prüfen wären.
An schlechten Tagen als Einzeiler:
$Anzahl = ((Get-Date).DayOfWeek.value__ -eq 1) ? ((Get-ChildItem -Path $folder -Directory -Recurse | where {($_.CreationTine.Date -ge (Get-Date).AddDays(-7).Date) -and ($_.CreationTime.Date -lt (Get-Date).Date)} | Measure-Object).Count) : ((Get-ChildItem -Path $folder -Directory | where {$_.CreationTime.Date -eq (Get-Date).AddDays(-1).Date} | Measure-Object).Count)
Die Thematik mit "nur Montags soll" ist erstmal egal.
das ist ja schon fertig...Aber wie bekomme ich alle Ordner des Vormonats und Vorwoche hin? Das bisherige Script geht davon aus das es vom aktuellen Tag einfach 7 abzieht.
Ja, weil der Part ja nur an einem Montag läuftAber ich hätte gerne das er unabhängig einfach prüft welche Ordner wurden letzte Woche erstellt. Egal ob Montag oder Mittwoch ist.
$MondayLastWeek = ((get-date).Date).AddDays(-((get-date).Date).DayOfWeek.value__ -6)
$SundayLastWeek = ((get-date).Date).AddDays(-((get-date).Date).DayOfWeek.value__ +1).AddMilliseconds(-1)
$FirstDayLastMonth = Get-Date ((get-date).Date).AddMonths(-1) -Day 1
$LastDayLastMonth = (Get-Date ((get-date).Date) -Day 1).AddMilliseconds(-1)
Damit solltest du den Rest anpassen können
A parameter cannot be found that matches parameter name 'Directory'
Kann es sein das du beim Start der Task die powershell.exe mit dem kompletten Pfad angibst und da eine alte Powershellversion nimmst?Wenn der Befehl den Parameter nicht kennt, kann das eigentlich nur bedeuten das du da eine alte PS Version hast.
Gib mal im Script
$PSVersionTable.PSVersion
Zitat von @Lupora:
Ich möchte in einer Variable alle Ordner ausgeben (all Folders) die jemals erstellt wurden einschließlich gestern. Nur die von heute nicht.
Bisher ist meine Formel:
Die beinhaltet aber auch die Ordner von heute. Ich möchte alle Ordner zählen außer die von heute.
Wie müsste ich das anpassen?
Ich möchte in einer Variable alle Ordner ausgeben (all Folders) die jemals erstellt wurden einschließlich gestern. Nur die von heute nicht.
Bisher ist meine Formel:
$allFolders = (get-childitem -Recurse -Path $folder -Directory | where-object { $_.PSIsContainer }).Count
Die beinhaltet aber auch die Ordner von heute. Ich möchte alle Ordner zählen außer die von heute.
Wie müsste ich das anpassen?
Bidde
$allFolderCountWithoutToday = (get-childitem -Recurse -Path $folder -Directory | ?{$_.CreationTime -lt (get-date).Date}).Count
$allFolderCountWithoutToday
Btw. das "PSIsContainer" ist doppelt gemoppelt und überflüssig, das Ausfiltern macht schon der Parameter -Directory von Get-ChildItem.