2013-12-13 26 views
1

我創建了一個自定義對象,並且在輸出一個數組時遇到了一些麻煩。PSCustomObject foreach

$i = "computername" 
$adsi = [ADSI]"WinNT://$i" 
$Object = $adsi.Children | ? {$_.SchemaClassName -eq 'user'} | % { 
New-Object -TypeName PSCustomObject -Property @{ 
    ComputerName = $i.toupper() -join '' 
    UserName = $_.Name -join '' 
    Groups = ($_.Groups() |Foreach-Object {$_.GetType().InvokeMember("Name",  'GetProperty', $null, $_, $null)}) -join ',' 
    Disabled = Get-WmiObject -ComputerName $i -Class Win32_UserAccount -Filter "LocalAccount='$true'"|Select-Object -expandproperty Disabled 
    } 
    } 

$object 

問題是與殘疾人陣列,而不是每行顯示一個項目我越來越 {False, True, False, False}我知道我有可能是在某個地方%上添加該行,但我不知道在哪裏。

任何人有任何建議?

回答

2

你看到的是有道理的我 - 你要創建一個對象數組持有ComputerNameUserName等,並在Disabled你得到的值的數組,因爲要查詢所有本地用戶帳戶並獲得其禁用狀態。我懷疑你想要的是確定每個用戶反過來被禁用。在這種情況下,您需要將FilterGet-WMIObject稍微擴展一下,才能獲得單個用戶。

$i = "computername" 
$adsi = [ADSI]"WinNT://$i" 
$Object = $adsi.Children | ? {$_.SchemaClassName -eq 'user'} | % { 
$UserName = $_.Name -join ''; 
New-Object -TypeName PSCustomObject -Property @{ 
    ComputerName = $i.toupper() -join '' 
    UserName = $UserName 
    Groups = ($_.Groups() |Foreach-Object {$_.GetType().InvokeMember("Name",  'GetProperty', $null, $_, $null)}) -join ',' 
    Disabled = Get-WmiObject -ComputerName $i -Class Win32_UserAccount -Filter "LocalAccount='$true' and name='$UserName'"|Select-Object -expandproperty Disabled 
    } 
    } 

$object 
+0

這個工作!謝謝! – JoeRod