运行以下脚本时出现错误:
“方法调用失败,因为[System.Management.Automation.PSCustomObject]不包含名为'IndexOf'的方法”。
请帮助我找到解决方案,以避免在运行以下脚本时出现上述错误。
代码:
$serverlist_csv1 = Import-Csv -Path $file1
$serverlist_temp1 = $serverlist_csv1
$exclude_serverlist_csv = Import-Csv -Path $file2
foreach ($server in $exclude_serverlist_csv) {
$servers1 = ($serverlist_csv1.'SourceHostName' | Select-Object -ExcludeProperty 'SourceHostName')
if ($servers1 -contains $server.'Exclude Server') {
$server_object1 = ($serverlist_csv1 | Where-Object {$_.SourceHostName -eq $server.'Exclude Server'})
$serverindex1 = $serverlist_csv1.IndexOf($server_object1)
$dataResizable1 = {$serverlist_csv1}.Invoke()
$dataResizable1.RemoveAt($serverindex1)
$serverlist_csv1 = $dataResizable1
}
}
答案 0 :(得分:0)
您收到该错误是因为您在$ serverlist_csv1的管道调用上使用了select-object,这会在对象上创建一个层,从而有效地创建一个新的对象pscustomobject并使其失去indexOf()方法。
如果您避开此步骤,而是尝试在导入csv时排除该步骤,或者如果您不需要该属性,则将该成员修改为空。关键是就像我之前说的那样,似乎不是解决这个问题的更好方法。
答案 1 :(得分:0)
从第二个文件构建服务器名称列表:
$exclude = Import-Csv $file2 | Select-Object -Expand 'Exclude Server'
然后过滤第一个文件,查找SourceHostName
列不是其中一个名称的行,并将结果写回文件:
Import-Csv $file1 | Where-Object {
$exclude -notcontains $_.SourceHostName
} | Export-Csv 'C:\output.csv' -NoType