来自 import-csv 问题的 Powershell 管道对象
Powershell pipeline objects from import-csv headaches
我们即将进行一次大型审核,我们希望确保所有指定员工的 AD 计算机帐户都已停用。我有一个 .csv,它具有我们使用的唯一标识符 - 我们的架构在 AD 计算机名称 属性 的中间包含该 ID。我在将导入的 csv 对象 及其 属性 正确地输送到过滤器时遇到了巨大的麻烦。我认为。我不完全确定。这就是我一直在尝试的东西。
Import-Csv termname.csv | ForEach-Object
{ Get-ADComputer -Filter { Name -Contains "$($_.id)" } } |
Export-Csv termcomp.csv -NoTypeInformation
这个"script"一共拉了没内容,而我测试的时候就知道了
Get-ADComputer -Filter { Name -Contains $id }
其中 $id
是唯一 ID,我在 AD Computer 对象上获得了命中。同样,测试这个块
Import-Csv termname.csv | ForEach-Object { Get-ADComputer { Name -Contains $_.id }
PowerShell 的错误是:
..."Property 'id' not found in object of type: 'System.Management.Automation.PSCustomObject'.
我认为在这种情况下我误解了 "object" 的确切含义。整个导入的数组是一个对象,属性 的.id 吗?或者每一行都是它自己的对象,带有 .id 属性?而且,无论哪种方式,为什么 PowerShell 如此强烈反对管道对象,毕竟管道对象是它的主要工作?
有没有更好的方法来完成整个过程?我是不是想得太多了?
更新
根据要求,csv 文件的示例内容。考虑到使用通配符的建议,我将通配符放入 .csv 本身,这同样可能不是最优雅的解决方案。但只要它有效!这是从 Notepad++
复制的示例
id
*rstarr56*
*jlennon58*
*pmcartney74*
*gharrison68*
所以看起来你的 CSV 文件中没有 "ID" 标题,导致它不可用 属性,简单的解决方法是确认 CSV 文件的内容,如果一切看起来都正确,请尝试 运行 Import-Csv termname.csv | ForEach-Object { Write-Host $_.id }
以确认 属性 是否正确。但是,您在这里使用 -Contains
也会遇到麻烦,因为该运算符旨在检查数组是否包含特定值,您需要使用 Name -Like "*$($_.id)*"
经过数小时的挖掘,我在这里找到了答案:
特别感谢 Mike 关于 -Like
以及如何测试代码是否成功的一些重要思考。
最终运行的线路是:
Import-Csv termname.csv | ForEach-Object {
Get-ADComputer -Filter "Name -Like '*$($_.id)*'"
} | Export-Csv termout.csv
显然,Powershell 讨厌 {{}}
。
再次感谢大家!
我们即将进行一次大型审核,我们希望确保所有指定员工的 AD 计算机帐户都已停用。我有一个 .csv,它具有我们使用的唯一标识符 - 我们的架构在 AD 计算机名称 属性 的中间包含该 ID。我在将导入的 csv 对象 及其 属性 正确地输送到过滤器时遇到了巨大的麻烦。我认为。我不完全确定。这就是我一直在尝试的东西。
Import-Csv termname.csv | ForEach-Object
{ Get-ADComputer -Filter { Name -Contains "$($_.id)" } } |
Export-Csv termcomp.csv -NoTypeInformation
这个"script"一共拉了没内容,而我测试的时候就知道了
Get-ADComputer -Filter { Name -Contains $id }
其中 $id
是唯一 ID,我在 AD Computer 对象上获得了命中。同样,测试这个块
Import-Csv termname.csv | ForEach-Object { Get-ADComputer { Name -Contains $_.id }
PowerShell 的错误是:
..."Property 'id' not found in object of type: 'System.Management.Automation.PSCustomObject'.
我认为在这种情况下我误解了 "object" 的确切含义。整个导入的数组是一个对象,属性 的.id 吗?或者每一行都是它自己的对象,带有 .id 属性?而且,无论哪种方式,为什么 PowerShell 如此强烈反对管道对象,毕竟管道对象是它的主要工作?
有没有更好的方法来完成整个过程?我是不是想得太多了?
更新
根据要求,csv 文件的示例内容。考虑到使用通配符的建议,我将通配符放入 .csv 本身,这同样可能不是最优雅的解决方案。但只要它有效!这是从 Notepad++
复制的示例id
*rstarr56*
*jlennon58*
*pmcartney74*
*gharrison68*
所以看起来你的 CSV 文件中没有 "ID" 标题,导致它不可用 属性,简单的解决方法是确认 CSV 文件的内容,如果一切看起来都正确,请尝试 运行 Import-Csv termname.csv | ForEach-Object { Write-Host $_.id }
以确认 属性 是否正确。但是,您在这里使用 -Contains
也会遇到麻烦,因为该运算符旨在检查数组是否包含特定值,您需要使用 Name -Like "*$($_.id)*"
经过数小时的挖掘,我在这里找到了答案:
特别感谢 Mike 关于 -Like
以及如何测试代码是否成功的一些重要思考。
最终运行的线路是:
Import-Csv termname.csv | ForEach-Object {
Get-ADComputer -Filter "Name -Like '*$($_.id)*'"
} | Export-Csv termout.csv
显然,Powershell 讨厌 {{}}
。
再次感谢大家!