Powershell 比较字符串数组并在与Out GridView匹配时显示结果?

Powershell 比较字符串数组并在与Out GridView匹配时显示结果?,powershell,Powershell,如何获得结果,使AllowedSenderDomains中已列出的用户电子邮件地址显示在UserEmailDomainReadyRegistered数组中,以便输出到OGV $UserEmailDomainAlreadyRegistered = # If the user email domain is found in the $AllowedSenderDomains, then display it in OGV $AllowedSenders = @('User.Name@domain

如何获得结果,使AllowedSenderDomains中已列出的用户电子邮件地址显示在UserEmailDomainReadyRegistered数组中,以便输出到OGV

$UserEmailDomainAlreadyRegistered = # If the user email domain is found in the $AllowedSenderDomains, then display it in OGV

$AllowedSenders = @('User.Name@domain.com', 'User2.Name2@domain.net', 'User3.Name3@domain.net','unique.user@email.com')
    
$AllowedSenderDomains = @('domain.net', 'domain.com')
上述的预期结果是:

'User.Name@domain.com'
'User2.Name2@domain.net'
'User3.Name3@domain.net'
更新代码:

$policyName = '*'
$policy = Get-HostedContentFilterPolicy -Identity $PolicyName

$AllowedSenderDomains = $Policy.'AllowedSenderDomains' | Select-Object -ExpandProperty Domain -Unique
$AllowedSenders = $Policy.'AllowedSenders' | Select-Object Sender

$allowedDomains = '@({0})$' -f (($AllowedSenderDomains | ForEach-Object { [regex]::Escape($_) }) -join '|')
$AllowedSenders | Where-Object { $_ -match $allowedDomains } | OGV

$AllowedSenders | Where-Object { $AllowedSenderDomains -contains ($_ -split '@')[-1] } | OGV
上面两个OGV都显示空内容

$AllowedSenderDomains
Domain1.com
Domain2.net
Domain3.org

$AllowedSenders
User1@domain1.com
User2@domain2.net
User3@Domain3.org

只需使用
where object
commandlet筛选出您不想要的域:

# ~> $AllowedSenders | Where-Object { $_.Substring($_.LastIndexOf('@')+1) -in $AllowedSenderDomains}
User.Name@domain.com
User2.Name2@domain.net
User3.Name3@domain.net

只需使用
where object
commandlet筛选出您不想要的域:

# ~> $AllowedSenders | Where-Object { $_.Substring($_.LastIndexOf('@')+1) -in $AllowedSenderDomains}
User.Name@domain.com
User2.Name2@domain.net
User3.Name3@domain.net

另一种方法是使用regex,尽管只允许使用两个域,但这可能有些过分:

$AllowedSenderDomains = 'domain.net', 'domain.com'
$AllowedSenders       = 'User.Name@domain.com', 'User2.Name2@domain.net', 'User3.Name3@domain.net','unique.user@email.com'

# create a regex from the allowed domains by joining them with OR (|)
# the regex is preceeded by the AT sign (@) and anchored to the end of the string with '$'
$allowedDomains = '@({0})$' -f (($AllowedSenderDomains | ForEach-Object { [regex]::Escape($_)}) -join '|')
# next, use -match to get only the emailaddresses that match the regex
$AllowedSenders | Where-Object { $_ -match $allowedDomains }
您还可以使用
-split
作为另一种选择,如下所示:

$AllowedSenders | Where-Object { $AllowedSenderDomains -contains ($_ -split '@')[-1] }
结果

User.Name@domain.com
User2.Name2@domain.net
User3.Name3@domain.net

另一种方法是使用regex,尽管只允许使用两个域,但这可能有些过分:

$AllowedSenderDomains = 'domain.net', 'domain.com'
$AllowedSenders       = 'User.Name@domain.com', 'User2.Name2@domain.net', 'User3.Name3@domain.net','unique.user@email.com'

# create a regex from the allowed domains by joining them with OR (|)
# the regex is preceeded by the AT sign (@) and anchored to the end of the string with '$'
$allowedDomains = '@({0})$' -f (($AllowedSenderDomains | ForEach-Object { [regex]::Escape($_)}) -join '|')
# next, use -match to get only the emailaddresses that match the regex
$AllowedSenders | Where-Object { $_ -match $allowedDomains }
您还可以使用
-split
作为另一种选择,如下所示:

$AllowedSenders | Where-Object { $AllowedSenderDomains -contains ($_ -split '@')[-1] }
结果

User.Name@domain.com
User2.Name2@domain.net
User3.Name3@domain.net

您可以显示您尝试过的任何内容吗?您可以显示您尝试过的任何内容吗?谢谢@zdan,它会引发错误:方法调用失败,因为[Selected.System.Management.Automation.PSCustomObject]不包含名为“LastIndexOf”的方法。在第1行,字符数为34+。。。在$AllowedSenderDom中重新对象{$$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,RuntimeException+FullyQualifiedErrorId:MethodNotFound@SeniorSystemsEngineer这是因为您没有在管道中传递字符串对象。您没有说对象来自哪里,您的示例只有字符串。保存允许的发送者的属性的名称是什么?谢谢@zdan,它抛出错误:方法调用fa由于[Selected.System.Management.Automation.PSCustomObject]不包含名为“LastIndexOf”的方法,因此被iled。第1行字符:34+…re对象{$$\uOf子字符串($\.LastIndexOf('@')+1)-在$AllowedSenderDom中…+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~无效操作:(LastIndexOf:String)[],RuntimeException+FullyQualifiedErrorId:MethodNotFound@SeniorSystemsEngineer这是因为您没有在管道中传递字符串对象。您没有说对象来自何处,您的示例只有字符串。保存允许的发件人的属性的名称是什么?感谢您在我引入Corpora时提出的建议将您的建议输入到代码中,结果不会显示任何内容?请参阅问题中的上述更新代码。@SeniorSystemsEngineer我认为您错过了
$AllowedSenders
上的
-ExpandProperty Sender
,因为您还需要一个字符串数组进行比较感谢您在我合并您的建议输入到代码中,结果没有显示任何内容?请参阅问题中的上述更新代码。@SeniorSystemsEngineer我认为您错过了
$AllowedSenders
上的
-ExpandProperty Sender
,因为您还需要一个字符串数组进行比较