2016-11-15 82 views
-2

我需要通過一個正則表達式查詢,他們的顯示名稱的末尾尋找「IM」或「(IM)」,然後將其刪除的一堆用戶。我將首先進行備份導出。PowerShell正則表達式顯示名稱

我已經使用.contains方法,但如果我使用任何蒂姆或伊莫金的可能會對我有點惱火。

$users = Get-DistributionGroupMember 'DGName' | ? { $_.RecipientType -eq 'UserMailbox' } 
$mailboxes = $users | Get-Mailbox 
$output = @() 

$mailboxes | Select-Object Alias, DisplayName | Export-Csv D:\Scripts\PreDisplayNames.csv -NoTypeInformation 

foreach ($mb in $mailboxes){ 
    if ($mb.DisplayName.EndsWith(" (IM)")){ 
     $newString = $mb.DisplayName.TrimEnd(" (IM)") 
     $newStringTD = $mb.DisplayName.TrimEnd(" (IM)") + " (TD)" 
     $resultstring = "Setting DisplayName to $newString" 
     $mb | Set-Mailbox -DisplayName $newString -WhatIf 

    } 
    elseif($mb.DisplayName.EndsWith(" IM")){ 
     $newString = $mb.DisplayName.TrimEnd(" IM") 
     $newStringTD = $mb.DisplayName.TrimEnd(" (IM)") + " (TD)" 
     $resultstring = "Setting DisplayName to $newString" 
     $mb | Set-Mailbox -DisplayName $newString -WhatIf 
    } 
    else{ 
     $newString = 'DNIncorrect' 
     $resultstring = 'Incorrect DisplayName' 
    } 
    $props = [ordered]@{ 
      'DisplayName' = $mb.DisplayName 
      'NewDisplayName' = $newString 
      'NewDisplayName TD' = $newStringTD 
      } 
    $object = New-Object -TypeName PSObject -Property $props 
    $output += $object 
} 

$output | Export-Csv "D:\scripts\DisplayNames.csv" -NoTypeInformation 
+0

無法粘貼代碼,但可能已經回答。 '$ newString = $ string.DisplayName.TrimEnd(「(IM)」)'...所以如果通過迭代,然後是最後一個來處理任何不符合該約定的東西(這是一個大的環境) – Toybits

+0

警告:'.trim()會刪除所有匹配的字符!所以即使'MI'也會被刪除! – restless1987

+0

啊......所以這就是爲什麼我張貼......乾杯restless1987。你會建議更好的方法嗎? – Toybits

回答

0

世界上沒有必要在這裏正則表達式,只需使用一個樣來過濾你的對象,當你收集郵箱

$mailboxes = $users | Get-Mailbox | Where-object {($_.DisplayName -like "*IM") -or ($_.DisplayName -like "*(IM)")}

+0

謝謝麥克。是的,我只是關心任何不遵循約定,因爲它是一個很大的環境猜測,不遵循約定和以IM結尾的名字的可能性是非常不可能的,所以你可能是對的 – Toybits

+0

你可以確定IM或(IM)將總是大寫字母嗎?如果這樣使用的話 - 而且你應該提到一個慣例,但是我不認爲我在原始問題中看到過一個,如果你能告訴我它應該看起來像我可以嘗試的樣子放下r爲你的正則表達式,可以讓你忽略不匹配的東西(或者生成一個非匹配名稱的報告,也可以手動查看即時消息IM) –

+0

Mike再次歡呼。我甚至不知道clike我真的需要更多地使用get-help。按照慣例,我的意思是他們應該以即時消息或(IM)結尾,但希望確保在某些情況下不會因爲我是針對某個組的。我認爲你以前寫過的東西,你說的使用clike而不是like會做伎倆......再次感謝mate – Toybits

0

如果你還是想正則表達式我通常使用以下方法來爲特定單詞生成一個正則表達式。它可能適合你的情況。

$Eliminate = @("bak", "error", "research","Retry") 
[regex]$eliminate_regex = '(?i)(' + (($Eliminate | foreach { [regex]::escape($_) }) -join "|") + ')'