create - ¿Cómo exportar datos a CSV en PowerShell?
out-file powershell csv (4)
Esta solución crea un objeto de búsqueda y agrega cada objeto a una matriz, luego crea el csv canalizando el contenido de la matriz a través de Export-CSV.
$results = @()
foreach ($computer in $computerlist) {
if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet))
{
foreach ($file in $REMOVE) {
Remove-Item "//$computer/$DESTINATION/$file" -Recurse
Copy-Item E:/Code/powershell/shortcuts/* "//$computer/$DESTINATION/"
}
} else {
$details = @{
Date = get-date
ComputerName = $Computer
Destination = $Destination
}
$results += New-Object PSObject -Property $details
}
}
$results | export-csv -Path c:/temp/so.csv -NoTypeInformation
Si canaliza un objeto de cadena a un csv obtendrá su longitud escrita en el csv, esto se debe a que estas son propiedades de la cadena. Consulte here para obtener más información.
Es por eso que primero creo un nuevo objeto.
Intente lo siguiente:
write-output "test" | convertto-csv -NoTypeInformation
Esto te dará:
"Length"
"4"
Si utiliza Get-Member en Write-Output de la siguiente manera:
write-output "test" | Get-Member -MemberType Property
Verás que tiene una propiedad - ''longitud'':
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property System.Int32 Length {get;}
Esta es la razón por la cual la longitud se escribirá en el archivo csv.
Actualización: Anexar un CSV No es la forma más eficiente si el archivo se hace grande ...
$csvFileName = "c:/temp/so.csv"
$results = @()
if (Test-Path $csvFileName)
{
$results += Import-Csv -Path $csvFileName
}
foreach ($computer in $computerlist) {
if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet))
{
foreach ($file in $REMOVE) {
Remove-Item "//$computer/$DESTINATION/$file" -Recurse
Copy-Item E:/Code/powershell/shortcuts/* "//$computer/$DESTINATION/"
}
} else {
$details = @{
Date = get-date
ComputerName = $Computer
Destination = $Destination
}
$results += New-Object PSObject -Property $details
}
}
$results | export-csv -Path $csvFileName -NoTypeInformation
foreach ($computer in $computerlist) {
if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet))
{
foreach ($file in $REMOVE) {
Remove-Item "//$computer/$DESTINATION/$file" -Recurse
Copy-Item E:/Code/powershell/shortcuts/* "//$computer/$DESTINATION/"
}
} else {
Write-Host "//$computer/$DESTINATION/"
}
}
Quiero exportar Write-Host "/ $ computer / $ DESTINATION /" a los archivos CSV para saber qué computadoras estaban fuera de línea cuando se ejecutó el script.
Estoy ejecutando esto desde una máquina con Windows 7
Lo que estás buscando es el Export-Csv file.csv
intente usar Get-Help Export-Csv para ver qué es posible
también funcionará Out-File -FilePath "file.csv"
Siempre puedes usar el
echo "Column1`tColumn2`tColumn3..." >> results.csv
Deberá poner "t" entre las columnas para separar las variables en su propia columna. Esta es la forma en que escribí mi guión:
echo "Host`tState" >> results.csv
$names = Get-Content "hostlist.txt"
foreach ($name in $names) {
$count = 0
$count2 = 13490
if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue ) {
echo "$name`tUp" >> results.csv
}
else {
echo "$name`tDown" >> results.csv
}
$count++
Write-Progress -Activity "Gathering Information" -status "Pinging Hosts..." -percentComplete ($count / $count2 *100)
}
Esta es la forma más fácil para mí. La salida que obtengo es:
Host|State
----------
H1 |Up
H2 |UP
H3 |Down
Puedes jugar con la mirada, pero esa es la idea básica. El recuento de $ es solo una barra de progreso si quieres darle un toque especial al aspecto
simplemente use el cmd de archivo externo, pero NO olvide dar un tipo de codificación: -Encoding UTF8
así que úsalo así:
$log | Out-File -Append C:/as/whatever.csv -Encoding UTF8
-Se requiere una solicitud si desea escribir en el archivo más de una vez.