Mon objectif est d'appliquer une stratégie de rétention aux boîtes aux lettres nouvellement créées. Détails de l'article précédent here.Powershell: lecture en boucle de la liste des noms de la demande d'échange
Mon actuel code de script est situé here pour une meilleure lisibilité ou au-dessous:
# Get Start Time for script timer
$startDTM = (Get-Date)
#Authenticate using cached credentials or re-prompt for credentials.
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}
#Connect to Exchange Server
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://munprdcasht04.exchange.com/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $Session
#returns alias' for mailboxes where creation date is <= 7 days and
#resides on "ABC" or "DEF" server and has no retention policy applied
$NeedsRetentions = (Get-Mailbox -ResultSize Unlimited| Where-Object {
($_.WhenCreated –ge ((Get-Date).Adddays(-7))) -and
(($_.ServerName -like "*munprdmbxa*") -or ($_.ServerName -like "*wauprdexa*")) -and
($_.retentionpolicy -ne "PurgeDeletedItemsFolder_60days")} |
ft -auto alias)
ForEach ($NeedsRetention in $NeedsRetentions){
set-mailbox -Identity $NeedsRetention -RetentionPolicy "PurgeDeletedItemsFolder_60days"
}
# Get End Time
$endDTM = (Get-Date)
# Echo Time elapsed
"Elapsed Time: $(($endDTM-$startDTM).totalseconds) seconds"
Quand je fais l'écho des $NeedsRetentions
que je reçois la liste des utilisateurs AD que j'ai besoin d'appliquer une politique de rétention. Mais pour une raison quelconque, lorsque je boucle la liste des variables avec la boucle ci-dessous, elle émet une erreur en disant que l'option -Identity n'est pas valide.
ForEach ($NeedsRetention in $NeedsRetentions){
set-mailbox -Identity $NeedsRetention -RetentionPolicy "PurgeDeletedItemsFolder_60days"
}
Pour résoudre i réduit la boucle à ceci afin d'afficher les noms d'utilisateur individuels affectés par le script:
ForEach ($NeedsRetention in $NeedsRetentions){
[System.Windows.Forms.MessageBox]::Show($NeedsRetention)
}
Faire cela provoque une boîte de message à afficher pour chaque ligne dans la variable mais la chaîne semble être vide et donc le message par défaut apparaît sur la boîte de message.
Toutes les idées pourquoi $NeedsRetention
ne passe pas correctement dans ma tâche en boucle?
L'objet que vous avez stocké dans 'NeedsRetenues' est une boîte aux lettres, la variable que vous essayez de transmettre à' -identity' est susceptible d'être une chaîne. Je n'ai pas ce module donc je ne peux pas tester, mais vous pouvez donner un coup de feu 'set-mailbox -Identity ($ NeedsRetention) .identity -RetentionPolicy" PurgeDeletedItemsFolder_60days "' –
@Kai Zhao Cela a du sens mais quand je fais cette modification je reçois l'erreur suivante pour chaque boîte aux lettres répertoriée dans la variable 'Impossible de lier l'argument au paramètre 'Identity' car il est null. + CategoryInfo: invalidData: (:) [Set-Mailbox], ParameterBindingValidationException » + FullyQualifiedErrorId: ParameterArgumentValidationErrorNullNotAllowed, Set-Mailbox + PSComputerName: munprdcasht04.exchange.com' – mttp1990
' -identity' prend des noms non? qu'est-ce que 'get-mailbox | look-member' ressemble? Devrait être une propriété, vous pouvez utiliser. –