[英]How to export data to CSV in PowerShell?
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\"
}
}
我想將Write-Host“\\ $ computer \\ $ DESTINATION \\”導出到CSV文件,以便我知道腳本運行時哪些計算機處於脫機狀態。
我是從Windows 7機器上運行的
此解決方案創建一個psobject並將每個對象添加到一個數組中,然后通過Export-CSV管理數組的內容來創建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
如果將字符串對象傳遞給csv,則會將其長度寫入csv,這是因為這些是字符串的屬性,有關詳細信息,請參閱此處 。
這就是我首先創建一個新對象的原因。
請嘗試以下方法:
write-output "test" | convertto-csv -NoTypeInformation
這會給你:
"Length"
"4"
如果在寫輸出上使用Get-Member,如下所示:
write-output "test" | Get-Member -MemberType Property
你會看到它有一個屬性 - 'length':
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property System.Int32 Length {get;}
這就是為什么將長度寫入csv文件。
更新:附加CSV如果文件變大,則不是最有效的方法...
$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
只需使用Out-File cmd,但不要忘記給出一種編碼類型: -Encoding UTF8
所以使用它:
$log | Out-File -Append C:\as\whatever.csv -Encoding UTF8
如果你想多次寫入文件,則需要-Append。
您要搜索的是Export-Csv file.csv
嘗試使用Get-Help Export-Csv來查看可能的內容
Out-File -FilePath "file.csv"
也可以
你可以隨時使用
echo "Column1`tColumn2`tColumn3..." >> results.csv
您需要在列之間放置“t”以將變量分隔到它們自己的列中。 這是我編寫腳本的方式:
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)
}
這對我來說是最簡單的方法。 我得到的輸出是:
Host|State
----------
H1 |Up
H2 |UP
H3 |Down
你可以玩看看,但這是基本的想法。 $ count只是一個進度條,如果你想增加外觀
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.