Ich muss die folgende Ausgabe von einem dirquota au l
Befehl auf einem Server 2008 R2, iterieren Sie durch jede Zeile, fügen Sie die relevanten Daten für jeden Auto-Quota-Pfad zu seinem eigenen einzigartigen Objekt, dann alle hinzufügen der Objekte zu einem Array. Siehe Beispiel unten:Schleife durch Absätze, erstellen Sie einzelne Objekte
Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\E\Dir\SubDir \\SERVER\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning (80%): Event Log Limit (100%): Event Log
Nehmen wir zum Beispiel jedes Auto Quote, und ich möchte die „automatisch zugewiesenen Kontingents Pfad:“ isolieren Teil, das ich weiß, dass ich mit RegEx tun kann und Select-String
, hinzufügen, dass auf ein Objekt unter der Eigenschaft "Name" isolieren Sie dann den "E: \ Dir \ Subdir" Teil und fügen Sie das zu demselben Objekt unter der Eigenschaft "Value" hinzu. Ich möchte dann die Daten von Source Template und Limit sammeln und diese zum gleichen Objekt hinzufügen. Sobald die leere Zeile erreicht ist, fügen Sie das gerade erstellte Objekt zu einem Array hinzu, leeren Sie die Objektvariable und beginnen Sie, den nächsten automatischen Kontingentabschnitt zu durchlaufen, wobei Sie denselben Prozess durchlaufen.
Hier ist der Code, den ich mit so weit bin arbeiten:
$AutoQuota = @()
$AutoQuota = dirquota au l
$AutoQuota = $AutoQuota[2..$AutoQuota.Count]
$obj = New-Object PSObject
$objArr = @()
$AutoQuota | % {
switch -regex ($_) {
"^Auto.*" {
$Name = $_ | Select-String -Pattern "^Auto*: " |
%{$_.Matches} | %{$_.Value}
$Value = $_ | Select-String -Pattern "\w:*" |
%{$_.Matches} | %{$_.Value}
$obj | Add-Member -MemberType NoteProperty -Name $Name -Value $Value
}
"^\s*$" {
$objArr += $obj
$obj = @()
}
}
}
Es wird offensichtlich auf die switch
Aussage mehr, ich will nur die erste Zeile erhalten wie erwartet funktioniert, dann werde ich hinzufügen der Rest. Wenn es einen leichteren/besseren Weg gibt, bin ich offen für Vorschläge.
Sieht so aus, als ob dies mich auf den richtigen Weg bringt. Das einzige Problem ist, dass ich nur ein Ergebnis aus dem ersten Datenblock bekomme. Ich renne in '(dirquota au l | Aus-String) -split '\ n \ n'' zum' Where-Object', ist das korrekt? –
@AshHousewares Ja. Die Zeilenumbrüche können jedoch auch als CR-LF codiert sein, also prüfe auch '-split' \ r \ n \ r \ n''. Überprüfen Sie außerdem, ob die Leerzeilen in der erfassten Befehlsausgabe beibehalten werden und dass die Leerzeilen keine anderen Leerzeichen enthalten. –
OK, so dass die '-Split \ n \ n' die Zeichenfolge nicht teilt, da die Ausgabe nur 1 Element enthält, also stimmt sie mit der ersten überein und das ist es. Wenn ich auf eine einzelne neue Zeile aufteile, bekomme ich 53 Elemente, wie erwartet, weil 53 Zeilen ausgegeben werden. Ich vermute, dass das Aufteilen auf 2 neue Zeilen aus irgendeinem Grund nicht funktioniert, vielleicht aufgrund des Formats der String-Ausgabe? –