2017-03-23 7 views
0

(この例では)Import-CliXMLで読み込まれたオブジェクトに既存のアイテムを追加する方法については頭を上げられません。PowerShellでImport-Clixml経由で読み込まれた既存のオブジェクトにアイテムを追加する

私のXMLファイルは、ロールと担当者のペアのテーブルを含む単純なオブジェクトです。ファイルが存在しない場合、正しく動作します。ファイルに既存のロールが含まれている場合は、それを正常に更新します。ここで

Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
At C:\Users\me\Set-TeamRole.ps1:33 char:9
$TeamRoles += $RoleObj

が私のコードされています:役割が設定されている場合は、ファイル内に存在しない(したがって、それに追加する必要があります)、私はこのエラーを取得する

function Set-TeamRole { 
    Param(
     [string]$Role, 
     [string]$Assignee, 
     [string]$Path = 'TeamRoles.xml' 
    ) 

    if (Test-Path $Path) { 
     $TeamRoles = Import-Clixml $Path 
     $ExistingRole = $TeamRoles | Where {$_.Role -eq $Role} 
    } else { 
     $TeamRoles = @() 
    } 

    if ($ExistingRole) { 
     $ExistingRole.Assignee = $Assignee 
    } else { 
     $RoleObj = New-Object -TypeName PSCustomObject 

     $NewRole = @{ 
      Role = $Role; 
      Assignee = $Assignee; 
     } 

     Add-Member $NewRole -InputObject $RoleObj 
     $TeamRoles += $RoleObj 
    } 

    $TeamRoles | Export-Clixml -Path $Path -Force 
} 
+1

を私はimprotedファイルは、単一の項目が含まれている疑いがあるでしょう。 '$ TeamRoles = @(Import-Clixml $ Path)'を試してみてください。 –

答えて

1

すると、入力XMLファイルには、1つのオブジェクトのみ、文が含まれてい

$TeamRoles = Import-Clixml $Path 

配列、および結果的に文を生成しません

$TeamRoles += $RoleObj 

は、配列に追加する代わりにそのオブジェクトに対して追加操作を呼び出そうとします(そのオブジェクトがそのような操作をサポートしていない場合は失敗します)。

あなたはarray subexpression operatorImport-Clixmlを実行することにより、アレイにインポートしたデータを強制することができます

$TeamRoles = @(Import-Clixml $Path) 
関連する問題