【问题标题】:How to solve the "'IndexOf'." error in PowerShell script如何解决“'IndexOf'”。 PowerShell 脚本中的错误
【发布时间】:2018-03-30 06:30:12
【问题描述】:

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

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

【问题讨论】:

  • 在这种情况下你想用IndexOf()做什么?
  • P.S.评论你的代码对所有;-) 都有很大的好处
  • 您的代码看起来很复杂。请退后一步,描述您要解决的实际问题,而不是您认为的解决方案。你想用你的代码完成什么?
  • 我想找出一个对象在列表中的索引,一旦我确定了对象,我需要从另一个列表中删除该对象。当我比较两个文件时会发生这种情况。
  • 代码的目的是根据第二个文件的详细信息删除第一个文件中的服务器列表。第二个文件包含需要在第一个文件中删除的服务器详细信息列表。

标签: powershell indexof


【解决方案1】:

您收到该错误是因为您在 $serverlist_csv1 的管道调用中使用了 select-object,它在对象上创建了一个层,有效地创建了一个新对象 pscustomobject,这使得它失去了 indexOf() 方法。

如果您避免此步骤,而是尝试例如在导入 csv 时排除该步骤,或者如果您不需要该属性,则将成员修改为空。就像我之前的人说的那样,这似乎不是解决任何问题的更好方法。

【讨论】:

    【解决方案2】:

    从第二个文件构建服务器名称列表:

    $exclude = Import-Csv $file2 | Select-Object -Expand 'Exclude Server'
    

    然后过滤第一个文件中SourceHostName 列不是这些名称之一的行并将结果写回文件:

    Import-Csv $file1 | Where-Object {
        $exclude -notcontains $_.SourceHostName
    } | Export-Csv 'C:\output.csv' -NoType
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2019-05-23
      相关资源
      最近更新 更多