über diese Frage kam, wenn sie versuchen, wie zu arbeiten, mir die gleiche Sache zu tun.
Was kam ich mit, wie eine Lösung war wie folgt:
$Filtered = $Table|Select-String -Pattern $ExcludeStrings -NotMatch -SimpleMatch
$FilteredArray = @()
$Filtered.Line | foreach {$split = $_ -split ';';
$tidied = $split -replace '@|{|}|^ ';
$obj = New-Object System.Object
$tidied|foreach {$obj|Add-Member -MemberType NoteProperty -Name ($_.split('=')[0]) -Value ($_.split('=')[1])
}
$FilteredArray += $obj
}
Die erste Zeile nur mir zeigt das Array Filtern, die ich über Import-CSV
bekam nur die Ergebnisse zu erhalten ich wollte.
Leider ist dies lässt mich mit einem Match Array, wobei jedes Array im folgenden Format sein:
@{Column1=Value1; Column2=Value2; Column3=Value3;}
Diese exportiert nicht schön an alle aus, um CSV zurück, wie es ist.
Also entschied ich mich, ein neues Ausgabe-Array ($FilteredArray
) zu erstellen.
Ich leitete dann die Line
Eigenschaft des Matchinfo-Arrays von Select-String
in eine foreach-Schleife, und für jede Zeile, ich es auf das Semikolon aufgeteilt, dann entferne ich die @ {} Zeichen und alle führenden Leerzeichen.
Ich erstelle dann eine neue System.Object
, dann piped die aufgeräumte Ausgabe in eine andere foreach-Schleife, neue NoteProperty im Obj, Benennung von der aktuellen Zeile in der aufgeräumten Ausgabe bis zum = Zeichen, und der Wert ist der Rest Text nach dem Zeichen =.
Was ich am Ende mit:
PS C:\Users\Graham> $obj
Column1 : Value1
Column2 : Value2
Column3 : Value3
Und das gefilterte Array wie folgt aussieht:
PS C:\Users\Graham> $FilteredArray[0..3]|Format-table
Column1 Column2 Column2
------- ------- -------
Value1 Value2 Value3
Value1 Value2 Value3
Value1 Value2 Value3
Dies ist eigentlich wirklich gut funktioniert. Ich hatte vorher ähnliche Befehle, habe aber nicht -Enc ascii angegeben, damit es mir unerwünschte Ergebnisse gibt. Der zweite Teil muss die neue data.csv-Datei mit einer anderen csv-Liste vergleichen, die Ausschlüsse aufweist, die herausgefiltert werden müssen. Der obige Befehl würde wahrscheinlich funktionieren, vielleicht kann ich einfach den Inhalt der Ausschlußliste in ein Array holen und 'Nicht installiert' die $ Ausschlüsse ändern? – user2284702
Wenn Sie mit Import-Csv beide CSV-Dateien abrufen, werden Sie mit einem Array von Objekten enden, wobei jedes Objekt Eigenschaften aufweist, die den Feldern in der CSV-Datei entsprechen. Sie könnten also etwas wie '$ importierteCsv1 | Wobei {$ csv1Field = $ _. Feld; ($ importedCsv2 | Wobei {$ _. FilterField -eq $ csv1Field}). Count -eq 0} ' –
$ csv | Select-String -NotMatch $ Ausschlüsse | Out-File $ hosts -Enc ascii entfernt alle Ausschlüsse aus der Datei data.csv, hinterlässt jedoch bei jeder Streichung eine leere Zeile oben. Irgendwelche Ideen? – user2284702