Ответ 1
Это решение создает psobject и добавляет каждый объект к массиву, затем создает csv, связывая содержимое массива с помощью 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
Если вы передаете строковый объект в csv, вы получите его длину, записанную в csv, это потому, что это свойства строки, см. здесь для получения более подробной информации. Информация.
Вот почему я сначала создаю новый объект.
Попробуйте следующее:
write-output "test" | convertto-csv -NoTypeInformation
Это даст вам:
"Length"
"4"
Если вы используете Get-Member на Write-Output следующим образом:
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