2016-12-02 62 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)*"