2017-02-23 161 views
0

我正在努力解決以下正在處理的腳本的邏輯問題。我有資產編號列表當前存儲在一個文本文件,如下所示:Powershell自定義對象屬性值

assetlist.txt 
111111 
222222 
333333 
444444 

我試圖查詢Active Directory,以驗證是否ADComputer對象存在。如果找到了,我正在查找ADComputer名稱和DistinguishedName。以下是我的代碼示例:

$assetList = Get-Content C:\assetlist.txt 

Foreach ($asset in $assetList){ 
    $adComputer = Get-ADComputer -Filter "Name -like '*$assett'" | Select-Object Name, DistinguishedName 

    $resultTable = @() 
    $result = New-Object -TypeName PSObject 
    $result | Add-Member -MemberType NoteProperty -Name AssetNumber -Value $asset 
    $result | Add-Member -MemberType NoteProperty -Name ADName -Value $adComputer.Name 
    $result | Add-Member -MemberType NoteProperty -Name OU -Value $adComputer.DistinguishedName 
    $resultTable += $result 

    $resultTable 
} 

我在操作結果時想迷失在結果表中。最後,我想看看大意如下的東西返回:

AssetNumber   ADName     OU 
-----------   ------     -- 
111111    111111.mydomain.com  CN=111111,OU=MYOU,DC=mydomain,DC=com 
222222    Not Found    Not Found 
333333    333333.mydomain.com  CN=333333,OU=MYOU,DC=mydomain,DC=com 

我知道我缺少一個IF語句當前是否顯示如果「未找到」的消息被記錄在它的位置的結果來處理。但是,目前我被卡住,甚至得到正確的價值被返回。

任何指導將不勝感激。這裏也有幾個鏈接我已經超過迄今的一些研究:

https://technet.microsoft.com/en-us/library/ff730946.aspx https://blogs.technet.microsoft.com/josebda/2014/04/19/powershell-tips-for-building-objects-with-custom-properties-and-special-formatting/

回答

1

要靠近你的代碼,但使用[pscustomobject]

$assetList = Get-Content C:\assetlist.txt 
$resultTable = @() 

Foreach ($asset in $assetList){ 
    $adComputer = Get-ADComputer -Filter "Name -like '*$asset'" 
    If ($adComputer){ 
    $result = [pscustomobject][ordered]@{AssetNumber = $asset 
             ADName = $adComputer.Name 
             OU = $adComputer.DistinguishedName} 
    } else { 
    $result = [pscustomobject][ordered]@{AssetNumber = $asset 
             ADName = 'Not Found' 
             OU = 'Not Found'} 
    } 
    $resultTable += $result 
} 
$resultTable 
+0

感謝您的反饋。我認爲這最符合我所期望的。 – Jason

0

你在你的Get-ADComputer$asset後,一個額外的t。構建您的對象可以用Select-Object替換爲計算屬性。

$assetList = Get-Content C:\assetlist.txt 

$resultTable = Foreach ($asset in $assetList){ 
    $adComputer = Get-ADComputer -Filter "Name -like '*$asset'" | 
     Select-Object @{Name = 'Asset'; Expression = {$Asset}},@{Name = 'ADName'; Expression = {$_.Name}}, @{Name = 'OU'; Expression = {$_.DistinguishedName}} 
    if ($null -eq $adComputer) { 
     $adComputer = "" | Select-Object @{Name = 'Asset'; Expression = {$Asset}},@{Name = 'ADName'; Expression = {"Not Found"}}, @{Name = 'OU'; Expression = {"Not Found"}} 
    } 
    $adComputer 
} 
+0

感謝您指出的錯誤。我現在看到什麼是錯的。 – Jason