2017-10-13 4 views
0

code:Import-Csv Powershell

$Computers = Import-Csv -Path C:\temp\Computers.csv 
write-host $Computers 

fichier CSV (où US-1 est A1, US-2 est A2, etc.)

US-1 
US-2 
US-3 
US-4 

Je crois Import-Csv est l'importation de manière incorrecte parce que Write-Host $ Ordinateurs me donne ceci:

@ {US-1 = US-2} @ {US-1 = US-3} @ {US-1 = US-4}

Mais si $ Computers est assigné est ainsi:

$Computers = "US-1", "US-2", "US-3", "US-4" 

La sortie est correcte:

US-1 US-2 US-3 US-4

Donc, je besoin d'importer d'un fichier CSV pour des raisons pratiques, mais ayant chacun nom de l'ordinateur enregistré dans le bon sens, sans crochets ni symboles. Cela rend l'utilisation des noms d'ordinateurs dans le reste de mon programme très difficile.

EDIT: comme discuté, je l'ai formaté correctement le csv, qui est maintenant ceci:

Computers, 
US-1 
US-2 
US-3 
US-4 

Maintenant obtenir la sortie:

@ {Ordinateurs = US-1} @ {Ordinateurs = US- 2} @ {Computers = US-3} @ {Computers = US-4}

+0

sortie étrange. Quel type de données est $ Computers? – guiwhatsthat

+0

Type de données par défaut, chaîne la plus probable, non sûr. ce que vous voyez si l'ensemble du programme de test que j'ai créé pour le débordement de pile – Fingers

+0

Publier un échantillon de votre fichier CSV – Manu

Répondre

1

CSV simple

Créez votre CSV (ordinateurs.csv):

Computer 
US-1 
US-2 
US-3 

importer votre fichier CSV:

$computers = Import-Csv Computers.csv 

Accédez à vos valeurs:

Write-Host $computers # This results to something like this: @{Computers=US-1} @{Computers=US-2} @{Computers=US-3} @{Computers=US-4} 
# This is perfectly fine. It's all of your computer-objects 

accès chaque valeur:

write-host $computers[n] # replace n with your index, starting at 0 to n-1 
write-host $computers[1] # results in US-2 

Si seuls les ordinateurs sont d'intérêt vous pourriez faire quelque chose comme ceci:

write-host $computers.Computer # restults in US-1 US-2 US-3 US-4 

De même pour plus CSVs:

Computers, OperatingSystem 
US-1, Windows 
US-2, Linux 
US-3, SomeOtherUnix 
US-4, MacOS 

Importez votre CSV:

$computers = Import-Csv Computers.csv 

Accédez à vos valeurs:

Write-Host $computers # This results to something like this: 
# @{Computers=US-1; OperatingSystem=Windows} @{Computers=US-2; OperatingSystem=Linux} @{Computers=US-3; OperatingSystem=SomeOtherUnix} @{Computers=US-4; OperatingSystem=MacOS} 
# This is perfectly fine. It's all of your computer-objects 

Accès chaque valeur:

write-host $computers[n] # replace n with your index, starting at 0 to n-1 
write-host $computers[1] # results in 

Computers OperatingSystem 
--------- --------------- 
US-1  Windows 

Si seulement les ordinateurs/operatingSystems sont d'intérêt que vous pourriez faire quelque chose comme ceci:

write-host $computers.Computers # restults in US-1 US-2 US-3 US-4 
write-host $computers.OperatingSystem # restults in US-1 US-2 US-3 US-4 

Et ainsi de suite ... :)

+0

qu'est-ce que comp signifie? aussi j'utilise un pour chaque boucle plus tard, donc je ne peux pas me référer à des ordinateurs individuels – Fingers

+0

nvm, compris, mon script fonctionne bien maintenant merci! – Fingers

+0

Ah mon mauvais! J'ai eu $ comp comme variable de script insted de $ ordinateurs. Je vais éditer mon post pour des raisons de lisibilité. – Akaino

1

Votre fichier CSV est mal formé; il n'a pas de ligne d'en-tête. Vous pouvez soit régénérer le fichier afin qu'il ait une ligne d'en-tête, soit utiliser le paramètre -Header pour Import-CSV. Une fois que vous avez un format CSV correctement formaté (ou que vous avez importé avec un en-tête fourni manuellement), vous pouvez référencer $computers comme un tableau de PSObjects, où chaque objet PSObject contient un membre avec le nom fourni - par exemple , si vous avez utilisé

$Computers = Import-CSV -Header "RegionName" -Path C:\TEMP\Computers.CSV 

alors vous pouvez vous référer aux dossiers individuels $Computers[$n].RegionName. Après la modification apportée à la question d'origine, la méthode correcte pour accéder aux éléments individuels du tableau est $Computers[$n].Computers. Pour récupérer les ordinateurs à partir d'un fichier texte comme décrit à l'origine, sans avoir à utiliser les noms de champs, utilisez Get-Content au lieu de Import-CSV.

+0

Salut, J'ai cherché un guide sur la création d'en-têtes csv et maintenant mon fichier csv ressemble à ceci: – Fingers

+0

Si vous avez changé votre fichier CSV, et avez encore des problèmes, mettez à jour votre question pour refléter cela - ou posez une nouvelle question. –

+0

oui désolé j'ai frappé entrer pour la nouvelle ligne sur le commentaire et il l'a posté, j'ai édité mon message original – Fingers