Benutzer mit den meisten Antworten
PowerShell Script - CSV-Daten auslesen und je nach Angabe verwalten

Frage
-
Hallo :)
Wir bereiten zur Zeit einiges an Software für das Software Deployment unseres Kunden vor.
Da wir für einige Programme "License-Keys" benötigen bzw. mehrere (!) besitzen, soll ich nun mit Power Shell ein Skript erstellen, dass die Daten aus einer .csv Datei ausliest und je nach Angabe verwaltet/ den "verfügbaren" Key im Skript einsetzt.
----Hier ein Beispiel (.csv):
Key;availability
[Key1];free
[Key2];used
[Key3];free----
Wenn Zeile 1(availability)="free" dann lese den Wert von "Key1" in Variable X ein.
Wenn Zeile 1(availability) nicht gleich "free" dann gehe zu Zeile 2(availability)
~Vorgang wiederholen~
(Der Befehl soll weiter suchen bis er einen Key mit dem Status "free" findet, wenn er keinen findet
soll eine Fehlermeldung "ERROR: All Keys are already in use, please contact XY" erscheinen und der Vorgang abgebrochen werden.
----Da ich noch ziemlich neu im Bereich Powershell bin :S, hoffe ich dabei auf eure Hilfe.
Die Basis habe ich schon einmal, was mir fehlt ist der Vorgang, bei dem der Key herausgesucht(.csv) und in die Variable X eingesetzt wird, da ich immer wieder durcheinander komme.
Ich hoffe, dass dies genug Informationen waren, damit ihr etwas damit anfangen könnt :)
Gruss Andi
Antworten
-
Der Befehl gibt dir eine Liste zurück (Array).
http://www.colorconsole.de/PS_Windows/de/about_arrays.htmDen ersten Wert aus einem Array kann man mit der Nummer 0 holen!
(Import-Csv C:\temp\test.csv | Where-Object {$_.Status -eq "free"})[0]
Man sollte mit Count aber abfragen ob in dem Array überhaupt ein Wert drin ist.
$Lizens = $Null
$Liste = Import-Csv C:\temp\test.csv | Where-Object {$_.Status -eq "free"} If(@($Liste).count -gt 0) { # ersten Wert aus der Liste holen $Lizens = $Liste[0] }
Else {
Write-Warning "Keine Lizenzen mehr übrig!"
}
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Mittwoch, 30. Januar 2013 15:53
- Als Antwort markiert AndIBM Donnerstag, 31. Januar 2013 11:28
Alle Antworten
-
Verwenden des Cmdlet "Import-Csv"http://technet.microsoft.com/de-de/library/ee176874.aspx
Get-Help Import-CSV
http://www.colorconsole.de/PS_Windows/de/Import-CSV.htmPlease click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum! -
Hallo Peter, danke für die schnelle Antwort.
Dein Tipp hat mir sehr geholfen.
Import-Csv C:\temp\test.csv | Where-Object {$_.Status -eq "free"}
Ausgabe:
Key Status
---- --------
xxxx-xxx-xxxx-xxxx-xxxx freexxxx-xxx-xxxx-xxxx-xxxx free
Was ich aber bis jetzt nicht finden konnte, ist eine Möglichkeit nur den ersten "Key" der frei ist, auszulesen und ihn danach auf "used" zu setzen.
Bis jetzt habe ich noch nichts gefunden, dass mir hierbei helfen könnte...Gruss Andi
-
Der Befehl gibt dir eine Liste zurück (Array).
http://www.colorconsole.de/PS_Windows/de/about_arrays.htmDen ersten Wert aus einem Array kann man mit der Nummer 0 holen!
(Import-Csv C:\temp\test.csv | Where-Object {$_.Status -eq "free"})[0]
Man sollte mit Count aber abfragen ob in dem Array überhaupt ein Wert drin ist.
$Lizens = $Null
$Liste = Import-Csv C:\temp\test.csv | Where-Object {$_.Status -eq "free"} If(@($Liste).count -gt 0) { # ersten Wert aus der Liste holen $Lizens = $Liste[0] }
Else {
Write-Warning "Keine Lizenzen mehr übrig!"
}
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Mittwoch, 30. Januar 2013 15:53
- Als Antwort markiert AndIBM Donnerstag, 31. Januar 2013 11:28
-
Hallo Peter,
Ich bin erst jetzt dazu gekommen, mich wieder mit diesem Skript auseinander zu setzen. Trotzdem danke für die schnelle Antwort!
Deine Idee finde ich gut, aber das Skript soll nur den ersten "Key", der frei ist in die Variable schreiben und nicht mehrere. Wenn die ersten drei Keys schon benutzt werden, kann dies zu Problemen führen, da dann kein Key ausgegeben wird.
Gibt es eine Möglichkeit dies umzusetzen oder muss ich für jeden Key eine neue "Abfrage" definieren die kontrolliert ob er frei ist und wenn nicht, den nächsten Key kontrolliert,...
Gruss Andi- Bearbeitet AndIBM Donnerstag, 31. Januar 2013 10:01
-
das Skript soll nur den ersten "Key", der frei ist in die Variable schreiben und nicht mehrere.
Genau dies tut das Script!
Den ersten Wert aus einem Array kann man mit der Nummer [0] holen!
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!