私はPowershellを初めて使用しますが、最善を尽くしました。アレイ内のすべてのXPマシンのすべてのユーザーのデスクトップにファイルをコピーするスクリプトを作成しようとしています。スクリプトは基本的に「マシンがping可能である場合は、ファイルをコピーします。そうでない場合は、しないでください。」次に、この情報をCSVファイルにエクスポートしてさらに分析したいと思います。
すべて設定しましたが、何をしても、最後に実行したPCのみをエクスポートします。すべてのPCで実行されているようです(txtファイルへの出力でテスト済み)が、すべてのマシンをCSVに記録するわけではありません。誰かアドバイスはありますか?
$ArrComputers = "PC1", "PC2", "PC3"
foreach ($Computer in $ArrComputers) {
$Reachable = Test-Connection -Cn $Computer -BufferSize 16 -Count 1 -ea 0 -quiet
$Output = @()
#Is the machine reachable?
if($Reachable)
{
#If Yes, copy file
Copy-Item -Path "\\servername\filelocation" -Destination "\\$Computer\c$\Documents and Settings\All Users\Desktop\filename"
$details = "Copied"
}
else
{
#If not, don't copy the file
$details = "Not Copied"
}
#Store the information from this run into the array
$Output =New-Object -TypeName PSObject -Property @{
SystemName = $Computer
Reachable = $reachable
Result = $details
} | Select-Object SystemName,Reachable,Result
}
#Output the array to the CSV File
$Output | Export-Csv C:\GPoutput.csv
Write-output "Script has finished. Please check output files."
問題はこれです:
#Store the information from this run into the array
$Output =New-Object -TypeName PSObject -Property @{
SystemName = $Computer
Reachable = $reachable
Result = $details
} | Select-Object SystemName,Reachable,Result
}
#Output the array to the CSV File
$Output | Export-Csv C:\GPoutput.csv
Foreachループを繰り返すたびに、$Output
に保存されます。以前にあったもの、つまり前の反復を上書きします。つまり、最後の反復のみが$Output
に保存され、エクスポートされます。 PowerShell v2を実行しているため、foreachループ全体を変数に保存してエクスポートすることをお勧めします。
$Output = foreach ($Computer in $ArrComputers) {
New-Object -TypeName PSObject -Property @{
SystemName = $Computer
Reachable = $reachable
Result = $details
} | Select-Object SystemName,Reachable,Result
}
$Output | Export-Csv C:\GPoutput.csv
Export-csvを追加して、csvファイルにアイテムを追加します。例を次に示します。
foreach ($item in $ITGlueTest.data)
{
$item.attributes | export-csv C:\organization.csv -Append
}