我无法理解如何将现有项目添加到通过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
}
答案 0 :(得分:1)
当输入XML文件只包含一个对象时,语句
$TeamRoles = Import-Clixml $Path
不会生成数组,因此声明
$TeamRoles += $RoleObj
将尝试在该对象上调用添加操作,而不是追加到数组(如果该对象不支持此类操作,则会失败)。
您可以在array subexpression operator中运行Import-Clixml
,将导入的数据强制转换为数组:
$TeamRoles = @(Import-Clixml $Path)