Ho questo codice che sto correndo da PowerShell. Quando lo eseguo senza export-csv ottengo tutti i nomi delle cartelle sullo schermo.
dir | select -expand fullname | % { ($_ -split '\')[7]
Ma se aggiungo | export-csv c:\test.txt
| export-csv c:\test.txt
poi vedo nel file non il nome della cartella che mi aspettavo proprio come lo vedo sullo schermo.
#TYPE System.String "Length" "13" "18" "20" "22" "29" "21" "24" "11" "17" "20" "20"
Export-Csv
esporta una tabella di proprietà dell’object e i relativi valori. Dal momento che lo script sta producendo oggetti stringa, e l’unica proprietà che hanno è la lunghezza, questo è ciò che hai ottenuto.
Se vuoi solo salvare la lista, usa Out-File
o Set-Content
invece di Export-Csv
.
La risposta precedente funziona, ma cosa succede se qualcuno stava cercando di inviarlo in un file CSV.
Questo NON funziona:
$str_list = @('Mark','Henry','John') $str_list | Export-Csv .\ExportStrList.csv -NoType
Poiché Export-Csv
acquisisce oggetti e genera proprietà. Le sole proprietà per una stringa [] sono Lunghezza, quindi il file CSV contiene solo lunghezze.
Per risolvere questo problema, è necessario modificare String [] in un object []. Il modo più semplice è con Select-Object
.
Metti ogni stringa nella proprietà Name di un nuovo object [], in questo modo:
$str_list = @('Mark','Henry','John') $obj_list = $str_list | Select-Object @{Name='Name';Expression={$_}} $obj_list | Export-Csv .\ExportStrList.csv -NoType
Solo per ripetere l’azione, Select-Object
emette un Select-Object
PSO personalizzato che può essere facilmente manipolato. Questa è un’informazione molto potente, usala saggiamente.
Questo ha funzionato per me:
$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
$output |Select-Object * | Export-Csv 'h:\filename.csv' -NoTypeInformation