J'ai ce code que je lance depuis PowerShell. Lorsque je l'exécute sans l'export-csv, j'obtiens tous les noms de dossier à l'écran.
dir | select -expand fullname | % { ($_ -split '\')[7]
Mais si j'ajoute | export-csv c:\test.txt
alors je vois dans le fichier pas le nom du dossier que j'attendais comme je le vois à l'écran.
#TYPE System.String
"Length"
"13"
"18"
"20"
"22"
"29"
"21"
"24"
"11"
"17"
"20"
"20"
Export-Csv
exporte un tableau des propriétés des objets et leurs valeurs. Étant donné que votre script produit des objets chaîne et que la seule propriété qu'ils possèdent est la longueur, c'est ce que vous avez.
Si vous souhaitez simplement enregistrer la liste, utilisez Out-File
ou Set-Content
au lieu de Export-Csv
.
La réponse précédente fonctionne, mais que se passe-t-il si quelqu'un cherche à le sortir dans un fichier CSV.
Cela ne fonctionne pas [~ # ~] et [~ # ~] :
$str_list = @('Mark','Henry','John')
$str_list | Export-Csv .\ExportStrList.csv -NoType
Car Export-Csv
prend les objets et affiche les propriétés. Les seules propriétés d'une chaîne [] étant la longueur, le fichier CSV ne contient que des longueurs.
Pour résoudre ce problème, nous devons changer la chaîne [] en un objet []. La manière la plus simple est avec Select-Object
.
Mettez chaque chaîne dans la propriété Name d'un nouvel objet [], comme ceci:
$str_list = @('Mark','Henry','John')
$obj_list = $str_list | Select-Object @{Name='Name';Expression={$_}}
$obj_list | Export-Csv .\ExportStrList.csv -NoType
Juste pour réitérer, Select-Object
génère un objet PSO personnalisé qui peut facilement être manipulé. Il s'agit d'informations très puissantes, utilisez-les à bon escient.
Cela a fonctionné pour moi:
$data = @()
$row = New-Object PSObject
$row | Add-Member -MemberType NoteProperty -Name "name1" -Value "Test"
$row | Add-Member -MemberType NoteProperty -Name "name2" -Value 2
$data += $row
$data | Export-Csv "Text.csv" -NoTypeInformation