0

我们即将进行大规模审计,我们希望确保所有被称为员工的 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*
4

2 回答 2

3

所以看起来您的 CSV 文件中没有“ID”标题,导致它不是可用属性,很容易修复确认 CSV 文件的内容,如果一切看起来正确,请尝试运行Import-Csv termname.csv | ForEach-Object { Write-Host $_.id }以确认财产是正确的。但是,您在此处使用也会遇到问题-Contains,因为该运算符旨在检查数组是否包含特定值,您需要使用Name -Like "*$($_.id)*"

于 2016-12-02T16:24:09.353 回答
1

经过几个小时的挖掘,我在这里找到了答案:

Import-CSV 和 Foreach 以使用 Get-ADUser

特别感谢Mike-Like ,他对如何测试代码的成功进行了一些很好的思考。

最终工作的线路是:

Import-Csv termname.csv | ForEach-Object {
   Get-ADComputer -Filter "Name -Like '*$($_.id)*'"
} | Export-Csv termout.csv

显然,Powershell 讨厌{{}}.

再次感谢大家!

于 2016-12-03T18:43:09.307 回答