さまざまなソースからデータを収集するレポート ファイルを作成しようとしています。次のようなレポート構造を構築しました。
$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 変数に展開されたコンテンツが含まれることです...