如何解决“'IndexOf'。” PowerShell脚本中的错误

时间:2018-03-27 09:01:19

标签: powershell indexof

运行以下脚本时出现错误:

  

“方法调用失败,因为[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
    }
}

2 个答案:

答案 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