2016-12-02 65 views
0

我们有一个很大的审计,我们希望确保所有被称为员工的AD计算机帐户已被停用。我有一个.csv,它具有我们使用的唯一标识符 - 我们的模式在AD计算机名称属性中包含该ID。我正在将导入的csv对象及其属性正确地布置到过滤器上,遇到了很大的麻烦。我认为。我不完全确定。这就像我一直在尝试的东西。来自import-csv头痛的Powershell管道对象

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'. 

我认为我misapprehending什么恰恰是一个“对象”,在这种情况下。整个导入的数组是一个对象,其属性为.id?或者是每行都有自己的对象,具有.id属性?无论如何,为什么PowerShell会对管道对象产生如此强烈的反对意见?毕竟这是其主要工作?

是否有一个完全更好的方法去完成整个过程?我以某种方式去颠覆整个混乱?

UPDATE

作为csv文件的请求,样本内容。建议使用通配符代替,我已将通配符放入.csv本身,这也可能不是最优雅的解决方案。但只要它有效!这里的样品,从记事本++

id 
*rstarr56* 
*jlennon58* 
*pmcartney74* 
*gharrison68* 
+0

你能不能请分享CSV文件的内容。至少有一些值,以便我们可以看到内容是如何在PowerShell中实现的。 ? –

+1

我看到的大问题是包含的使用,这是用于测试的项目在集合中。简单的答案是使用like和*通配符。 – BenH

回答

0

挖了数小时后,我发现这里的答案:

Import-CSV and Foreach to use Get-ADUser

特别感谢Mike对-Like的一些伟大的思考以及如何测试代码的成功。

该结束了工作的路线是:

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

显然,PowerShell的恨{{}}

再次感谢所有!

1

因此,它看起来像你的CSV文件不具有“ID”,在它的标题,引起不成为一个可用的属性复制,简单的解决方法有确认的内容CSV文件,如果一切看起来正确,请尝试运行Import-Csv termname.csv | ForEach-Object { Write-Host $_.id }以确认该属性是否正确传递。但是你也有使用-Contains这里作为经营者是指检查数组包含特定值的麻烦,你需要使用Name -Like "*$($_.id)*"