Pregunta

Estoy intentando ejecutar el siguiente comando de PowerShell en mi servidor Exchange 2010 SP1:

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

Cuando hago esto recibo el error:

No se pudo encontrar una base de datos adecuada para almacenar esta solicitud.+ Información de categoría:Argumento no válido:(Domain.com .... D/John Doe: boxeboxMailUserIdParameter) [new-m ailboxExporTruCest], bailboxDatabase ... ManentException + totalmente calificadoerRorID:9322CB6D, Microsoft.Exchange.Management.RecipientTasks.NewMailboxExportRequest

Lo que intento hacer es buscar entre mis usuarios de AD, ubicar los usuarios que tienen la cadena ExportPST en el campo de Office y luego exportar el comando New-MailboxExportRequest para exportar todo el contenido del buzón del usuario a un PST para cada usuario devuelto.

Cuando agrego un Write-Host a lo anterior, los valores generados son correctos:

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

El resultado también incluye un espacio adicional entre -FilePath " y \, lo que imagino que causará un problema una vez que se haya resuelto el problema anterior. ¿Hay alguna manera de contactar cadenas sin agregar este espacio adicional?

Gracias,

Mate

¿Fue útil?

Solución

Creo que tu cita está un poco equivocada.La expansión de cadenas entre comillas dobles funciona cuando rodeas completamente la cadena, no solo la parte variable.

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

Aquí hay una sintaxis alternativa que utiliza formato/reemplazo de cadenas .NET:

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

Para facilitar la resolución de problemas/depuración, puede asignar la ruta del archivo a una variable y luego pasar la variable al archivo -FilePath parámetro.De esa manera podrá ver exactamente qué valor se pasa.

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

Otros consejos

Si GRANCACODICETGCODE es una cadena que puede hacer:

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

Puede saber si es una cadena haciendo esto:

$objItem.GetType().FullName

Incluso si no es una cadena, aún puede funcionar si el método de los objetos $objItem proporciona el valor que necesita porque PowerShell llamará automáticamente el método GeneracDicetAtCode del objeto y colóquelo en su cadena.Por lo tanto, si esto le da el valor que desea: ToString(), entonces también puede usarlo.Sin embargo, si hay una propiedad como $ objitem.name, que tiene que acceder, deberá usar una concatenación de cadena, una subexpresa o un formato de cadena .NET.

  • Concatenación: ToString()
  • subexpresa: $objItem.ToString()
  • .NET Formateo de cadenas: -FilePath ("\\server\share$\" + $objItem.Name + ".pst")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top