TMG error 12217

Solución sencilla y práctica.

Uncheck this box

image

Tamaño de la Base de Datos y Número de Usuarios en ella

# Get all the Mailbox servers 
ForEach ($server in Get-MailboxServer) 

   # For each Mailbox server, get all the databases on it
   $strDB = Get-MailboxDatabase -Server $server 
   
   # For each Database, get the information from it
   ForEach ($objItem in $strDB) 
   { 
      $intUsers = ($objitem | Get-Mailbox -ResultSize Unlimited).count
 
      # Get the size of the database file
      $edbfilepath = $objItem.edbfilepath 
      $path = "`\`\" + $server + "`\" + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + "$"+ $objItem.EdbFilePath.PathName.Remove(0,2) 
      $strDBsize = Get-ChildItem $path 
      $ReturnedObj = New-Object PSObject 
      $ReturnedObj | Add-Member NoteProperty -Name "Server\StorageGroup\Database" -Value $objItem.Identity 
      $ReturnedObj | Add-Member NoteProperty -Name "Size (GB)" -Value ("{0:n2}" -f ($strDBsize.Length/1048576KB)) 
      $ReturnedObj | Add-Member NoteProperty -Name "Size (MB)" -Value ("{0:n2}" -f ($strDBsize.Length/1024KB)) 
      $ReturnedObj | Add-Member NoteProperty -Name "User Count" -Value $intUsers 
   
      Write-Output $ReturnedObj
   }
}

Configurar las propiedades de la base de datos de buzones

En Microsoft Exchange Server 2010, cada base de datos de buzones cuenta con sus propias propiedades que pueden configurarse. Estas propiedades incluyen montaje, desmontaje y movimiento de una ruta de base de datos.

  Usar EMC para configurar las propiedades de la base de datos de buzones

Deberá tener asignados permisos antes de poder llevar a cabo este procedimiento. Para ver qué permisos necesita, consulte el Entrada "Base de datos de buzones" en el tema Permisos de buzones.

  1. En el árbol de la consola, vaya a Configuración de la organización > Buzón.
  2. En el panel de resultados, en la ficha Administración de bases de datos, seleccione la base de datos que desea configurar.
  3. En el panel de trabajo, haga clic en Propiedades.
  4. Use la ficha General para visualizar el estado de la ruta de acceso a la base de datos de buzones, incluso el estado de la base de datos de buzones, la ruta de acceso a la copia de base de datos de buzones y la última copia de seguridad:
    • Ruta de acceso a la base de datos   Este campo muestra la ruta completa al archivo de la base de datos de Exchange (.edb) de la base de datos de buzones seleccionada. Para ver la ruta completa, puede hacer clic en la ruta y usar la tecla FLECHA DERECHA. Este campo no se puede usar para cambiar la ruta. Para cambiar la ubicación de los archivos de base de datos, cierre Propiedades, haga clic con el botón secundario y, a continuación, haga clic en Mover ruta de acceso de base de datos. También puede cambiar la ubicación con el cmdlet Move-DatabasePath. Para obtener más información, consulte Move-DatabasePath.
    • Última copia de seguridad completa   Este campo de sólo lectura muestra la fecha y la hora de la última copia de seguridad completa de la base de datos de buzones.
    • Última copia de seguridad incremental   Este campo de sólo lectura muestra la fecha y la hora de la última copia de seguridad incremental de la base de datos de buzones.
    • Estado   Este campo de sólo lectura muestra si la base de datos de buzones está montada o desmontada.
    • Montada en el servidor   Este campo de sólo lectura muestra el servidor en que la base de datos de buzones está montada.
    • Tipo maestro   Este campo de sólo lectura muestra el servidor maestro.
    • Modificado   Este campo de sólo lectura muestra la última fecha y hora en que se modificó la base de datos.
    • Servidores que hospedan una copia de esta base de datos   Este campo de sólo lectura muestra los demás servidores que tienen una copia de esta base de datos.
  5. Use la ficha Mantenimiento para configurar todos los parámetros de la base de datos de buzones, entre ellos, la especificación de un destinatario del diario, la configuración de un programa de mantenimiento y el montaje de la base de datos en el inicio:
    • Destinatario del diario   Seleccione esta casilla para habilitar el registro en diario de transporte de correo electrónico.
    • Programación de mantenimiento   Use esta lista para seleccionar una de las programaciones de mantenimiento preestablecidas. También puede configurar una programación personalizada. Para configurar una programación personalizada, en la lista Programación del mantenimiento, seleccione Usar programación personalizada y, a continuación, haga clic en Personalizar.
    • No montar esta base de datos en el inicio   Seleccione esta casilla para impedir que Exchange monte esta base de datos de buzones al momento del inicio.
    • Una restauración puede sobrescribir esta base de datos   Seleccione esta casilla para permitir la sobrescritura de la base de datos de buzones durante un proceso de restauración.
    • Habilitar registro circular   Seleccione esta casilla para habilitar el registro circular. Para obtener más información acerca del registro circular, consulte Understanding the Exchange 2010 Store.
  6. Use la ficha Límites para especificar los límites de almacenamiento, el intervalo entre mensajes de advertencia y la configuración de la eliminación para una base de datos de buzones:
    • Emitir advertencia al llegar a (KB)   Seleccione esta casilla para advertir automáticamente a los usuarios de buzones que el buzón está por alcanzar el límite de almacenamiento. Para especificar el límite de almacenamiento, seleccione la casilla y, a continuación, especifique en kilobytes (KB) cuánto contenido puede almacenarse en el buzón antes de que se envíe un mensaje de correo electrónico de advertencia a los usuarios de buzones. Puede escribir un valor del 0 al 2.147.483.647 KB (2,1 terabytes).
    • Prohibir envío al llegar a (KB)   Seleccione esta casilla para impedir que los usuarios envíen nuevos mensajes de correo electrónico después de que el tamaño de su buzón alcance el límite especificado. Para especificar este límite, seleccione la casilla y, a continuación, escriba el tamaño del buzón en KB en el que desea prohibir el envío de nuevos mensajes de correo electrónico e informar al usuario. Puede escribir un valor del 0 al 2.147.483.647 KB (2,1 terabytes).
    • Prohibir envío y recepción al llegar a (KB)   Seleccione esta casilla para impedir que los usuarios envíen y reciban mensajes de correo electrónico después de que el tamaño de su buzón alcance el límite especificado. Para especificar este límite, seleccione la casilla y, a continuación, escriba el tamaño del buzón en KB en el que desea prohibir el envío y recepción de mensajes de correo electrónico e informar al usuario. Puede escribir un valor del 0 al 2.147.483.647 KB (2,1 terabytes).
    • Intervalo entre mensajes de advertencia   Use esta lista para especificar el tiempo en el que se examinan los buzones respecto al cumplimiento de los límites de almacenamiento configurados. Para configurar un tiempo personalizado, en la lista Intervalo entre mensajes de advertencia, seleccione Usar programación personalizada y, a continuación, haga clic en Personalizar.
    • Guardar los elementos eliminados durante (días)   Use esta casilla para establecer el número de días que se guardarán los elementos eliminados en un buzón. Puede escribir un valor de 0 a 24.855 días.
    • Guardar los buzones eliminados durante (días)   Use esta casilla para establecer el número de días que se guardarán los buzones eliminados. Puede escribir un valor de 0 a 24.855 días.
    • No eliminar elementos de forma permanente hasta que se haya realizado una copia de seguridad de la base de datos   Seleccione esta casilla para impedir que se eliminen buzones y mensajes de correo electrónico hasta después de haber realizado una copia de seguridad de la base de datos de buzones.
  7. Use la ficha Configuración de cliente para ver y seleccionar la base de datos de carpetas públicas predeterminada y la libreta de direcciones sin conexión (OAB) para el buzón:
    • Base de datos de carpetas públicas predeterminada   En este cuadro se muestra la ubicación de la base de datos de carpetas públicas predeterminada. La base de datos de carpetas públicas almacena datos de carpetas públicas, la información de OAB y la información de disponibilidad para Microsoft Exchange Server 2003 y versiones anteriores. Para cambiar la ubicación de la base de datos de carpetas públicas predeterminada, haga clic en Examinar y seleccione una ubicación nueva.
    • Libreta de direcciones sin conexión   En este cuadro se muestra la ubicación de la OAB. Para cambiar la ubicación de la OAB, haga clic en Examinar y seleccione una ubicación nueva.

  Usar el Shell para configurar las propiedades de la base de datos de buzones

Deberá tener asignados permisos antes de poder llevar a cabo este procedimiento. Para ver qué permisos necesita, consulte el Entrada "Base de datos de buzones" en el tema Permisos de buzones.

En este ejemplo se establece el tiempo que se conservan los elementos eliminados. Si un buzón en particular tiene definida su propia retención, se usa ese valor en lugar del valor definido en la base de datos de buzones.

Set-MailboxDatabase "Mailbox Database01" -DeletedItemRetention 7.00:00:00

Mover ruta de base de datos

La ruta de base de datos de buzones del servidor que ejecuta Exchange Server 2010 se puede cambiar. Para establecer una nueva ruta a la ubicación de una base de datos y para trasladar los archivos pertinentes a esa ubicación, puede usar tanto EMC como el Shell.

  Requisitos previos

Para realizar esta operación, la base de datos debe estar temporalmente desmontada, con lo cual es inaccesible para todos los usuarios. Si la base de datos está desmontada, no se volverá a montar hasta que no se haya completado la operación.

 

  Uso de EMC para mover la ruta de una base de datos de buzones

Deberá tener asignados permisos antes de poder llevar a cabo este procedimiento. Para ver qué permisos necesita, consulte el Entrada "Base de datos de buzones" en el tema Permisos de buzones.

  1. En el árbol de la consola, vaya a Configuración de la organización > Buzón.
  2. En el panel de resultados, en la ficha Administración de bases de datos, seleccione la base de datos que desea configurar.
  3. En el panel de trabajo, haga clic en Mover ruta de acceso de base de datos.
  4. En el Asistente para mover rutas de acceso de bases de datos, en Rutas de acceso de bases de datos, haga clic en Mover para trasladar la ruta a la ubicación predeterminada. La ubicación de la ruta de acceso al archivo de base de datos se puede cambiar si se modifica el campo Ruta de acceso al archivo de base de datos. La ubicación de la ruta de la carpeta de registro se puede cambiar si se modifica el campo Ruta de acceso a la carpeta de registro.
  5. Vea el estado de la operación de movimiento. El asistente coloca la ruta de acceso al archivo de base de datos y la ruta de la carpeta de registro en la nueva ubicación. Haga clic en Atrás para realizar cambios de configuración.
  6. En la página Finalización, confirme si el proceso del movimiento ha terminado correctamente. El estado Finalizado indica que el asistente finalizó la tarea correctamente. El estado Error indica que la tarea no se pudo completar. Si la tarea da como resultado un error, revise el resumen para buscar una explicación y, a continuación, haga clic en Atrás para realizar los cambios de configuración necesarios.
  7. Haga clic en Finalizar para completar el Asistente para mover rutas de acceso de base de datos.

  Uso del Shell para mover la ruta de una base de datos de buzones

Deberá tener asignados permisos antes de poder llevar a cabo este procedimiento. Para ver qué permisos necesita, consulte el Entrada "Permisos de bases de datos" en el tema Permisos de buzones.

En este ejemplo se usa el comando Move-DatabasePath para establecer una nueva ruta para la base de datos de buzones especificada por el GUID.

Move-DatabasePath -Identity a0ec9f03-12a9-4e40-9310-43f9105fd4d2 -EdbFilePath C:\NewFolder\MyDatabase.edb

Script para auditar Exchange Server 2007

Esta secuencia de comandos auditará a una lista de servidores de Exchange. La secuencia de comandos escribe un archivo de informe HTML que puede abrirse utilizando cualquier navegador.

Script Output

param( [string] $auditlist) 
 
Function Get-CustomHTML ($Header){
$Report = @"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html><head><title>$($Header)</title>
<META http-equiv=Content-Type content='text/html; charset=windows-1252'>
 
<meta name="save" content="history">
 
<style type="text/css">
DIV .expando {DISPLAY: block; FONT-WEIGHT: normal; FONT-SIZE: 8pt; RIGHT: 8px; COLOR: #ffffff; FONT-FAMILY: Arial; POSITION: absolute; TEXT-DECORATION: underline}
TABLE {TABLE-LAYOUT: fixed; FONT-SIZE: 100%; WIDTH: 100%}
*{margin:0}
.dspcont { display:none; BORDER-RIGHT: #B1BABF 1px solid; BORDER-TOP: #B1BABF 1px solid; PADDING-LEFT: 16px; FONT-SIZE: 8pt;MARGIN-BOTTOM: -1px; PADDING-BOTTOM: 5px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; WIDTH: 95%; COLOR: #000000; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; BACKGROUND-COLOR: #f9f9f9}
.filler {BORDER-RIGHT: medium none; BORDER-TOP: medium none; DISPLAY: block; BACKGROUND: none transparent scroll repeat 0% 0%; MARGIN-BOTTOM: -1px; FONT: 100%/8px Tahoma; MARGIN-LEFT: 43px; BORDER-LEFT: medium none; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: medium none; POSITION: relative}
.save{behavior:url(#default#savehistory);}
.dspcont1{ display:none}
a.dsphead0 {BORDER-RIGHT: #B1BABF 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #B1BABF 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; CURSOR: hand; COLOR: #FFFFFF; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; WIDTH: 95%; BACKGROUND-COLOR: #CC0000}
a.dsphead1 {BORDER-RIGHT: #B1BABF 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #B1BABF 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; WIDTH: 95%; BACKGROUND-COLOR: #7BA7C7}
a.dsphead2 {BORDER-RIGHT: #B1BABF 1px solid; PADDING-RIGHT: 5em; BORDER-TOP: #B1BABF 1px solid; DISPLAY: block; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; MARGIN-BOTTOM: -1px; MARGIN-LEFT: 0px; BORDER-LEFT: #B1BABF 1px solid; CURSOR: hand; COLOR: #ffffff; MARGIN-RIGHT: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #B1BABF 1px solid; FONT-FAMILY: Tahoma; POSITION: relative; HEIGHT: 2.25em; WIDTH: 95%; BACKGROUND-COLOR: #7BA7C7}
a.dsphead1 span.dspchar{font-family:monospace;font-weight:normal;}
td {VERTICAL-ALIGN: TOP; FONT-FAMILY: Tahoma}
th {VERTICAL-ALIGN: TOP; COLOR: #CC0000; TEXT-ALIGN: left}
BODY {margin-left: 4pt} 
BODY {margin-right: 4pt} 
BODY {margin-top: 6pt} 
</style>
 
 
<script type="text/javascript">
function dsp(loc){
   if(document.getElementById){
      var foc=loc.firstChild;
      foc=loc.firstChild.innerHTML?
         loc.firstChild:
         loc.firstChild.nextSibling;
      foc.innerHTML=foc.innerHTML=='hide'?'show':'hide';
      foc=loc.parentNode.nextSibling.style?
         loc.parentNode.nextSibling:
         loc.parentNode.nextSibling.nextSibling;
      foc.style.display=foc.style.display=='block'?'none':'block';}}  
 
if(!document.getElementById)
   document.write('<style type="text/css">\n'+'.dspcont{display:block;}\n'+ '</style>');
</script>
 
</head>
<body>
<b><font face="Arial" size="5">$($Header)</font></b><hr size="8" color="#CC0000">
<font face="Arial" size="1"><b>Version 3  | Jean Louw | <A HREF='http://powershellneedfulthings.blogspot.com'>powershellneedfulthings.blogspot.com</A></b></font><br>
<font face="Arial" size="1">Report created on $(Get-Date)</font>
<div class="filler"></div>
<div class="filler"></div>
<div class="filler"></div>
<div class="save">
"@
Return $Report
}
 
Function Get-CustomHeader0 ($Title){
$Report = @"
        <h1><a class="dsphead0">$($Title)</a></h1>
    <div class="filler"></div>
"@
Return $Report
}
 
Function Get-CustomHeader ($Num, $Title){
$Report = @"
    <h2><a href="javascript:void(0)" class="dsphead$($Num)" onclick="dsp(this)">
    <span class="expando">show</span>$($Title)</a></h2>
    <div class="dspcont">
"@
Return $Report
}
 
Function Get-CustomHeaderClose{
 
    $Report = @"
        </DIV>
        <div class="filler"></div>
"@
Return $Report
}
 
Function Get-CustomHeader0Close{
 
    $Report = @"
</DIV>
"@
Return $Report
}
 
Function Get-CustomHTMLClose{
 
    $Report = @"
</div>
 
</body>
</html>
"@
Return $Report
}
 
Function Get-HTMLTable{
    param([array]$Content)
    $HTMLTable = $Content | ConvertTo-Html
    $HTMLTable = $HTMLTable -replace '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', ""
    $HTMLTable = $HTMLTable -replace '<html xmlns="http://www.w3.org/1999/xhtml">', ""
    $HTMLTable = $HTMLTable -replace '<head>', ""
    $HTMLTable = $HTMLTable -replace '<title>HTML TABLE</title>', ""
    $HTMLTable = $HTMLTable -replace '&lt;', "<"
    $HTMLTable = $HTMLTable -replace '&gt;', ">"
    $HTMLTable = $HTMLTable -replace '</head><body>', ""
    $HTMLTable = $HTMLTable -replace '</body></html>', ""
    Return $HTMLTable
}
 
Function Get-HTMLLink ($activeURL){
$Report = @"
<a href=$activeURL>$activeURL</a>
"@
Return $Report 
}
 
Function Get-Ink ([String]$inData){
[String]$inclPercentage = @(35..100)
$positive = ($inclPercentage, 'Success', 'Ready', 'Running', 'OK', 'True', 'Information')
If ($positive -match $inData)
{
$Report = @"
<font color='#009900'>$inData</font>
"@
}
Else
{
$Report = @"
<font color='#FF0000'>$inData</font>
"@
}
Return $Report
}
 
Function Get-HTMLBasic ($Detail){
$Report = @"
<TABLE>
    <tr>
        <td width='75%'>$($Detail)</td>
    </tr>
</TABLE>
"@
Return $Report
}
 
Function Get-HTMLDetail ($Heading, $Detail){
$Report = @"
<TABLE>
    <tr>
    <th width='25%'><b>$Heading</b></font></th>
    <td width='75%'>$($Detail)</td>
    </tr>
</TABLE>
"@
Return $Report
}
 
$input | foreach {$targets += @($_)}
If ((Test-Path variable:\targets) -eq $True){
            Write-Host "Server list input detected on pipeline" -ForegroundColor Yellow
            }
Else{
    if ($auditlist -eq ""){
            Write-Host "No server list specified, getting all Exchange 2007 servers" -ForegroundColor Yellow
            $targets = Get-ExchangeServer | Where-Object {$_.IsExchange2007OrLater -eq $True}
        }
        else
        {
            if ((Test-Path $auditlist) -eq $false)
            {
                Write-Host "Invalid server list specified: $auditlist" -ForegroundColor DarkRed
                exit
            }
            else
            {
                Write-Host "Using Audit list: $auditlist" -ForegroundColor Cyan
                $Targets = Get-Content $auditlist
            }
            }
}
 
$now = Get-Date
#Custom Expressions
$latencyMS = @{Name="Latency(MS)";expression={[Math]::Round(([TimeSpan] $_.Latency).TotalMilliSeconds)}}
$hotLink = @{Name="URL";expression={Get-HTMLLink ($_.URL)}}
$colourResult = @{Name="Result";expression={Get-Ink ($_.Result)}}
$colourStatus = @{Name="Status";expression={Get-Ink ($_.Status)}}
$colourType = @{Name="Status";expression={Get-Ink ($_.Type)}}
$newResult = @{Name="Result";expression={If ($_.Result.ToString() -ne 'Success'){Get-Ink ('Failure')} Else {Get-Ink ('Success') }}}
 
Foreach ($Target in $Targets){
 
Write-Host "Collating Detail for $Target" -ForegroundColor Yellow
    Write-Host "..getting basic computer configuration"
    $ComputerSystem = Get-WmiObject -computername $Target Win32_ComputerSystem
    switch ($ComputerSystem.DomainRole){
        0 { $ComputerRole = "Standalone Workstation" }
        1 { $ComputerRole = "Member Workstation" }
        2 { $ComputerRole = "Standalone Server" }
        3 { $ComputerRole = "Member Server" }
        4 { $ComputerRole = "Domain Controller" }
        5 { $ComputerRole = "Domain Controller" }
        default { $ComputerRole = "Information not available" }
    }
    
    $OperatingSystems = Get-WmiObject -computername $Target Win32_OperatingSystem
    $TimeZone = Get-WmiObject -computername $Target Win32_Timezone
    $Keyboards = Get-WmiObject -computername $Target Win32_Keyboard
    $SchedTasks = Get-WmiObject -computername $Target Win32_ScheduledJob
    $BootINI = $OperatingSystems.SystemDrive + "boot.ini"
    $RecoveryOptions = Get-WmiObject -computername $Target Win32_OSRecoveryConfiguration
    $exServer = Get-ExchangeServer | where {$_.Name -eq "$Target"}
    $exVersion = "Version " + $exServer.AdminDisplayVersion.Major + "." + $exServer.AdminDisplayVersion.Minor + " (Build " + $exServer.AdminDisplayVersion.Build + "." + $exServer.AdminDisplayVersion.Revision + ")"
 
    switch ($ComputerRole){
        "Member Workstation" { $CompType = "Computer Domain"; break }
        "Domain Controller" { $CompType = "Computer Domain"; break }
        "Member Server" { $CompType = "Computer Domain"; break }
        default { $CompType = "Computer Workgroup"; break }
    }
 
    $LBTime=$OperatingSystems.ConvertToDateTime($OperatingSystems.Lastbootuptime)
    $MyReport = Get-CustomHTML "$Target Exchange Audit"
    $MyReport += Get-CustomHeader0  "$Target - Role(s): $($exServer.ServerRole)"
    $MyReport += Get-CustomHeader "2" "Basic Server Information"
        $MyReport += Get-HTMLDetail "Computer Name" ($ComputerSystem.Name)
        $MyReport += Get-HTMLDetail "Computer Role" ($ComputerRole)
        $MyReport += Get-HTMLDetail $CompType ($ComputerSystem.Domain)
        $MyReport += Get-HTMLDetail "Operating System" ($OperatingSystems.Caption)
        $MyReport += Get-HTMLDetail "Service Pack" ($OperatingSystems.CSDVersion)
        $MyReport += Get-HTMLDetail "Exchange Version" ($exVersion)
        $MyReport += Get-HTMLDetail "Exchange Edition" ($exServer.Edition)
        $MyReport += Get-HTMLDetail "Exchange Role(s)" ($exServer.ServerRole)
        $MyReport += Get-HTMLDetail "System Root" ($OperatingSystems.SystemDrive)
        $MyReport += Get-HTMLDetail "Manufacturer" ($ComputerSystem.Manufacturer)
        $MyReport += Get-HTMLDetail "Model" ($ComputerSystem.Model)
        $MyReport += Get-HTMLDetail "Number of Processors" ($ComputerSystem.NumberOfProcessors)
        $MyReport += Get-HTMLDetail "Memory (GB)" ([math]::round(($ComputerSystem.TotalPhysicalMemory / 1GB)))
        $MyReport += Get-HTMLDetail "Registered User" ($ComputerSystem.PrimaryOwnerName)
        $MyReport += Get-HTMLDetail "Registered Organisation" ($OperatingSystems.Organization)
        $MyReport += Get-HTMLDetail "Last System Boot" ($LBTime)
        $MyReport += Get-CustomHeaderClose
        
        Write-Host "..getting Exchange rollup information"
        $colInstalledRollups = @()
        $baseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Target)
        $subKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\461C2B4266EDEF444B864AD6D9E5B613\Patches\"
        $baseKey = $baseKey.OpenSubKey($subKey)
        $rollUps = $baseKey.GetSubKeyNames()
 
        ForEach($rollUp in $rollUps)
        {
            $fullPath= $subKey + $rollUp
                $childKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Target)
            $childKey = $childKey.OpenSubKey($fullPath)
            $values = $childKey.GetValueNames()
        
        ForEach($value in $values)
        {
            if ($value -eq "DisplayName") 
            {    
                $colInstalledRollups += $childKey.GetValue($value)
            }
        }
        }
        $MyReport += Get-CustomHeader "2" "Installed Exchange Rollups"
        $objInstalledRollupNumber = 1
        ForEach ($objInstalledRollup in $colInstalledRollups)
        {
            $MyReport += Get-HTMLBasic ($objInstalledRollup)
            $objInstalledRollupNumber ++
        }
        $MyReport += Get-CustomHeaderClose
        Write-Host "..getting logical disk configuration"
        $Disks = Get-WmiObject -ComputerName $Target Win32_LogicalDisk
        $MyReport += Get-CustomHeader "2" "Logical Disk Configuration"
            $LogicalDrives = @()
            Foreach ($LDrive in ($Disks | Where {$_.DriveType -eq 3})){
                $Details = "" | Select "Drive Letter", Label, "File System", "Disk Size (GB)", "Disk Free Space", "% Free Space"
                $Details."Drive Letter" = $LDrive.DeviceID
                $Details.Label = $LDrive.VolumeName
                $Details."File System" = $LDrive.FileSystem
                $Details."Disk Size (GB)" = [math]::round(($LDrive.size / 1GB))
                $Details."Disk Free Space" = [math]::round(($LDrive.FreeSpace / 1GB))
                $Details."% Free Space" = Get-Ink ([Math]::Round(($LDrive.FreeSpace /1GB) / ($LDrive.Size / 1GB) * 100))
                $LogicalDrives += $Details
            }
            $MyReport += Get-HTMLTable ($LogicalDrives)
        $MyReport += Get-CustomHeaderClose
        
        if ($exServer.ServerRole -like "*ClientAccess*")
        {
            $MyReport += Get-CustomHeader "2" "OWA Connectivity"
            Write-Host "..performing OWA connectivity test"
            $colOWAResults = Test-OwaConnectivity -ClientAccessServer $Target
            $MyReport += Get-HTMLTable ($colOWAResults | select MailboxServer, $hotLink, Scenario, $colourResult, $latencyMS, Error)
            $MyReport += Get-CustomHeaderClose
            $MyReport += Get-CustomHeader "2" "ActiveSync Connectivity"
            Write-Host "..performing ActiveSync connectivity test"
            $colActiveSyncResults = Test-ActiveSyncConnectivity -ClientAccessServer $Target.ToString()
            $MyReport += Get-HTMLTable ($colActiveSyncResults | select MailboxServer, Scenario, $colourResult, $latencyMS, Error)
            $MyReport += Get-CustomHeaderClose
            $MyReport += Get-CustomHeader "2" "Outlook Web Services"
            Write-Host "..performing Outlook Web Services test"
            $colOWSResults = Test-OutlookWebServices -ClientAccessServer $ComputerSystem.Name
            $MyReport += Get-HTMLTable ($colOWSResults | select $colourType, Message)
            $MyReport += Get-CustomHeaderClose
        }
        
        Write-Host "..getting queue details"
        if ($exServer.ServerRole -like "*HubTransport*")
        {
        $MyReport += Get-CustomHeader "2" "Queue Information"
        $colQs = Get-Queue -server $Target 
        $MyReport += Get-HTMLTable ($colQs | Select-Object NextHopDomain, $colourStatus, MessageCount, NextRetryTime)
        $MyReport += Get-CustomHeaderClose
        }
        
        $spaceLog=[System.Diagnostics.EventLog]::GetEventLogs($target) | where {($_.LogDisplayName -eq "Application")}
        $db = @{Name="database";Expression={$_.ReplacementStrings[1]}}
        $freeMB = @{Name="MB";Expression={[int]$_.ReplacementStrings[0]}}
        $whiteSpace = $spaceLog.entries | where {($_.TimeWritten -ge $now.AddDays(-1))} | where {($_.EventID -eq "1221")} | select $db,$freeMB
        $ws = @{Name="White Space";expression={}}
                
        if ($exServer.ServerRole -like "*Mailbox*")
        {
            Write-Host "..getting mailbox database information"
            $MyReport += Get-CustomHeader "2" "Mailbox Stores"
            $colMailboxStores = Get-MailboxDatabase -Server $Target -Status | Sort-Object Name
            $storeTable = @()
            Foreach ($objMailboxStore in $colMailboxStores)
            {
                [string]$totalUsers = (get-mailbox -database $objMailboxStore).count
                [string]$empty = $totalUsers.Length -eq 0
        
                if ($empty -eq 'True')
                {
                    [string]$totalUsers = "0"
                }
                $storeDetails = "" | Select Name, Mounted, "Total Users", "White Space", LastFullBackup
                $storeDetails.Name = $objMailboxStore.Name
                $storeDetails.Mounted = Get-Ink ($objMailboxStore.Mounted)
                $storeDetails."Total Users" = $totalUsers
                $storeDetails."White Space" = (($whitespace | where {$_.database -match $objMailboxStore.Name} | select -last 1).mb)
                $storeDetails.LastFullBackup = $objMailboxStore.LastFullBackup
                $storeTable += $storeDetails
            }
                $MyReport += Get-HTMLTable ($storeTable)
            $MyReport += Get-CustomHeaderClose
            
            $MyReport += Get-CustomHeader "2" "MAPI Connectivity"
            Write-Host "..performing MAPI connectivity test"
            $colMAPIResults = Test-MAPIConnectivity -Server $Target
                $MyReport += Get-HTMLTable ($colMAPIResults | select Database, $newResult, $latencyMS, Error)
            $MyReport += Get-CustomHeaderClose
        }
        
        Write-Host "..getting Exchange services"
        $ListOfServices = (gwmi -computer $Target -query "select * from win32_service where Name like 'MSExchange%' or Name like 'IIS%' or Name like 'SMTP%' or Name like 'POP%' or Name like 'W3SVC%'")
        $MyReport += Get-CustomHeader "2" "Exchange Services"
            $Services = @()
            Foreach ($Service in $ListOfServices){
                $Details = "" | Select Name,Account,"Start Mode",State,"Expected State"
                $Details.Name = $Service.Caption
                $Details.Account = $Service.Startname
                $Details."Start Mode" = $Service.StartMode
                If ($Service.StartMode -eq "Auto")
                    {
                        if ($Service.State -eq "Stopped")
                        {
                            $Details.State = $Service.State
                            $Details."Expected State" = Get-Ink ("Unexpected")
                        }
                    }
                    If ($Service.StartMode -eq "Auto")
                    {
                        if ($Service.State -eq "Running")
                        {
                            $Details.State = $Service.State
                            $Details."Expected State" = Get-Ink ("OK")
                        }
                    }
                    If ($Service.StartMode -eq "Disabled")
                    {
                        If ($Service.State -eq "Running")
                        {
                            $Details.State = $Service.State
                            $Details."Expected State" = Get-Ink ("Unexpected")
                        }
                    }
                    If ($Service.StartMode -eq "Disabled")
                    {
                        if ($Service.State -eq "Stopped")
                        {
                            $Details.State = $Service.State
                            $Details."Expected State" = Get-Ink ("OK")
                        }
                    }
                    If ($Service.StartMode -eq "Manual")
                    {
                        $Details.State = $Service.State
                        $Details."Expected State" = Get-Ink ("OK")
                    }
                    If ($Service.State -eq "Paused")
                    {
                        $Details.State = $Service.State
                        $Details."Expected State" = Get-Ink ("OK")
                    }
                $Services += $Details
            }
                $MyReport += Get-HTMLTable ($Services)
            $MyReport += Get-CustomHeaderClose
        
                $eventLogs=[System.Diagnostics.EventLog]::GetEventLogs($Target) | where {($_.LogDisplayName -eq "Application") -OR ($_.LogDisplayName -eq "System")}
                $warningEvents = @()
                $errorEvents = @()
                $LogSettings = @()
            Write-Host "..getting event log settings"
            ForEach ($eventLog in $eventLogs)
            {
                $Details = "" | select "Log Name", "Overflow Action", "Maximum Kilobytes"
                $Details."Log Name" = $eventLog.LogDisplayName
                $MaximumKilobytes = ($eventLog.MaximumKilobytes)
                $Details."Maximum Kilobytes" = $MaximumKilobytes
                $Details."Overflow Action" = $eventLog.OverflowAction
                $LogSettings += $Details
                Write-Host "..getting event log warnings for" $eventLog.LogDisplayName "Log"
                $warningEvents += ($eventLog.entries) | ForEach-Object { Add-Member -inputobject $_ -Name LogName -MemberType NoteProperty -Value $eventLog.LogDisplayName -Force -PassThru} | where {($_.TimeWritten -ge $now.AddDays(-1))} | where {($_.EntryType -eq "Warning")} | where {($_.Source -like "*MSExchange*" -or $_.Source -like "*ESE*")}
                Write-Host "..getting event log errors for" $eventLog.LogDisplayName "Log"
                $errorEvents += ($eventLog.entries) | ForEach-Object { Add-Member -inputobject $_ -Name LogName -MemberType NoteProperty -Value $eventLog.LogDisplayName -Force -PassThru} | where {($_.TimeWritten -ge $now.AddDays(-1))} | where {($_.EntryType -eq "Error")} | where {($_.Source -like "*MSExchange*" -or $_.Source -like "*ESE*")}
            }
                    $MyReport += Get-CustomHeader "2" "Event Logs"
                $MyReport += Get-CustomHeader "2" "Event Log Settings"
                $MyReport += Get-HTMLTable ($LogSettings)
            $MyReport += Get-CustomHeaderClose
            
                    $MyReport += Get-CustomHeader "2" "Warning Events"
                $MyReport += Get-HTMLTable ($warningEvents | select EventID, Source, TimeWritten, LogName, Message)
            $MyReport += Get-CustomHeaderClose
                    $MyReport += Get-CustomHeader "2" "Error Events"
                $MyReport += Get-HTMLTable ($errorEvents | select EventID, Source, TimeWritten, LogName, Message)
            $MyReport += Get-CustomHeaderClose
        $MyReport += Get-CustomHeaderClose
        $MyReport += Get-CustomHeaderClose
    $MyReport += Get-CustomHeader0Close
    $MyReport += Get-CustomHTMLClose
    $MyReport += Get-CustomHTMLClose
    $finaleReport += $MyReport
 
    $Date = Get-Date
    $Filename = ".\" + $Target + "_" + $date.Hour + $date.Minute + "_" + $Date.Day + "-" + $Date.Month + "-" + $Date.Year + ".htm"
    $MyReport | out-file -encoding ASCII -filepath $Filename
    Write "Audit saved as $Filename"
}

Modificar un límite de tamaño de bases de datos

Usar el Editor del registro para modificar el límite del tamaño de una base de datos

Si cambia el límite de tamaño de las bases de datos de Exchange, es posible que desee evaluar el plan de copia de seguridad y restauración de bases de datos de Exchange. En concreto, si aumenta el límite de tamaño de las bases de datos de Exchange, compruebe las operaciones de copia de seguridad y recuperación con los nuevos límites de tamaño de bases de datos para garantizar que puede seguir cumpliendo con sus acuerdos de nivel de servicio (SLA).

Bb232092.Caution(es-es,EXCHG.140).gifPrecaución:

La modificación incorrecta del Registro puede causar problemas graves que podrían hacer necesario volver a instalar el sistema operativo. Es posible que los problemas debidos a una modificación incorrecta del Registro no se puedan resolver. Antes de modificar el Registro, realice una copia de seguridad de los datos valiosos.

  1. Inicie el Editor del Registro (regedit).
  2. Busque la siguiente subclave del Registro:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSExchangeIS\<SERVER NAME>\Private-<database GUID>

    Bb232092.note(es-es,EXCHG.140).gifNota:

    Para obtener el GUID de una base de datos, ejecute el comando siguiente en el Shell de administración de Exchange: Get-MailboxDatabase -Identity "<server name>\<database name>" | Format-Table Name, GUID

  3. Si el valor DWORD Límite de tamaño de la base de datos en GB existe para la subclave, cambie su valor al tamaño deseado en gigabytes.
  4. Si el valor de DWORD Límite de tamaño de la base de datos en GB no existe para la subclave, cree un valor DWORD nuevo con ese nombre y, a continuación, establezca su valor en el tamaño deseado en gigabytes.