さまざまなソースからデータを収集するレポートファイルを作成しようとしています。 は、私はこのような報告体制を構築しています:Powershell Select-Object -expandproperty入力が配列で配列のプロパティが含まれているときに異常な動作が発生する
$Data = import-csv "some CSV FILE"
<#
csv file must look like this
hostname,IP
server1,192.168.1.20
#>
は、その後、私は「初期値」が事前に入力配列オブジェクトを構築しています、と私は私の$データ変数に添付した
$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=}}
すべてが順調です:
$としてaswell$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}}
: 私はのは、私は無視することができます言わせて、すべてのこれらのエラーを取得
...
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
しかし、他の変数のセット全体は次のように、変更されます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
これは... 誰かが何かを明確にすることができ、私の側に完全に意図しないです私は間違っている?私はすべてのテストはpowershell_iseを使用して行った、と私は
私の予想結果が含まれるように$最終報告書の変数のためになるPowerShellのデフォルトを変更していないWindows 7の 上のPowerShell 5.0を使用しています
展開された内容ではなく、私がこのプロセスで使用したすべての変数...
私は問題はあなたがコレクションを格納するためCHECKDATAを使用しているという事実から来ていると思います$ data変数(おそらくcsvファイルの列名として)に格納され、同時に文字列変数として使用されます。 'NotChecked')をCheckData変数に格納されたオブジェクトに追加します。コード$ row.CheckDataを$ row.CheckStatusのように変更すると良いでしょう。 –
こんにちは、csvデータは、2行、ホスト名とIPしか持っていません。また、私は自分のデータ変数に別のプロパティ名を与えようとしました:$ Data = $ Data | *、CheckData2を選択し、他の変数名を同一にします。上記と同じように動作します。 – IonutN
名前を変更した後$ Data = $ Data | Select *、CheckData2 $ data |を変更しましたか? %{$ _。CheckData2 = $ CheckObj}し、すべてのオブジェクトを最初から作成しましたか? –