2017-08-02 2 views
1

Ich möchte 3 Wiederholungen zum folgenden Code hinzufügen, der ein Verzeichnis von einem USB auf eine Maschine kopiert und nach der Kopie prüft, ob zwei Verzeichnisse gleich sind. Wenn sie nach 3 Wiederholungen nicht gleich sind, möchte ich den vorherigen Konfigurationsordner wiederherstellen.Powershell-Schleife erneut versuchen

Ich habe Probleme mit, wie die Wiederholungen zu implementieren

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

if (Test-Path "D:\Upgrade\CONFIG") { $src_dir = "D:\Upgrade\CONFIG" } 
elseif (Test-Path "F:\Upgrade\CONFIG") { $src_dir = "F:\Upgrade\CONFIG" } 
elseif (Test-Path "G:\Upgrade\CONFIG") { $src_dir = "G:\Upgrade\CONFIG" } 
else { $src_dir = "E:\Upgrade\CONFIG" } 

$dest_dir = "C:\TEST\CONFIG" 
$date_str = Get-Date -UFormat %d%b%Y 
$time_str = Get-Date -UFormat %H%M%S 
$archive_dir = "$dest_dir" + "." + "$date_str" + "." + "$time_str" 

if (Test-Path $src_dir) { Ren "$dest_dir" "$archive_dir" -verbose; Copy-Item "$src_dir" "$dest_dir" -recurse -verbose } 
else { [System.Windows.Forms.MessageBox]::Show("$src_dir found, could not complete !!!") } 

$currentConfig = Get-ChildItem -Recurse $dest_dir | Where-Object { -not $_.PsIsContainer } 


# NEED HELP WITH ADDING RETRIES HERE 


$currentConfig | ForEach-Object { 

# Check if the file, from $dest_dir, exists with the same path under $src_dir 
    If (Test-Path ($_.FullName.Replace($dest_dir, $src_dir))) { 

     # Compare the contents of the two files... 
     If (Compare-Object (Get-Content $_.FullName) (Get-Content $_.FullName.Replace($dest_dir, $src_dir))) { 

      # List the paths of the files containing diffs 
      $_.FullName 
      $_.FullName.Replace($dest_dir, $src_dir) 

     } 
    } 
} 

Antwort

0

etwas mehr, als zu versuchen, wenn Sie eine Schleife verwenden müssen. Entweder eine While-Schleife oder eine Do While-Schleife. Im Grunde würden Sie eine Variable mit einem Zahlenwert erstellen und von dieser Zahl aus rückwärts zählen. Wenn am Ende alle drei Versuche getroffen wurden, kann das Skript die Konfiguration zurücksetzen.

$maxTries = 3 
    While($maxTries -gt 0){ 
     # do work here 
     # if process fails subtract 1 from maxTries 
     # if process succeeds break out of looop 
    } 
+0

so in meinem Beispiel würde ich den Zähler dekrementieren, wenn die Verzeichnisse nicht gleich sind, und brechen, wenn sie gleich sind. Ist es das oder brauche ich eine andere if-Anweisung? – user1984300

+0

Sie würden im Grunde die Schleife laufen lassen, tun Sie die Arbeit, die Sie tun möchten, und wenn es nicht richtig gemacht wird, reduzieren Sie die Zahl um 1. Wenn die Arbeit zu Ihrer Zufriedenheit abgeschlossen ist, können Sie Break früher brechen . –

Verwandte Themen