简体   繁体   English

Powershell - 检查变量是否在数组中

[英]Powershell - Check if variable is in array

I created a script which return emails with specific subject and sender email addresses,我创建了一个脚本,它返回带有特定主题和发件人电子邮件地址的电子邮件,

i have array of emails, and i need to compare each array member with email sender, and write output for allowed senders and if found, write output for disallowed ones我有电子邮件数组,我需要将每个数组成员与电子邮件发件人进行比较,并为允许的发件人写入输出,如果找到,则为不允许的发件人写入输出

$sender = $result.Sender.Address - exports senders for each email
$allowed_senders = @("user1@example.com", "user2@example.com") - users who are allowed to send emails

I have 3 emails with following senders:我有以下发件人的 3 封电子邮件:

user1, user2 and user3用户 1、用户 2 和用户 3

write-output "Searching for emails with subject New Empoyee.." | timestamp >> $LogFile
      Write-Verbose "Searching for emails with subject New Empoyee.."
      $searchfilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Subject,"New Employee")
      $itemView = new-object Microsoft.Exchange.WebServices.Data.ItemView(999)
      $searchResults = $service.FindItems($Folder.ID, $searchfilter, $itemView)

      # Find destination folder

      $TargetFolderSearch = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::Displayname,"done") #for each folder in mailbox define search
      $TargetFolder = $MailboxRoot.FindFolders($TargetFolderSearch,$fvFolderView)
      Write-Verbose "Searching for emails with subject New Empoyee finished"
      write-output "Searching for emails with subject New Empoyee finished" | timestamp >> $LogFile

          write-output "Parsing Email Body..." | timestamp >> $LogFile 
          Write-Verbose "Parsing Email Body..."

           $allowed_senders = @("user1@example.com", "user2@example.com")
          foreach($result in $searchResults){
            $sender = $result.Sender.Address
              if ($array -notcontains $allowed_senders){
                 Write-Verbose "$sender is not allowed"
              }
              else{
                Write-Verbose "$sender is allowed"
              }

           }

user3@example.com is not in array so i expect following output user3@example.com 不在数组中,所以我希望有以下输出

Expected output:预期输出:

user3@example.com is not allowed不允许 user3@example.com

user1@example.com is allowed允许 user1@example.com

user2@example.com is allowed允许 user2@example.com

Actual output:实际输出:

user1@example.com is not allowed不允许 user1@example.com

user2@example.com is not allowed不允许 user2@example.com

user3@example.com is not allowed不允许 user3@example.com

Figured it out:弄清楚了:

i made a typo, i compared non-existing @array variable我打错了,我比较了不存在的@array变量

 $TargetFolderSearch = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.FolderSchema]::Displayname,"done") #for each folder in mailbox define search
      $TargetFolder = $MailboxRoot.FindFolders($TargetFolderSearch,$fvFolderView)
      Write-Verbose "Searching for emails with subject New Empoyee finished"
      write-output "Searching for emails with subject New Empoyee finished" | timestamp >> $LogFile

          write-output "Parsing Email Body..." | timestamp >> $LogFile 
          Write-Verbose "Parsing Email Body..."

          $array = @("user1@example.com", "user2@example.com")
          foreach($result in $searchResults){
              $sender = $result.Sender.Address
              if($array -notcontains $sender){
                 Write-Verbose "Not Allowed:$sender"
              }  
              else{
                 Write-Verbose "Allowed:$sender"
              }

           }

Output:输出:

user3@example.com is not allowed不允许 user3@example.com

user1@example.com is allowed允许 user1@example.com

user2@example.com is allowed允许 user2@example.com

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM