Powershell从ForEach循环导出到CSV
我是新来Powershell的,但我已经尽力了。 我试图创建一个脚本,将文件复制到阵列中所有XP机器的所有用户桌面。脚本基本上说“如果机器可以ping,请复制文件,如果不能,请不要复制。”然后我想将此信息导出到CSV文件中以供进一步分析 我已经设置好了,但无论我做什么,它都只会导出它运行的最后一台电脑。它似乎运行在所有PC上(通过输出到txt文件进行测试),但不会将所有机器记录到CSV。有人能给点建议吗Powershell从ForEach循环导出到CSV,powershell,csv,export-csv,Powershell,Csv,Export Csv,我是新来Powershell的,但我已经尽力了。 我试图创建一个脚本,将文件复制到阵列中所有XP机器的所有用户桌面。脚本基本上说“如果机器可以ping,请复制文件,如果不能,请不要复制。”然后我想将此信息导出到CSV文件中以供进一步分析 我已经设置好了,但无论我做什么,它都只会导出它运行的最后一台电脑。它似乎运行在所有PC上(通过输出到txt文件进行测试),但不会将所有机器记录到CSV。有人能给点建议吗 $ArrComputers=“PC1”、“PC2”、“PC3” foreach($Compu
$ArrComputers=“PC1”、“PC2”、“PC3”
foreach($Computers中的计算机){
$Reachable=测试连接-Cn$计算机-缓冲区大小16-计数1-ea 0-安静
$Output=@()
#这台机器够得着吗?
如果($Reachable)
{
#如果是,请复制文件
复制项目-路径“\\servername\filelocation”-目标“\\$Computer\c$\Documents and Settings\All Users\Desktop\filename”
$details=“已复制”
}
其他的
{
#如果没有,请不要复制该文件
$details=“未复制”
}
#将此运行中的信息存储到阵列中
$Output=新对象-类型名称PSObject-属性@{
SystemName=$Computer
可达=$Reachable
结果=$details
}|选择对象系统名称、可访问、结果
}
#将阵列输出到CSV文件
$Output |导出Csv C:\GPoutput.Csv
“写入输出”脚本已完成。请检查输出文件
问题在于:
#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
给你。这将使用
PSCustomObject
,它比新对象
更快地枚举数据。还将在每个循环后附加到.csv
文件,因此不会覆盖以前的数据
foreach ($Computer in $ArrComputers) {
$Reachable = Test-Connection -Cn $Computer -BufferSize 16 -Count 1 -ea 0 -quiet
#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
[PSCustomObject]@{
SystemName = $Computer
Reachable = $reachable
Result = $details
} | Export-Csv C:\yourcsv.csv -notype -Append
}
您可能希望附加导出csv以将项目添加到csv文件中 这里有一个例子
foreach ($item in $ITGlueTest.data)
{
$item.attributes | export-csv C:\organization.csv -Append
}
我尝试将$Output | Export CSV C:\GPoutput.CSV移动到数组中,但它在每次传递时都会覆盖自身,因为不允许使用-append。我还尝试将整个foreach循环保存到一个变量中,但这会返回错误:“表达式或语句中的意外标记in”。您必须使用v2。我建议将整个foreach循环存储到$Output中,然后将其导出。这不起作用,因为他使用的是v2。PSCustomObject和
-Append
是v3+。错过了他提到的XP机器的部分。