我正在尝试构建一个从各种来源收集数据的报告文件。我已经建立了这样的报告结构:
$Data = import-csv "some CSV FILE"
<#
csv file must look like this
hostname,IP
server1,192.168.1.20
#>
然后我正在构建一个数组对象,预填充“初始值”,并将它附加到我的 $data 变量
$Ids = ('7.1.1.1','7.1.1.2')
$CheckObj= @()
foreach ($id in $IDs) {
$row = "" | Select-Object CheckID,CheckData,CheckDataRaw
$row.CheckID = $id
$row.CheckData = "NotChecked"
$CheckObj+= $row
}
$Data = $Data | Select *,CheckData
$data | % {$_.CheckData = $CheckObj}
结果对象是:
hostname : server1
ip : 192.168.1.20
CheckData : {@{CheckID=7.1.1.1; CheckData=NotChecked; CheckDataRaw=},
@{CheckID=7.1.1.2; CheckData=NotChecked; CheckDataRaw=}}
一切都很好,直到我想这样做:
$FinalReport = $data | Select-Object -Property * -ExpandProperty Checkdata
我得到所有这些错误,可以说我可以忽略......
Select-Object : The property cannot be processed because the property
"CheckData" already exists.
At line:1 char:24
+ ... lReport = $data | Select-Object -Property * -ExpandProperty Checkdata
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (@{hostname=serv...ystem.Objec
t[]}:PSObject) [Select-Object], PSArgumentException
+ FullyQualifiedErrorId : AlreadyExistingUserSpecifiedPropertyExpand,Micro
soft.PowerShell.Commands.SelectObjectCommand
但是,一整套其他变量会被更改,例如:
$data | fl
hostname : server1
ip : 192.168.1.1
CheckData : {@{CheckID=7.1.1.1; CheckData=NotChecked; CheckDataRaw=;
hostname=server1; ip=192.168.1.1}, @{CheckID=7.1.1.2;
CheckData=NotChecked; CheckDataRaw=; hostname=server1;
ip=192.168.1.1}}
以及 $CheckObj 变量
$CheckObj
CheckID : 7.1.1.1
CheckData : NotChecked
CheckDataRaw :
hostname : server1
ip : 192.168.1.1
CheckID : 7.1.1.2
CheckData : NotChecked
CheckDataRaw :
hostname : server1
ip : 192.168.1.1
这对我来说完全是无意的......有人可以澄清我做错了什么吗?
我在 Windows 7 上使用 powershell 5.0。所有测试都是使用 powershell_ise 完成的,我没有更改任何 powershell 默认值
我的预期结果是 $Final Report 变量包含扩展内容,而不是我在过程中使用的所有变量......