Domanda

Sto tentando di eseguire il seguente comando PowerShell contro il mio server Exchange 2010 SP1:

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

Quando lo faccio ricevo l'errore:

.

Impossibile localizzare un database adatto per la memorizzazione di questa richiesta. + CategoriaInfo: Invalidargument: (Domain.com .... D / John Doe: MailBoxMoormailUserIDParametro) [New-M AilboxeSportrequest], MailboxDatabase ... ManentException. + CompletoQualifiederrorid: 9322cb6d, microsoft.exchange.management.recipienttasks.newmailBoxeportRequest

Quello che sto tentando di fare è cercare sui miei utenti AD, individuare gli utenti che hanno la stringa exportpst nel campo Office, quindi esporta il comando new-mailboxexportrequest per esportare l'intero contenuto della cassetta postale dell'utente in un PST per ciascuno utente restituito.

Quando aggiungo un host di scrittura a quanto sopra, i valori emessi sono corretti:

.

New-MailboxExportrequest -Mailbox JDoe -FilePath "\\ Server \ Condividi $ \ John Doe.pst"

L'output include anche uno spazio extra tra -filepath "e \, che immagino causerò un problema una volta che il problema sopra è stato risolto, c'è un modo per contattare le stringhe senza che aggiunga questo spazio aggiuntivo? Grazie,

Matt

È stato utile?

Soluzione

Penso che il tuo citazione sia un po 'fuori.L'espansione della stringa a doppio citata funziona quando circondi completamente la stringa, non solo la parte variabile.

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

Ecco una sintassi alternativa che utilizza la formattazione / sostituzione della stringa .NET:

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

Per facilitare la risoluzione dei problemi / debug, è possibile assegnare il percorso del file a una variabile, quindi passare la variabile nel parametro -FilePath.In questo modo puoi vedere esattamente quale valore viene trasmesso.

$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;
}
.

Altri suggerimenti

Se $objItem è una stringa che puoi fare:

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

Puoi dire se è una stringa facendo questo:

$objItem.GetType().FullName
.

Anche se non è una stringa, potrebbe ancora funzionare se il metodo ToString() degli oggetti fornisce il valore che è necessario perché PowerShell chiamerà automaticamente il metodo ToString() dell'oggetto e metterlo posto nella stringa.Quindi se questo ti dà il valore che desideri: $objItem.ToString(), allora puoi anche usarlo.Se c'è una proprietà tuttavia come $ objitem.name che devi accedere, è necessario utilizzare la concatenazione delle stringhe, una formattazione della stringa di subaexpression o .net.

    .
  • Concatenazione: -FilePath ("\\server\share$\" + $objItem.Name + ".pst")
  • SubExpression: -FilePath "\\server\share$\$($objItem.Name).pst"
  • .NET String Formattazione: -FilePath ("\\server\share$\{0}.pst" -f $objItem.Name)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top