Jump to content

Powershell: Inhalt ersetzen in CSV


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Guten Morgen,

 

ich benötige einen kleinen Denkanstoß.

Ein Skript zieht via PowerShell eine Benutzerliste aus dem Verzeichnisdienst und erzeugt eine CSV-Datei.

 

Jetzt möchte ich über eine Vergleichstabelle Inhalte in der CSV-Datei anpassen (z.B. PagerNo 1 = Bremen, PagerNo2 = Hamburg, PagerNo3 = Düsseldorf).

 

Habt ihr eine schnelle Idee, wie ich das am geschicktesten durchführe?

Geschrieben

Bin schon weiter gekommen,

hab dennoch ein Problem. Siehe Skript-Snippet unten.

 

Er ersetzt den  Inhalt einfach nicht, obwohl in der Spalte 'sn' die Nachnamen entsprechend geführt werden. Hab ich einen Denkfehler?

 

$IT_Gruppe = @(
            'Meyer',
            'Schulze')

 

(Get-Content $original_file) | Foreach-Object {
    if($_.sn -contains $IT_Gruppe)
        {$_.company = 'Test'}
    } | Set-Content $original_file

Geschrieben (bearbeitet)

Ah, okay.

Leider erstellt er weiterhin eine 0kb CSV.

 

Import-Csv -Path $original_file -Delimiter ";" -Encoding UTF8 | ForEach-Object {
    if($_.sn -match $IT_Gruppe)
        {$_.company = 'Test'}
    } | Export-CSv $destination_file -NoTypeInformation

 

bearbeitet von MurdocX
Code in ein Codeblock eingefügt.
Geschrieben (bearbeitet)

Kannst Du bitte den Code hier im Forum als Code formatieren?

 

Du musst die Werte nicht nur anpassen, Du musst sie auch einmal ausgeben, damit sie in der Pipeline landen können. Wenn Du die anderen Werte auch in der Ausgabe haben willst, musst Du auch noch einen else-Zweig hinzufügen. ;-) 

 

Also quasi sowas hier ... 

 

Import-Csv -Path $original_file -Delimiter ";" -Encoding UTF8 | 
ForEach-Object {
    if ($_.sn -match $IT_Gruppe) {
        $_.company = 'Test'
        $_
    }
    else {
        $_
    }
} | 
Export-CSv $destination_file -NoTypeInformation

 

bearbeitet von BOfH_666
Geschrieben (bearbeitet)

Ahh, jetzt geht es. :)

Danke. Allerdings klappt es nicht mit der Variablenliste, sondern nur beim Vergleichen, wenn ich ein Wert dahinterlege. Muss ich das ggf. anders aufbauen?

 

$IT_Gruppe = @(
            'Meyer',
            'Schulze')

bearbeitet von Garant
Geschrieben
vor 38 Minuten schrieb Garant:

Allerdings klappt es nicht mit der Variablenliste, sondern nur beim Vergleichen, wenn ich ein Wert dahinterlege. Muss ich das ggf. anders aufbauen?

 

Häh?

 

Mal benutzt Du "-contains", in Deinem letzten Code-Schnipsel hast Du "-match" benutzt ... und dann postest Du nur ein Teil Deines Codes ... bitte im Hinterkopf behalten - wir können Deinen Bildschirm nicht sehen und wir wir können nicht in Deinen Kopf gucken.  :achtung: ;-) 

 

Wenn Du eine Liste mit Elementen hast und benutzt "-contains", um zu prüfen, ob ein gegebener Wert in dieser Liste enthalten ist, muss dieser Wert exakt einem Element entsprechen, um einen positiven Rückgabewert zu erhalten.

Geschrieben (bearbeitet)

Ein Grund mehr, nicht mit der Pipeline zu arbeiten...


 

$Data = Import-CSV irgendwas.csv

foreach ( $value in $Data ) {
    # machirgendwas mit $value
}

$Data | Export-CSV irgendwasanderes -noTypeInformation

 

bearbeitet von daabm
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...