【问题标题】:PSCustomObject foreachPSCustomObject foreach
【发布时间】:2013-12-13 17:25:57
【问题描述】:

我创建了一个自定义对象,但在输出一个数组时遇到了一些问题。

$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

问题在于 Disabled 数组,而不是我得到的每行显示一个项目 {False, True, False, False} 我知道我可能必须在该行某处添加%,但我不确定在哪里。

有人有什么建议吗?

【问题讨论】:

    标签: powershell foreach custom-component


    【解决方案1】:

    您所看到的对我来说很有意义 - 您正在创建一个包含 ComputerNameUserName 等的对象数组,而在 Disabled 中,您将获得一组值,因为您正在查询所有本地用户帐户并获得其禁用状态。我怀疑你想要的是确定 each 用户依次被禁用。在这种情况下,您需要稍微扩展Get-WMIObject 上的Filter 以仅获取单个用户。

    $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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2011-04-13
      • 2021-12-18
      • 2013-12-21
      • 2020-08-25
      相关资源
      最近更新 更多