0

Je dois automatiser l'application de la stratégie de rétention Exchange 2010 sur les boîtes aux lettres créées dans les 7 jours. Mais j'ai également besoin d'exclure tous les serveurs non basés aux États-Unis, car ceux-ci sont gérés par l'informatique à l'étranger.Powershell renvoie les boîtes aux lettres créées dans les 7 jours et réside sur le serveur spécifié.

Ceci est la préface de mon script qui permet la connexion à l'échange sans interaction humaine. De cette façon, je peux planifier cela dans Windows.

If (Test-Path C:\temp\mycred.xml) {$UserCredential = Import-CliXML C:\temp\mycred.xml} 
else{ 
Get-Credential | Export-CliXml C:\temp\mycred.xml 
$UserCredential = Import-CliXML C:\temp\mycred.xml} 

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://munprdcasht04.exchange.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential 
import-PSSession $Session 

Ceci est mon code actuel pour retourner les boîtes aux lettres créées dans les 7 jours

Get-Mailbox -ResultSize Unlimited| Where-Object { 
($_.WhenCreated –ge ((Get-Date).Adddays(-7)))} | 
ft -auto Name,WhenCreated,Retentionpolicy,servername 

Cela fonctionne pour moi, mais quand j'ajouter un opérateur de limiter les boîtes aux lettres sur des serveurs spécifiques, la commande est terminée, mais ne imprime pas tous les résultats, donc je suppose qu'il y a 0 enregistrements correspondants.

Get-Mailbox -ResultSize Unlimited| Where-Object { 
    ($_.WhenCreated –ge ((Get-Date).Adddays(-7))) -and 
    ($_.ServerName -contains "munprdmbxa") | 
    ft -auto Name,WhenCreated,Retentionpolicy,servername 

Je ne l'ai pas encore regardé en permettant effectivement la politique de rétention que je suis juste en train de retourner mes données cible avant de plonger dans cette aventure. J'apprécie toute aide.

+1

-contains nécessiterait une correspondance exacte du nom du serveur entier. '-like" * munprdmbxa * "' pourrait être plus facile à gérer –

+0

@Kai Zhao Cela a fonctionné !! Je vous remercie. Si vous mettez ceci dans une réponse, indiquez-le comme complet. – mttp1990

Répondre

1

-contains dans powershell renvoie True uniquement lorsqu'une chaîne correspond exactement. Il agit plus comme -eq sur une seule chaîne mais a également la capacité de déterminer si un élément est contenu dans un ensemble.

par exemple

$test = "aaa" 
$test -contains "aaa" 

$test = "aaa","bbb","ccc" 
$test -contains "aaa" 

Les deux cependant, retournerait au-dessus True, il ne serait pas retourner vrai pour un sous-chaîne et wild card ne fonctionne pas avec elle.

$test = "aaa.domain.com" 
$test -contains "aaa" 

$test = "aaa.domain.com" 
$test -contains "*aaa*" 

reviendriez False

Ainsi, si le nom du serveur est FQDN avec le suffixe de domaine etc, la chaîne ne serait pas une correspondance exacte. Si vous utilisez plutôt l'opération -like, vous pouvez faire correspondre un sous-ensemble de chaîne dans la chaîne donnée avec caractères génériques:

par exemple:

$test = "aaa.domain.com" 
    $test -like "*aa*" 

    $test = "aaa.domain.com" 
    $test -like "aa*.com" 

retournera les deux True

Ainsi, en utilisant -like opérateur serait plus susceptible de éviter les résultats faussement négatifs.