header1   header
header
header Register : : Login header
header
connector   connector
menuleft menuright
submenu   submenu
left
2003 edb and stm file size.
Last Post 23 Aug 2011 05:21 AM by Rob. 7 Replies.
Printer Friendly
  •  
  •  
  •  
  •  
  •  
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages
RobUser is Offline
New Member
New Member
Posts:32
Avatar

--
15 Jul 2011 04:17 AM
    Hi

    I need some help in removing the "foreach ($DB in get-mailboxdatabase -server $server)" in the below script as this section is a 2007 command and wont work with 2003.

    Or if any one know of another way to find out the size of the edb and stm file size.




    $server = "ATS-Exch301" # Give Server Name Here
    foreach ($DB in get-mailboxdatabase -server $server)
    {
    $DBEDBPath = "name=’" + $DB.EdbFilePath.ToString().Replace("\","\\") + "‘"
    $DBSTMPath = $DBEDBPath.replace("edb","stm")

    $DBEDBSize = (get-wmiobject CIM_Datafile -filter $DBEDBPath -ComputerName $Server).filesize
    $DBSTMSize = (get-wmiobject CIM_Datafile -filter $DBSTMPath -ComputerName $Server).filesize

    $DBEDBSize = $DBEDBSize / 1MB
    $DBSTMSize = $DBSTMSize / 1MB

    Write-host $DB.identity `t $DBEDBSize `t $DBSTMSize

    }
    get-jamesUser is Offline
    New Member
    New Member
    Posts:59
    Avatar

    --
    19 Jul 2011 06:53 AM
    Rob,

    I have created the below function which extracts the information you require for Exchange 2003:

    Cheers
    James

    
    Function iCheck-GetExchangeRAWDBSizes
    {
          #Get Exchange StorageGroup info from AD
          $objRootDSE = [ADSI]"LDAP://rootDSE"
          $strConfigurationNC = $objRootDSE.configurationNamingContext
          $objConfigurationNC = New-object System.DirectoryServices.DirectoryEntry("LDAP://$strConfigurationNC")
          $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
          $objSearcher.SearchRoot = $objConfigurationNC
          $objSearcher.PageSize = 1000
          $objSearcher.Filter = "(objectCategory=msExchStorageGroup)"
          $objSearcher.SearchScope = "Subtree"
          $StrExchangeServers = $objSearcher.FindAll() | Sort-Object Path
    
          #Foreach Exchange server, extract private & public mailbox data info from AD and use get-item to extract file sizes
          $StrExchangeServers | Foreach-Object `
          {
            $objRootDSE = [ADSI]"LDAP://rootDSE"
            $objConfigurationNC = New-object System.DirectoryServices.DirectoryEntry($_.path)
            $objSearcher01 = New-Object System.DirectoryServices.DirectorySearcher
            $objSearcher01.SearchRoot = $objConfigurationNC
            $objSearcher01.PageSize = 1000
            $objSearcher01.Filter = "(objectCategory=msExchPrivateMDB)"
            $objSearcher01.SearchScope = "Subtree"
            $colResultsPri = $objSearcher01.FindAll() | Sort-Object Path 
    
            $objConfigurationNC = New-object System.DirectoryServices.DirectoryEntry($_.path)
            $objSearcher02 = New-Object System.DirectoryServices.DirectorySearcher
            $objSearcher02.SearchRoot = $objConfigurationNC
            $objSearcher02.PageSize = 1000
            $objSearcher02.Filter = "(objectCategory=msExchPublicMDB)"
            $objSearcher02.SearchScope = "Subtree"
            $colResultsPub = $objSearcher02.FindAll() | Sort-Object Path 
    
        If($colResultsPri)
        {
         $colResultsPri | Foreach-Object `
         {
          $StrServer  = ([string]$_.Properties.msexchowningserver).split(",")[0].substring(3)
          $StrSTMFile = Get-Item ("\\"+$StrServer+"\"+([string]$_.Properties.msexchslvfile).replace(":","$"))
          $StrEDBFile = Get-Item ("\\"+$StrServer+"\"+([string]$_.Properties.msexchedbfile).replace(":","$"))
    
           $ob = New-Object Object    
          If($StrServer -AND $StrSTMFile -AND $StrEDBFile)
          {
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Server" -value $StrServer
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Database Name" -value ([string]$_.Properties.name)
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Type" -value "Mailbox"
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "EDB FileSize(GB)" -value ([System.Math]::Round($StrEDBFile.Length/1gb,2))
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "STM FileSize(GB)" -value ([System.Math]::Round($StrSTMFile.Length/1gb,2))
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Combined FileSize(GB)" -value ([System.Math]::Round($StrSTMFile.Length/1gb,2)+([System.Math]::Round($StrEDBFile.Length/1gb,2)))
          }
          Else
          {
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Server" -value $StrServer
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Database Name" -value "Issue extracting data"
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Type" -value "Mailbox"
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "EDB FileSize(GB)" -value "Issue extracting data"
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "STM FileSize(GB)" -value "Issue extracting data"
           Add-Member -InputObject $ob -MemberType NoteProperty -Name "Combined FileSize(GB)" -value "Issue extracting data"
          }
          $Ob
         }
        }
    
        If($colResultsPub)
        {
        $colResultsPub | Foreach-Object `
        {
         $StrServer  = ([string]$_.Properties.msexchowningserver).split(",")[0].substring(3)
         $StrSTMFile = Get-Item ("\\"+$StrServer+"\"+([string]$_.Properties.msexchslvfile).replace(":","$"))
         $StrEDBFile = Get-Item ("\\"+$StrServer+"\"+([string]$_.Properties.msexchedbfile).replace(":","$"))
    
         $ob = New-Object Object    
         If($StrServer -AND $StrSTMFile -AND $StrEDBFile)
         {
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Server" -value $StrServer
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Database Name" -value ([string]$_.Properties.name)
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Type" -value "Public"
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "EDB FileSize(GB)" -value ([System.Math]::Round($StrEDBFile.Length/1gb,2))
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "STM FileSize(GB)" -value ([System.Math]::Round($StrSTMFile.Length/1gb,2))
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Combined FileSize(GB)" -value ([System.Math]::Round($StrSTMFile.Length/1gb,2)+([System.Math]::Round($StrEDBFile.Length/1gb,2)))
         }
         Else
         {
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Server" -value $StrServer
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Database Name" -value "Issue extracting data"
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Type" -value "Public"
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "EDB FileSize(GB)" -value "Issue extracting data"
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "STM FileSize(GB)" -value "Issue extracting data"
          Add-Member -InputObject $ob -MemberType NoteProperty -Name "Combined FileSize(GB)" -value "Issue extracting data"
         }
         $Ob
        }
        }
          }
    }
    
    get-jamesUser is Offline
    New Member
    New Member
    Posts:59
    Avatar

    --
    19 Jul 2011 10:10 AM
    The data returned looks like below:

    PS C:\> iCheck-GetExchangeRAWDBSizes | Format-Table -AutoSize

    Server Database Name Type EDB FileSize(GB) STM FileSize(GB) Combined FileSize(GB)
    ------ ------------- ---- ---------------- ---------------- ---------------------
    EX01 Mailbox Store (EX01) Mailbox 10 1 11
    EX01 Public Folder Store (EX01) Public 2 1 3
    EX01 SG2MB1 Mailbox 11 1 12



    RobUser is Offline
    New Member
    New Member
    Posts:32
    Avatar

    --
    19 Jul 2011 11:03 AM
    Hi James

    Thanks for that, thats great, been tring to write something like this forages.

    Is there a way to target a list servers not all of them.

    Regards
    get-jamesUser is Offline
    New Member
    New Member
    Posts:59
    Avatar

    --
    19 Jul 2011 10:30 PM
    Hi Rob,

    One way of doing it, would be to add a where-object statement when it searches AD.

    Depending on which version of Powershell you are using, you can add the below commands to add a parameter and a where-object statement:

    PS1.0
    Param([string]$ComputerName)
    ...
    $StrExchangeServers | Where-Object {$_.path -match $ComputerName} | Foreach-Object `
    ...


    PS2.0:
    [cmdletbinding()]
    Param
    (
    [parameter(Position=0,Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
    [String[]]
    $ComputerName
    )
    ...
    $StrExchangeServers | Where-Object {$_.path -match $ComputerName} | Foreach-Object `
    ...






    V1
    
    <br>Function iCheck-GetExchangeRAWDBSizes
    {
      Param([string]$ComputerName)
    
     #Get Exchange StorageGroup info from AD
     $objRootDSE = [ADSI]"LDAP://rootDSE"
     $strConfigurationNC = $objRootDSE.configurationNamingContext
     $objConfigurationNC = New-object System.DirectoryServices.DirectoryEntry("LDAP://$strConfigurationNC")
     $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
     $objSearcher.SearchRoot = $objConfigurationNC
     $objSearcher.PageSize = 1000
     $objSearcher.Filter = "(objectCategory=msExchStorageGroup)"
     $objSearcher.SearchScope = "Subtree"
     $StrExchangeServers = $objSearcher.FindAll() | Sort-Object Path
    
     #Foreach Exchange server, extract private & public mailbox data info from AD and use get-item to extract file sizes
     $StrExchangeServers | Where-Object {$_.path -match $ComputerName} | Foreach-Object `
     {
      ...<br> 



    V2
    <br>Function iCheck-GetExchangeRAWDBSizes
    {
     [cmdletbinding()]
     Param
     (
      [parameter(Position=0,Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
      [String[]]
      $ComputerName
     )
    
     #Get Exchange StorageGroup info from AD
     $objRootDSE = [ADSI]"LDAP://rootDSE"
     $strConfigurationNC = $objRootDSE.configurationNamingContext
     $objConfigurationNC = New-object System.DirectoryServices.DirectoryEntry("LDAP://$strConfigurationNC")
     $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
     $objSearcher.SearchRoot = $objConfigurationNC
     $objSearcher.PageSize = 1000
     $objSearcher.Filter = "(objectCategory=msExchStorageGroup)"
     $objSearcher.SearchScope = "Subtree"
     $StrExchangeServers = $objSearcher.FindAll() | Sort-Object Path
    
     #Foreach Exchange server, extract private & public mailbox data info from AD and use get-item to extract file sizes
     $StrExchangeServers | Where-Object {$_.path -match $ComputerName} | Foreach-Object `
     {
      ...
    <br>



    To run the function for a single server use the following example:


    >  iCheck-GetExchangeRAWDBSizes ex01


    To run for multiple servers, wrap it in a foreach-object:


    > "Ex01","Ex02" | Foreach-Object {iCheck-GetExchangeRAWDBSizes $_}


    Cheers
    James
    RobUser is Offline
    New Member
    New Member
    Posts:32
    Avatar

    --
    21 Aug 2011 07:43 AM
    James

    Been looking at trying to out put the results of your script to html but can't seem to make it work any help you could offer would be greatfull.
    Marco ShawUser is Offline
    Veteran Member
    Veteran Member
    Posts:1684
    Avatar

    --
    22 Aug 2011 03:37 PM
    What have you tried?

    I see this from an earlier post:
    iCheck-GetExchangeRAWDBSizes | Format-Table -AutoSize

    You may be able to simply try:
    iCheck-GetExchangeRAWDBSizes | ConvertTo-Html > result.html
    RobUser is Offline
    New Member
    New Member
    Posts:32
    Avatar

    --
    23 Aug 2011 05:21 AM
    Hi Marco

    I tried that but it didn't work. In the past i used the below code. Some time if it doesn't work correctly i output the data to a txt file and then import it and convert that to html, but in both cases it does work.

    $a = "<style>" <br /> $a = $a + "BODY{background-color:White;}" <br /> $a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;margin-left: auto;margin-right: auto;text-align: center}" <br /> $a = $a + "TH{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:LightSkyBlue}" <br /> $a = $a + "TD{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:AliceBlue}" <br /> $a = $a + "</style>" <br /> $Time = $filedate = Get-Date -uformat "%d-%m-%Y" <br /> <br /> | ConvertTo-HTML -head $a -Body "<H2><center>White Space and Store Count for $ComputerName on the $Time</center></H2>" | Out-File C:\result.html
    You are not authorized to post a reply.


    Active Forums 4.3
    right
    footer   footer
    footer Sponsored by Quest Software • SAPIEN Technologies • Compellent • Microsoft Windows Server 2008 R2 footer
    footer   footer