【发布时间】:2017-04-17 14:36:33
【问题描述】:
我们即将进行大规模审计,我们希望确保所有被称为员工的 AD 计算机帐户都已停用。我有一个 .csv,它有一个我们使用的唯一标识符 - 我们的架构在 ADcomputer Name 属性的中间包含该 ID。我在正确地将导入的 csv 对象 及其属性 传送到过滤器时遇到了巨大的麻烦。我想。我不完全确定。这就像我一直在尝试的。
Import-Csv termname.csv | ForEach-Object
{ Get-ADComputer -Filter { Name -Contains "$($_.id)" } } |
Export-Csv termcomp.csv -NoTypeInformation
这个“脚本”一共没有提取任何内容,而我在测试的时候就知道了
Get-ADComputer -Filter { Name -Contains $id }
$id 是唯一 ID,我在 AD 计算机对象上得到了点击。同样,测试这个块
Import-Csv termname.csv | ForEach-Object { Get-ADComputer { Name -Contains $_.id }
PowerShell 的错误是:
..."Property 'id' not found in object of type: 'System.Management.Automation.PSCustomObject'.
我认为我误解了在这种情况下究竟什么是“对象”。整个导入的数组是一个对象,具有 .id 的属性吗?还是每一行都有自己的对象,带有 .id 属性?而且,无论哪种方式,为什么 PowerShell 对管道对象如此强烈反对,毕竟这是它的主要工作?
有没有更好的方法来完成整个过程?我是否以某种方式过度思考了整个混乱局面?
更新
根据要求,csv 文件的示例内容。接受使用通配符的建议,我已将通配符放入 .csv 本身,这可能不是最优雅的解决方案。但只要它有效!这是从 Notepad++ 复制的示例
id
*rstarr56*
*jlennon58*
*pmcartney74*
*gharrison68*
【问题讨论】:
-
能否请您也分享 CSV 文件内容。至少一些 tha 值,以便我们可以看到内容在 powershell 中的准确程度。 ?
-
我看到的大问题是包含的使用,它用于测试一个项目是否在集合中。简单的答案是改用 like 和 * 通配符。
标签: powershell csv foreach active-directory import-csv