如何在PowerShell中将多个变量结果输出至同一个CSV文件
解决方案
你原有代码存在2个核心问题:
- 获取
$DomAdmins、$OrgAdmins时用了Format-Table(别名ft),该命令仅用于控制台格式化展示,输出的不是结构化数据,无法直接用于导出CSV - 三类数据的结构不一致,需要统一属性结构后才能合并导出到同一个CSV文件
修改后的完整可运行代码如下:
#Module #Import-Module activedirectory #Variablen $Date= get-date -format "yyyy-MM-dd" # 把斜杠换成横杠,避免路径/文件名非法字符问题 cls $MA= Read-Host -Prompt "MA eingeben:" cls $Kunde= Read-Host -Prompt "Kundenkürzel eingeben:" cls $Path= Read-Host -Prompt "Speicherpfad eingeben (z.B: C:\):" cls $fullpath= Join-Path -Path $Path -ChildPath "$($Kunde)_$($Date)_$($MA).csv" # 用Join-Path避免路径拼接错误 #Admins 去掉ft,改用Select-Object,统一加类型标识 $DomAdmins=Get-ADGroupMember 'Domänen-Admins' | Select-Object ` @{Name='数据类型';Expression={'域管理员'}}, ` @{Name='账号/设备名称';Expression={$_.SamAccountName}}, ` @{Name='操作系统';Expression={''}}, ` @{Name='系统版本';Expression={''}}, ` @{Name='IP地址';Expression={''}} $OrgAdmins=Get-ADGroupMember 'Organisations-Admins' | Select-Object ` @{Name='数据类型';Expression={'组织管理员'}}, ` @{Name='账号/设备名称';Expression={$_.SamAccountName}}, ` @{Name='操作系统';Expression={''}}, ` @{Name='系统版本';Expression={''}}, ` @{Name='IP地址';Expression={''}} #Server 同样统一属性结构 $Server=Get-ADComputer -Filter 'operatingsystem -like "*server*" -and enabled -eq "true"' ` -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object -Property Operatingsystem | Select-Object ` @{Name='数据类型';Expression={'服务器'}}, ` @{Name='账号/设备名称';Expression={$_.Name}}, ` @{Name='操作系统';Expression={$_.Operatingsystem}}, ` @{Name='系统版本';Expression={$_.OperatingSystemVersion}}, ` @{Name='IP地址';Expression={$_.IPv4Address}} # 合并三类对象导出到同一个CSV $DomAdmins + $OrgAdmins + $Server | Export-Csv -Path $fullpath -Encoding UTF8 -NoTypeInformation -UseCulture #Output 控制台输出部分保持不变,这里的ft不影响导出逻辑 cls Write-Host "Kundendoku vom: " $Date -ForegroundColor cyan Write-Host "Autor: " $MA Write-Host "Kundenkürzel:" $Kunde Write-Host "" -ForegroundColor cyan Write-Host "Alle Domänenadmins:" -ForegroundColor cyan $DomAdmins | Select-Object '账号/设备名称' | FT | Out-String|% {write-host $_ } Write-Host "Alle Organisationsadmins:" -ForegroundColor cyan $OrgAdmins | Select-Object '账号/设备名称' | FT | Out-String|% {write-host $_ } Write-Host "Alle Domänenserver" -ForegroundColor cyan Write-Host "Achtung! Nur Domänenserver!" -ForegroundColor red $Server | Select-Object '账号/设备名称',操作系统,系统版本,IP地址 | FT | Out-String|% {write-host $_ }
修改说明:
- 用计算属性给所有数据统一了5个公共字段,导出的CSV可以清晰区分每一行数据的类型,不会出现属性错位的情况
- 替换了路径拼接和日期格式的写法,避免因为特殊字符导致的路径错误
- 导出时指定了UTF8编码,避免特殊字符乱码,
-UseCulture参数保证CSV可以用Excel直接正常打开
内容的提问来源于stack exchange,提问作者michael4673
相关产品推荐
相关产品推荐

