【问题标题】:Accessing properties or turning hashtable into object访问属性或将哈希表转换为对象
【发布时间】:2021-11-07 23:07:45
【问题描述】:

所以基本上我正在尝试返回与我的白名单中的帐户不匹配的帐户列表。

我就是这样做的。

$UserList = Get-ADUser -Filter * -Server $domain | select -Property Name, samAccountName
$checkUsers = $UserList | Select-String -pattern $whitelist -notMatch

现在$checkUsers 将值存储为(我能理解的哈希表)从Select-String 返回。

@{Name=user1; samAccountName=user1}
@{Name=user2; samAccountName=user2}
@{Name=user3; samAccountName=user3}

我已经尝试了很多事情来让你对细节感到厌烦,所以我会简短地说,我会直截了当,我现在正在失去理智......

如何将它变成一个对象,以便我可以:例如。

ForEach ($user in $myNewObject) { Write-Host $user.Name }

如果我自己创建一个哈希表并在其中存储一些值,我可以访问没有问题,但是当它从Select-String 的输出返回时,我无法用它做任何事情......

【问题讨论】:

    标签: powershell powershell-5.1


    【解决方案1】:

    Select-String 用于字符串,而不是对象。 :)

    假设我们有一个像这样的 SamAccountNames 白名单

    $whiteList = @('User1', 'User3')
    

    我们有一些用户

    $UserList
    
    
    Name        SamAccountName
    ----        --------------
    First User  User1
    Second User User2
    Third User  User3
    

    我们可以通过Where-Object 执行以下操作来取回不在我们白名单中的帐户

    $UserList | Where-Object SamAccountName -notin $whitelist
    # OR
    # $UserList | Where-Object -FilterScript { $_.SamAccountName -notin $whitelist }
    

    输出

    Name        SamAccountName
    ----        --------------
    Second User User2
    

    将哈希表转化为对象

    只需在您的哈希表前面加上 [PSCustomObject] 类型加速器即可。

    [PSCustomObject]@{Name='user1'; samAccountName='user1'}
    
    Name  samAccountName
    ----  --------------
    user1 user1
    
    

    如果您将哈希表保存在变量中,则相同

    $hashUser = @{Name='user1'; samAccountName='user1'}
    [PSCustomObject]$hashUser
    
    samAccountName Name
    -------------- ----
    user1          user1
    

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2017-11-24
      • 1970-01-01
      • 2017-04-04
      相关资源
      最近更新 更多