使用PowerShell

时间:2017-03-23 09:51:35

标签: powershell

我无法理解如何将现有项目添加到通过Import-CliXML加载的对象(在此实例中)。

我的XML文件是一个简单的对象,其中包含角色和受让人对的表。当文件不存在时,它可以正常工作。如果文件包含现有角色,则会成功更新。但是,如果文件中不存在所设置的角色(因此应该添加到该文件中),我会收到此错误:

  

方法调用失败,因为[System.Management.Automation.PSObject]不包含名为' op_Addition'的方法。
  在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 个答案:

答案 0 :(得分:1)

当输入XML文件只包含一个对象时,语句

$TeamRoles = Import-Clixml $Path

不会生成数组,因此声明

$TeamRoles += $RoleObj

将尝试在该对象上调用添加操作,而不是追加到数组(如果该对象不支持此类操作,则会失败)。

您可以在array subexpression operator中运行Import-Clixml,将导入的数据强制转换为数组:

$TeamRoles = @(Import-Clixml $Path)