none
Datenbank 2 und 5 geben nur die Hälfte aus RRS feed

  • Frage

  • Datei 2:
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
    $billdate = Get-Date -UFormat %Y%m%d
    
    mkdir \\Datenpfad
    Set-Location \\Datenpfad
    
    #Übergeben der Daten aus der Datenbank in die nächste Datei, Bestimmung der Dateinamen
    \\Datenpfad\Datei3.ps1 -database "db_3" -filename "Firma3"
    \\Datenpfad\Datei3.ps1 -database "db_4" -filename "Firma4"
    \\Datenpfad\Datei3.ps1 -database "db_5" -filename "Firma5"
    \\Datenpfad\Datei3.ps1 -database "db_6" -filename "Firma6"
    \\Datenpfad\Datei3.ps1 -database "db_2" -filename "Firma2"
    \\Datenpfad\Datei3.ps1 -database "db_7" -filename "Firma7"
    \\Datenpfad\Datei3.ps1 -database "db_8" -filename "Firma8"
    \\Datenpfad\Datei3.ps1 -database "db_9" -filename "Firma9"
    \\Datenpfad\Datei4.ps1 -database "db_10" -filename "Firma10"
    \\Datenpfad\Datei4.ps1 -database "db_11" -filename "Firma11"

    Datei 3:

    #Parameter in Variablen umwandeln
    param(
    	[Parameter(ParameterSetName='database')] [string]$database,
    	[Parameter(ParameterSetName='file')] [string]$file,
    	[Parameter(ParameterSetName='server')] [string]$server,
    	[Parameter(ParameterSetName='mailbox')] [string]$mailbox,
    	[Parameter(ParameterSetName='all')] [switch]$all,
    	[string]$filename
    )
    
    #Fehlermeldungen unterdrücken
    $ErrorActionPreference = "SilentlyContinue"
    $WarningPreference = "SilentlyContinue"
    $report = @()
    
    #Snapins hinzufügen
    $2007snapin = Get-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.Admin
    if ($2007snapin)
    {
    	$AdminSessionADSettings.ViewEntireForest = 1
    }
    else
    {
    	$2010snapin = Get-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010
    	if ($2010snapin)
    	{
    		Set-ADServerSettings -ViewEntireForest $true
    
    	}
    }
    
    Import-Module ActiveDirectory
    
    #Passenden Server zuweisen
    
    		Set-ADServerSettings -PreferredServer Server1.beispiel.de
    		Set-ADServerSettings -RecipientViewRoot beispiel.de
    
    Write-Host -ForegroundColor White "Collecting mailbox list"
    
    if($all) { $mailboxes = @(Get-Mailbox -resultsize unlimited -IgnoreDefaultScope) }
    
    if($server) { $mailboxes = @(Get-Mailbox -server $server -resultsize unlimited -IgnoreDefaultScope) }
    
    if($database){ $mailboxes = @(Get-Mailbox -database $database -resultsize unlimited -IgnoreDefaultScope) }
    
    if($file) {	$mailboxes = @(Get-Content $file | Get-Mailbox -resultsize unlimited) }
    
    if($mailbox) { $mailboxes = @(Get-Mailbox $mailbox) }
    
    #Daten auslesen 
    
    Write-Host -ForegroundColor White "Collecting report data"
    
    $mailboxcount = $mailboxes.count
    $i = 0
    
    $mailboxdatabases = @(Get-MailboxDatabase)
    
    #Schleife ausführen für jedes Postfach (Dateien auslesen)
    foreach ($mb in $mailboxes)
    {
    	$i = $i + 1
    	$pct = $i/$mailboxcount * 100
    	Write-Progress -Activity "Collecting mailbox details" -Status "Processing mailbox $i of $mailboxcount - $mb" -PercentComplete $pct
    
    	$stats = $mb | Get-MailboxStatistics | Select-Object TotalItemSize,TotalDeletedItemSize,ItemCount,LastLogonTime,LastLoggedOnUserAccount
        
        if ($mb.ArchiveDatabase)
        {
            $archivestats = $mb | Get-MailboxStatistics -Archive | Select-Object TotalItemSize,TotalDeletedItemSize,ItemCount
        }
        else
        {
            $archivestats = "n/a"
        }
    
        $inboxstats = Get-MailboxFolderStatistics $mb -FolderScope Inbox | Where {$_.FolderPath -eq "/Inbox"}
        $sentitemsstats = Get-MailboxFolderStatistics $mb -FolderScope SentItems | Where {$_.FolderPath -eq "/Sent Items"}
        $deleteditemsstats = Get-MailboxFolderStatistics $mb -FolderScope DeletedItems | Where {$_.FolderPath -eq "/Deleted Items"}
        $lastlogon = $stats.LastLogonTime
    
    	$user = Get-User $mb
    	$aduser = Get-ADUser $mb.samaccountname -Properties Enabled,AccountExpirationDate
    
    	#Daten einem PS-Objekt zuordnen	
    	$userObj = New-Object PSObject
    	$userObj | Add-Member NoteProperty -Name "Company" -Value $user.Company
        $userObj | Add-Member NoteProperty -Name "Office" -Value $user.Office
    	$userObj | Add-Member NoteProperty -Name "DisplayName" -Value $mb.DisplayName
    	$userObj | Add-Member NoteProperty -Name "Total Mailbox Size (Mb)" -Value ($stats.TotalItemSize.Value.ToMB() + $stats.TotalDeletedItemSize.Value.ToMB())
    
    	$report = $report += $userObj
    }
    $report = $report|Sort Office,DisplayName
    $reportcount = $report.count
    $billdate = Get-Date -UFormat %Y%m%d
    
    if ($reportcount -eq 0)
    {
    	Write-Host -ForegroundColor Yellow "No mailboxes were found matching that criteria."
    }
    else
    {
    	#Report ausgeben
    	if ($mailbox) 
    	{
    		$report | Format-List
    	}
    	else
    	{
    		$report | Out-File \\Datenpfad\$filename.txt
    		Write-Host -ForegroundColor BLUE "Report written to $filename .txt in current path."
    		Get-Item $filename
    	}
    }

    Nun meine Frage: Bei allen Datenbanken (außer 2 und 5) liest er ohne Probleme die Postfachgröße aus... Bei Firma 2 und 5 bleibt dieses Feld jedoch leer....wo liegt mein Fehler?


    • Bearbeitet Leinadgnom Donnerstag, 8. Juni 2017 12:51
    Dienstag, 6. Juni 2017 12:08

Alle Antworten

  • Moin,

    nicht persönlich nehmen: Wir arbeiten hier ehrenamtlich und kostenlos, niemand wird die Zeit haben, Dein langes Script so durchzuarbeiten.

    Wenn Du den Fehlerort nachstellbar besser eingrenzen und einzelnen zeigen kannst, wir die Hilfsbereitschaft sicher größer sein.

    Eventuell findest Du mit dieser Methodik den Fehler dann sogar selbst, denn Vereinfachung ist eine Standard-Technik bei der Fehlersuche.


    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)


    Donnerstag, 8. Juni 2017 11:20
  • fertig
    Donnerstag, 8. Juni 2017 12:51
  • fertig

    Immer noch lang, einige Teile hättest Du noch rausnehmen können, aber besser.

    1.

    $stats = $mb | Get-MailboxStatistics | Select-Object TotalItemSize,TotalDeletedItemSize,ItemCount,LastLogonTime,LastLoggedOnUserAccount
        

    Bitte lass hier das Select-Object weg. Das ist zum einen nicht notwendig, aber vorallem erzeugt es ein neues Objekt mit anderen Eigenschaften ("NoteProperty"). Da Du danach auf die Eigenschaften der Original-Attrbute zugreifst, solltest Du die erhalten.

    $stats.TotalItemSize.Value.ToMB()

    2. TotalItemSize hat eine Falle, das kann auch den Wert "unlimited" haben.

    Dann ist $stats.TotalItemSize.IsUnlimited = true und Value = leer.

    Den bekommt es immer dann, wenn auf dem Postfach keine Quotas sind. Das bedeutet, dass man bei einem Postfach ohne Quota nie eine valide Statistik bekommen kann (Abhilfe: Eine sehr große Quota setzen).

    3.

    $stats = $mb | Get-MailboxStatistics

    Wenn ich das richtig im Kopf habe, wirf "Get-MailboxStatistics" einen Fehler, wenn noch nie mit dem Postfach gearbeitet wurde und es daher in der Datenbank noch nie angelegt wurde.

    Die Anzeige unterdrückst Du zwar pauschal (würde ich nie machen, dann siehst Du auch andere Fehler nicht mehr), aber deswegen bleibt ja trotzdem der Fehler bestehen und ein "kaputtes" $stats Objekt übrig. Später arbeites Du mit $stats und hast Folgefehler, die Du dan "SilentlyContinue" im besten Fall aber nie siehst.

    4.

    $report = $report += $userObj

    Entweder:

    $report += $userObj

    Oder:

    $report = $report + $userObj


    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Donnerstag, 8. Juni 2017 14:22
  • TotalItemSize hat eine Falle, das kann auch den Wert "unlimited" haben.

    Dann ist $stats.TotalItemSize.IsUnlimited = true und Value = leer.

    Den bekommt es immer dann, wenn auf dem Postfach keine Quotas sind. Das bedeutet, dass man bei einem Postfach ohne Quota nie eine valide Statistik bekommen kann (Abhilfe: Eine sehr große Quota setzen).

    Das wäre ja ein total geiles Finding, wenn's so pauschal stimmen würde. Die Hälfte der Skripte, die versuchen, Mailboxnutzung zu dokumentieren, würden nämlich nicht funktionieren.

    Aber (Exchange 2013 CU15):

    Ich konnte durch (sehr) schnelles Googlen auch keine Erwähnung dieses Phänomens finden. Kannst Du hier Konkreteres beisteuern? Kann es sein, dass es ein Bug in einem bestimmten CU oder einer bestimmten Version ist/war?

    EDIT: Ich habe jetzt sogar einen User angelegt, der von vornherein keine Quotas hat und auch keine erbt, bekomme aber TotalItemSize dennoch korrekt angezeigt.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    Donnerstag, 8. Juni 2017 21:06
  • Ich konnte durch (sehr) schnelles Googlen auch keine Erwähnung dieses Phänomens finden. Kannst Du hier Konkreteres beisteuern? Kann es sein, dass es ein Bug in einem bestimmten CU oder einer bestimmten Version ist/war?

    Bei 2007 war das definitiv so, da habe ich das gefühlt 100x in meinen PowerShell-Kursen als Stolperstein benutzt. Die Teilnehmer sollten genau durch dieser Besonderheit lernen, wie man ein Objekt analysiert.

    Allerdings bin ich mir nicht mehr sicher, ob das Problem bei User Quota oder Database Quota unlimited auftrat.

    Bei 2010 habe ich eigentlich immer darauf geachtet, dass eine Quote gesetzt war.

    Sollte Microsoft den Bug irgendwann mal gefixt haben, wäre das gut, habe ich aber nicht mitbekommen.

    Ein Indikator dafür, dass das mal so war, ist ja das Objekt, das zurück gegeben wurde: Warum sollte man für die Größe einer Mailbox ein Objekt mit "Unlimited" nutzen. Die Entwickler von Exchange sind sehr "optimiert", wäre da nur eine Zahl drin, hätten sie eine Zahl benutzt. 

    Bei Testen übrigens nicht vergessen: Quota-Änderungen brauchen einige Zeit, bis sie wirksam werden. Schau mal morgen noch mal, ob das Ergebnis für "testerlein" noch so aussieht. Und mach den Test noch mal mit Databasequote.

    Würde mich interessieren, kann ich gerade noch ausprobieren.



    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Donnerstag, 8. Juni 2017 21:54
  • Ich schau da morgen nochmal drauf. Was Kurse angeht, ja, es ist immer doof, wenn die irgendwelche Sachen plötzlich fixen und man die Folien anpassen muss ;-)

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Donnerstag, 8. Juni 2017 22:00
  • So, auch 10 Stunden später ist das Ergebnis immer noch nicht "unlimited". Also haben sie es anscheinend doch gefixt.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 9. Juni 2017 08:02
  • So, auch 10 Stunden später ist das Ergebnis immer noch nicht "unlimited". Also haben sie es anscheinend doch gefixt.

    Ok, danke für den Test.

    Dann gibt es aber mit den vorliegenden Hinweisen keinen Ansatz, warum das Script bei manchen Datenbanken "nichts" auswirft.

    Der TO müsste dann mal die Unterschiede vergleichen.

    Ich würde das pauschale Fehlerunterdrücken abschalten. Es wäre nicht das erste Mal, dass ein Script zeigt, was schiefläuft, das sieht aber niemand.

    Berechtigungen könnten auch eine theoretische Ursache sein.


    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Freitag, 9. Juni 2017 10:14
  • Vielen Vielen Dank schonmal für eure Hilfe. Das merkwürdige ist, dass es ja schonmal funktioniert hat. Demnach kann es eher weniger an den Berechtigungen liegen. Ebenso liegt es demnach nicht an der Fehlerunterdrückung. Der Grund, warum ich mich an euch wende, ist ja der Punkt, dass ich keinen Fehler finde.
    Freitag, 9. Juni 2017 12:57
  • Vielen Vielen Dank schonmal für eure Hilfe. Das merkwürdige ist, dass es ja schonmal funktioniert hat. Demnach kann es eher weniger an den Berechtigungen liegen. Ebenso liegt es demnach nicht an der Fehlerunterdrückung. Der Grund, warum ich mich an euch wende, ist ja der Punkt, dass ich keinen Fehler finde.

    Dann ist die Antwort einfach, wenn auch nicht direkt hilfreich: Finde heraus, was sich geändert hat.

    "Nichts" kann ja nicht die richtige Antwort sein, denn dann würde ja noch alles funktionieren.

    Ich habe bei meinen Kunden daher "gesten ging noch alles" zuerst immer ignoriert und die Probleme so betrachtet, als wäre es noch fehlerfrei gewesen:

     - Unterschiede zwischen den Datenbanken betrachten

     - Unterschiede zwischen zwei betreffenden Usern betrachten

     - Debugging im Quellcode mit kleineren Ergebnismengen durchführen (ohne Fehler unterdrücken)

     - nimm einen User aus db3 und einen aus db5 und teste diese einzeln

    Ich hatte auch schon Merkwürdigkeiten aufgrund von Timing Problemen. Exchange hat nicht schnell genug geliefert oder AD nicht schnell genug repliziert. Mit einem "Start-Sleep 1" kamen plötzlich auch Ergebnisse aus vorher fehlenden Zeilen.


    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Freitag, 9. Juni 2017 13:50

  •  - nimm einen User aus db3 und einen aus db5 und teste diese einzeln

    Ich hatte auch schon Merkwürdigkeiten aufgrund von Timing Problemen. Exchange hat nicht schnell genug geliefert oder AD nicht schnell genug repliziert. Mit einem "Start-Sleep 1" kamen plötzlich auch Ergebnisse aus vorher fehlenden Zeilen.


    Gruesse aus Berlin schickt Robert - MVP Office Servers and Services (Exchange Server)

    Sobald ich die Befehle in die Konsole eingebe anstatt das Script auszuführen, kommen die gewünschten Ergebnisse ohne Meckern
    Freitag, 9. Juni 2017 14:00
  • Also zusammenfassend: Früher hat es innerhalb des Scriptes funktioniert, mittlerweile funktioniert es nur noch, wenn man es separat in die Konsole eingibt.
    Dienstag, 13. Juni 2017 08:36