playmen
Goto Top

Powershell .csv export und excel import

Hallo

Ich möchte gerne aus einer bestehenden CSV Daten mit Powershell Exportieren und diesen Daten einzeln einer Variabel zuweisen um diese werde verwenden zu können.
Das habe ich bereits getestet:

$Users = Import-Csv "C:\Temp\textfile.csv" -Delimiter ';'
$Users | Select-Object Check

Mein hauptskript hat über 1500 Zeilen Code und ich brauche nur noch diese Funktion.

Ich muss Daten aus dem CSV Auslesen, diesen Daten einer Variabel zuteilen das ich diese einzeln in eine Excel mit dem Befehl $Checkliste1.Cells.Item(1,2) = $var_1
$var_1 sollte eben der Wert aus der CSV sein

Danke im voraus

Content-Key: 264655

Url: https://administrator.de/contentid/264655

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: colinardo
colinardo 26.02.2015 aktualisiert um 16:42:22 Uhr
Goto Top
Hallo playmen,
das ist kein Problem, welchen Datensatz benötigst du denn aus deiner CSV-Datei ?
Am besten du postest einen kleinen Ausschnitt deiner CSV-Datei mit Überschriften
(Bitte nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>.)

Beispiel
$Users = Import-Csv "C:\Temp\textfile.csv" -Delimiter ';'  
$var_1 = $Users | ?{$_.Username -eq 'Max Muster'} | select -ExpandProperty Check  
Grüße Uwe
Mitglied: playmen
playmen 26.02.2015 um 16:46:13 Uhr
Goto Top
Hallo
Ich benötige aus der CSV Datei immer die 1. und die 2. Spalte.
In der 1. steht Prüfkriterium und in der 2. Status(soll)
Bei Prüfkriterium soll z.B. Hardware oder Freier Speicher stehen und bei Status(soll) stehen Werte wie z.B. Grafikkarte OK oder > als 500GB
Mitglied: colinardo
colinardo 26.02.2015 aktualisiert um 16:52:03 Uhr
Goto Top
Zitat von @playmen:
Ich benötige aus der CSV Datei immer die 1. und die 2. Spalte.
In der 1. steht Prüfkriterium und in der 2. Status(soll)
Welche Spaltennamen haben diese Spalten ? Und brauchst du diese von allen Datensätzen oder nur bestimmten ?
Wie soll die Variable als Ergebnis aussehen Array/ String ?
Mitglied: playmen
playmen 26.02.2015 um 17:02:45 Uhr
Goto Top
Hallo
Hier ein Screenshot
http://www.bilderload.net/bild-csvPNG-68589.htm
am besten als String
Mitglied: colinardo
colinardo 26.02.2015 aktualisiert um 17:12:22 Uhr
Goto Top
Eine Excel-Datei mit den beiden Spalten kannst du direkt so erzeugen
$Users = Import-Csv "C:\Temp\textfile.csv" -Delimiter ';'  
$Users | select "Pruefkriterium","Soll (Status)" | export-csv "C:\test.csv" -NoType -Delimiter ";" -Encoding UTF8  
Die kannst du dann direkt in Excel öffnen.

Ansonsten hast du nicht genug Infos geliefert in welcher Umgebung du programmierst / GUI ?. Es gibt hier so viele Möglichkeiten .... Denk immer daran das wir hier nicht vor deinem Script sitzen, es also nicht kennen !
Mitglied: colinardo
colinardo 26.02.2015 aktualisiert um 17:14:48 Uhr
Goto Top
Wenn du nicht weißt wie man eine CSV-Datei Zeile für Zeile mit einer foreach-Schleife durchläuft, das geht so
$Users = Import-Csv "C:\Temp\textfile.csv" -Delimiter ';'   
$users | %{
    $_.Spaltenname1
    $_.Spaltenname2
}
hier wird für jede Zeile deiner CSV-Datei der Wert aus der jeweiligen Spalte ausgegeben. (Die Spaltennamen musst du hier natürlich anpassen)
Mitglied: playmen
playmen 26.02.2015 um 17:14:35 Uhr
Goto Top
sollte gehen, tut es leider nicht

mit der ursprungs csv passiert das:
http://www.bilderload.net/bild-csv_originalPNG-68590.htm

die csv datei in die geschrieben wird sieht so aus:

http://www.bilderload.net/bild-csv_nacgPNG-68591.htm
Mitglied: colinardo
colinardo 26.02.2015 aktualisiert um 17:29:39 Uhr
Goto Top
Oh man, die Bilder bringen mir hier gar nichts. Beschreibe bitte mal vernünftig deine Ausgangslage mit zwei Original-Zeilen (mit der Überschriftenzeile) deiner CSV-Datei und was du "wie" "wo" gespeichert haben willst!! Das ist essentiell um dir hier effektiv helfen zu können. Denn es macht einen riesen Unterschied ob die Quelldaten eine Überschriftenzeile haben oder eben nicht ....
Wir sitzen hier ja nicht vor deinem Script face-sad !! Danke.

Für den Fall das deine CSV-Datei keine Überschriftenzeile besitzt, machst du dies so:
$Users = Import-Csv "C:\Temp\textfile.csv" -Delimiter ';' -Header "1","2"  
$Users | select "1","2" | export-csv "C:\test.csv" -NoType -Delimiter ";" -Encoding UTF8  
Mitglied: playmen
playmen 27.02.2015 um 08:32:44 Uhr
Goto Top
Hallo colinardo

Sorry das ich erst jetzt schreibe..
Ich erkläre dir mal was mein Skript machen soll.
Wenn man das Skript Startet öffnet sich eine Shell (ohne GUI demnach).

Der Sinn und Zweck ist ein kompliziertes Checklisten System mit Powershell abzulösen.
Das ganze funktioniert so:
1. Abfrage nach dem Namen des Techniker
2. Kundenname eingeben (überprüft ob der Kunde existiert.) Der Kunde ist bei uns einen Ordner welcher sich bei "T:\Kunden" befindet.
3. Jeder Kunde hat einen "23 Wartung" Ordner und da drin befindet sich ein weiterer Ordner mit dem "MonatJahr" und in diesem sind die einzelnen Server aufgelistet.
4. Der Techniker gibt an welchen Kunden (Punkt 2) und welchen Server er auswählen will (denjenigen für den er die Checkliste machen will).
5. Die Shell gibt mit dem Befehl "Switch" eine Liste aus von 15 Punkten (15 Funktionen z.B. Antivirus) und der Techniker kann sich indem er eine Zahl eingibt für eine Entscheiden.
5. Die Shell öffnet die gewünschte Funktion aus einer Vorlage heraus welche sich bei "T:\Organisation\Technik\Vorlagen" befindet. In dem Fall heisst diese "VOR_Antivirus.xltx".
6. Der Techniker speichert diese Excel Datei in einem "Verteiler Ordner" welche automatisch erkennt wenn sich diese Datei in dem Ordner befindet.
7. Der Techniker wird aufgefordert das Excel zu schliessen damit das Skript die Datei von dem Verteiler Ordner Verschieben kann in den Server Ordner des Kunden.

Das habe ich bereits alles gemacht.
Mein Chef will aber eine Weitere Funktion und zwar eine wo man die Möglichkeit hat die Checkliste der Funktionen je nach Kunde Anzupassen.
Heisst bei Jedem Kunde, bei jedem Server soll sich eine CSV Datei befinden wo der Techniker Anpassungen Rein schreiben kann (!bevor!) er das Skript startet.
Das Skript geht dann bevor es die Excel Checkliste der Funktion öffnet in diese CSV Datei, schaut ob da was drin steht und wenn etwas drin steht werden diese Daten welche drin stehen in die Checkliste der Funktionen eingebaut.

Hier mal ein Bild einer Chekliste http://www.bilderload.net/bild-UnbenanntPNG-68612.htm

Darum wäre es sinnvoll wenn mein Skript die Daten welche sich in der CSV befinden in einer Variabel gespeichert werden damit ich diese dann mit diesem Befehl :$Checkliste1.Cells.Item(1,1) = $var_2 in die Fehler eintragen kann.
Mitglied: colinardo
Lösung colinardo 27.02.2015 aktualisiert um 09:58:02 Uhr
Goto Top
Das ist dann meine Interpretation deines Vorhabens
(du hast ja nicht geschrieben ob alle Daten in eine Zelle sollen, daher bin ich davon ausgegangen das die Daten jeweils in eine neue Zeile kommen)
$Users = Import-Csv "C:\Temp\textfile.csv" -Delimiter ';' -Header "1","2"  
for($i=0;$i -lt $Users.Length;$i++){
    $Checkliste.Cells.Item((1+$i),1).Value2 = $Users[$i].'1'  
    $Checkliste.Cells.Item((1+$)i,2).Value2 = $Users[$i].'2'  
}
Willst du nicht Zeile für Zeile schreiben kannst du die Daten auch in ein zweidimensionales Array konvertieren und einem Range direkt zuweisen. Wie das geht kannst du hier nachlesen https://powertoe.wordpress.com/2010/11/05/how-to-get-data-into-an-excel- ...
Mitglied: playmen
playmen 27.02.2015 um 09:58:06 Uhr
Goto Top
Hallo
Danke für deine Antwort

Frage
Warum machst du hier:
$Checkliste.Cells.Item(4+$i,1).Value2 = $Users[$i].'1'

sorry falls es eine blöde frage ist, bin die Sprache noch am lernen..

Gruass
Mitglied: colinardo
colinardo 27.02.2015 aktualisiert um 10:59:02 Uhr
Goto Top
Zitat von @playmen:
Frage
Warum machst du hier:
$Checkliste.Cells.Item(4+$i,1).Value2 = $Users[$i].'1'
Ich wusste ja nicht in welcher Zeile der Excel-Tabelle du die Daten hineinschreiben willst, das bleibt dann dir überlassen ... hatte mich nur an deinem Bildchen überlassen

p.s. Wie du Bilder deinem Beitrag hinzufügst, kannst du in der Formatierungs-FAQ nachlesen.