0

所以基本上我试图返回一个与我的白名单中的帐户不匹配的帐户列表。

我就是这样做的。

$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,我不能用它做任何事情......

4

1 回答 1

3

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
于 2021-09-12T08:04:48.767 回答