Powershell: Verzeichnisinhalt prüfen
Hallo Liebe Administrator Gemeinde,
ich möchte gern ein Script welches prüft ob in einem Ordner "C:\Test" min. 2 Datein enthalten sind.
Sollte das nicht der Fall sein, soll 10 Sekunden gewartet werden und erneut auf den Inhalt von 2 Datein geprüft werden.
Dies soll min. 3x geschehen, bevor dann das Script abgebrochen wird oder bei Erfolg weiteren Code ausführt.
Ich weiß, dass ich die Zeile mit beginne, aber wie sage ich, dass auf 2 Datein geprüft wird und wie sage ich, dass es eine 3 mal zu wiederholende Schleife ist? Ich habe leider noch keine Erfahrungen mit Schleifen in PS.
Gruß
Tristan
ich möchte gern ein Script welches prüft ob in einem Ordner "C:\Test" min. 2 Datein enthalten sind.
Sollte das nicht der Fall sein, soll 10 Sekunden gewartet werden und erneut auf den Inhalt von 2 Datein geprüft werden.
Dies soll min. 3x geschehen, bevor dann das Script abgebrochen wird oder bei Erfolg weiteren Code ausführt.
Ich weiß, dass ich die Zeile mit
if Test-Path (!(C:\Test\
Gruß
Tristan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 666951
Url: https://administrator.de/contentid/666951
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Moin Tristan,
Test-Path ist hier das falsche Mittel. Wenn ich dich richtig verstanden habe, willst du ja nicht prüfen ob der Ordner existiert - sondern nur, ob er weniger als 2 Dateien enthält.
Das ginge so:
Gruß Thomas
Test-Path ist hier das falsche Mittel. Wenn ich dich richtig verstanden habe, willst du ja nicht prüfen ob der Ordner existiert - sondern nur, ob er weniger als 2 Dateien enthält.
Das ginge so:
$Dir = 'C:\Test'
$Try = 0
while ((Get-ChildItem -File $Dir).Count -lt 2 -and $Try -lt 3) {
$Try++
write-host "Versuch ${Try}: Ordner enthält weniger als 2 Dateien. "
sleep 10
}
Gruß Thomas
Guten Morgen Tristan,
um das ganze 3 mal zu prüfen würde ich ne For-Schleife nehmen.
$env:SystemDrive löst auf C: auf sofern dein System laufwerk auf C: ist
um das ganze 3 mal zu prüfen würde ich ne For-Schleife nehmen.
for ($i = 0; $i -lt 3; $i++) {
If (!(Test-Path "$env:SystemDrive\Test\Datei1.txt") -or !(Test-Path "$env:SystemDrive\Test\Datei2.txt")) {
Write-Host "Mindestens eine der Dateien existiert nicht"
}
}
$env:SystemDrive löst auf C: auf sofern dein System laufwerk auf C: ist
Guten Morgen
ich würde das anders beginnen...
Zuerst baust du eine Schleife, die 3x läuft:
Hier den PowerShell Operator -eq verwenden.
Dann würde ich den Inhalt des Ordners auslesen und direkt die Anzahl mit .Count zählen lassen:
Zum Schluss musst du Prüfen, ob es mehr als 2 Dateien sind:
Komplett sollte das dann (ungetestet) so aussehen:
Gruß joehuaba
EDIT:
Achja, du wolltest noch 10 Sekunden warten. Eine Pause bekommst du noch selbst hin:
https://www.itnator.net/eine-pause-in-powershell-script-verwenden/
ich würde das anders beginnen...
Zuerst baust du eine Schleife, die 3x läuft:
For ($i = 1; $i -eq 3; $i++) {
....
}
Dann würde ich den Inhalt des Ordners auslesen und direkt die Anzahl mit .Count zählen lassen:
$myFiles = (Get-ChildItem -File -Path "C:\Test" | measure-object).Count
Zum Schluss musst du Prüfen, ob es mehr als 2 Dateien sind:
if($myFiles -ge 2){
....deincode...
}
Komplett sollte das dann (ungetestet) so aussehen:
# schleife 3x laufen lassen
For ($i = 1; $i -eq 3; $i++) {
# dateien zaehlen
$myFiles = (Get-ChildItem -File -Path "C:\Test" | measure-object).Count
# wenn dateien-anzahl groesser oder gleich 2, dann...
if($myFiles -ge 2){
....deincode...
}
}
Gruß joehuaba
EDIT:
Achja, du wolltest noch 10 Sekunden warten. Eine Pause bekommst du noch selbst hin:
https://www.itnator.net/eine-pause-in-powershell-script-verwenden/
while ((Get-ChildItem -File $Dir).Count -lt 2 -and $Try -lt 3) {
hier aufpassen, weil der code erst mal nur prüft ob die dateien NICHt da sind. Sind sie da, geht er aus der schleife und behauptet somit erst mal das die Dateien da sind. Er springt aber auch aus der Schleife, wenn die $Try grösser 2 ist und behauptet damit auch das die Bedingung wahr wäre. Ist ja aber nicht so. Die Dateien sind NICHT da. Es wurde nur zu oft versucht
Zitat von @SeaStorm:
Er springt aber auch aus der Schleife, wenn die $Try grösser 2 ist und behauptet damit auch das die Bedingung wahr wäre. Ist ja aber nicht so. Die Dateien sind NICHT da. Es wurde nur zu oft versucht
Er springt aber auch aus der Schleife, wenn die $Try grösser 2 ist und behauptet damit auch das die Bedingung wahr wäre. Ist ja aber nicht so. Die Dateien sind NICHT da. Es wurde nur zu oft versucht
Ohne diese Frage beantwortet zu wissen, kann man auch noch nicht sagen, wann und wo der Return erfolgen soll.
Ups, hatte
bevor dann das Script abgebrochen wird oder bei Erfolg weiteren Code ausführt.
glatt überlesen. Dann einfach unter der while Schleife noch ergänzen:if ((Get-Childitem -File $Dir).Count -lt 2) {Return}
Gruß Thomas
Zitat von @Hacktrist:
O.k.
also so:
Die Stelle ist richtig, habe das If-Statement aber nochmal angepasst. $try könnte ja auch größer 2 sein, wenn nach dem 3. Versuch min. 2 Dateien da sind. Daher so:O.k.
also so:
> $Dir = '\\sidk-vsaode2\Raw2Flat out\14\0687\'
> $Try = 0
> while ((Get-ChildItem -File $Dir).Count -lt 2 -and $Try -lt 3) {
> $Try++
> write-host "Versuch ${Try}: Ordner enthält weniger als 2 Dateien. Nächste Prüfung in 10 Sekunden "
> sleep 10
> }
> if ($try -gt 2) {Return}
if ((Get-Childitem -File $Dir).Count -lt 2) {Return}