Question

J'essaie d'exécuter la commande PowerShell suivante sur mon serveur Exchange 2010 SP1 :

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
New-MailboxExportRequest -Mailbox $objItem -FilePath \\server\share$\"$objItem".pst
}

Lorsque je fais cela, je reçois l'erreur :

Impossible de trouver une base de données adaptée au stockage de cette requête.+ Informations sur la catégorie :Argument invalide:(Domain.com .... D / John Doe: MailboxormauluserIdParameter) [New-M AilBoxExportTreQuest], MailboxDatabase ... ManentException + FullQualifiedErrodid:9322CB6D,Microsoft.Exchange.Management.RecipientTasks.NewMailboxExportRequest

Ce que j'essaie de faire, c'est de rechercher parmi mes utilisateurs AD, de localiser les utilisateurs qui ont la chaîne ExportPST dans le champ Office, puis d'exporter la commande New-MailboxExportRequest pour exporter l'intégralité du contenu de la boîte aux lettres de l'utilisateur vers un fichier PST pour chaque utilisateur renvoyé.

Lorsque j'ajoute un Write-Host à ce qui précède, les valeurs affichées sont correctes :

New-MailboxExportRequest -Mailbox jdoe -FilePath " \\server\share$\John Doe.pst"

La sortie inclut également un espace supplémentaire entre -FilePath " et \, ce qui, j'imagine, provoquera un problème une fois le problème ci-dessus résolu. Existe-t-il un moyen de contacter des chaînes sans ajouter cet espace supplémentaire ?

Merci,

Mat

Était-ce utile?

La solution

Je pense que votre citation est un peu fausse.L'expansion de chaîne entre guillemets fonctionne lorsque vous entourez complètement la chaîne, pas seulement la partie variable.

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
  New-MailboxExportRequest -Mailbox $objItem -FilePath "\\server\share$\$objItem.pst"
}

Voici une syntaxe alternative qui utilise le formatage/remplacement de chaîne .NET :

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
  New-MailboxExportRequest -Mailbox $objItem -FilePath ('\\server\share$\{0}.pst' -f $objItem)
}

Pour faciliter le dépannage/le débogage, vous pouvez attribuer le chemin du fichier à une variable, puis transmettre la variable dans le -FilePath paramètre.De cette façon, vous pouvez voir exactement quelle valeur est transmise.

$colItems = Get-Mailbox -Filter {office -eq "ExportPST"}
ForEach($objItem in $colItems)
{
  $FilePath = '\\server\share$\{0}.pst' -f $objItem;
  Write-Host -Object ('$FilePath value is: {0}' -f $FilePath);
  New-MailboxExportRequest -Mailbox $objItem -FilePath $FilePath;
}

Autres conseils

Si $objItem est une chaîne que vous pouvez faire :

-FilePath "\\server\share$\${objItem}.pst"

Vous pouvez savoir s'il s'agit d'une chaîne en faisant ceci :

$objItem.GetType().FullName

Même si ce n'est pas une chaîne, cela peut quand même fonctionner si les objets ToString() La méthode fournit la valeur dont vous avez besoin car PowerShell appellera automatiquement le ToString() méthode de l’objet et placez-le dans votre chaîne.Donc si cela vous donne la valeur souhaitée : $objItem.ToString() alors vous pouvez également l'utiliser.S'il existe cependant une propriété telle que $objItem.Name à laquelle vous devez accéder, vous devrez alors utiliser la concaténation de chaînes, une sous-expression ou le formatage de chaîne .NET.

  • Enchaînement: -FilePath ("\\server\share$\" + $objItem.Name + ".pst")
  • Sous-expression : -FilePath "\\server\share$\$($objItem.Name).pst"
  • Formatage de chaîne .NET : -FilePath ("\\server\share$\{0}.pst" -f $objItem.Name)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top