Benutzer mit den meisten Antworten
Select Parameter aus mehreren Pieps

Frage
-
Hallo zusammen,
ich weiss nicht so genau ob der Titel so richtig ist. Ich stehl mal den Code ein, dann wird es wahrscheinlich klarer:
$Database = get-mailboxdatabase | where {$_.IssueWarningQuota -lt 2GB -and $_.MasterServerOrAvailabilityGroup -eq "DAG" } foreach ($Item in $Database) { write-host $Item get-mailbox -Database $Item -RecipientTypeDetails "UserMailbox"| where {$_.UseDatabaseQuotaDefaults -eq $false -and $_.samaccountname -notlike "si*" -and $_.samaccountname -notlike "mo*" -and $_.samaccountname -notlike "mb*" -and $_.samaccountname -notlike "fc*" -and $_.samaccountname -notlike "srvc*" -and $_.samaccountname -notlike "sv*" }
| Get-MailboxStatistics |select samaccountname,Database,TotalItemSize |Export-CSV "C:\temp\std_user_nonDatabaseQuotaDefaults_$Item.csv" }
Wie man sehen kann, lasse ich mir erst alle DB´s aus einer Bestimmten DAG auslesen, dann mache ich ein Get-Mailbox mit einigen filtern. Danach ein Get-MailboxStatistics und ein Select. In dem Select habe ich drei Parameter angegeben, es geht auch soweit alles, leider kennt Mailboxstatistics kein samaccountname, ich will aber auch nicht mit dem Displaynamen arbeiten. Wie kann ich es nun erreichen, dass mir im select auch der samaccountname angezeigt wird?
Danke für Tipps und Anregungen :-)
Gruß
Uwe
Antworten
-
Was sind denn "Pieps"? :)
Jedenfalls, eine Möglichkeit ist, den Output mit select-object entsprechend umzubauen, d.h dir eigene Properties mit den gewünschten Werten zu erstellen.
Ein einfaches Beispiel zum Verständnis: Angenommen, ich möchte mit Get-process alle Prozesse mit ID und Prozessname ausgeben und in die Ausgabe eine zusätzliche Spalte einfügen, in der alle Prozessnamen in Großbuchstaben geschrieben sind. Die Spalte soll "ProcNameInGross" heissen:
Get-Process | select id,Processname, @{name = "ProcNameInGross" ; expression = { $_.Processname.toupper()}}
Auf deinen Code übertragen, heißt das du setzt an der Stelle an, an dem der Samaccountname noch vorhanden ist. Das ist in er Pipeline direkt nach deiner "where {$_.UseDatabaseQuotaDefaults ..." - Bedingung.
Dann selektierst du Samaccountname und erstellst dir zwei weitere Properties (Database und Totalitemsize) mit den Werten aus "Get-MailboxStatistics":
select samaccountname,@{Name = "Database" ; Expression = { (Get-MailboxStatistics $_).Database} , @{Name = "TotalItemSize" ; Expression = { (Get-MailboxStatistics $_).TotalItemSize }
Da ich mangels Exchange den Code nicht testen kann, wäre es gut wenn du das Prinzip verstanden hast. :)
Dann kannst du das ganze an Export-CSV übergeben. Die ganze Pipeline:
get-mailbox -Database $Item -RecipientTypeDetails "UserMailbox"| where { <deine Bedingungen> } | select samaccountname,@{Name = "Database" ; Expression = { (Get-MailboxStatistics $_).Database} , @{Name = "TotalItemSize" ; Expression = { (Get-MailboxStatistics $_).TotalItemSize } | Export-CSV "C:\temp\std_user_nonDatabaseQuotaDefaults_$Item.csv"
Der einzige "Nachteil" an dieser Methode ist, das nun Get-MailboxStatistics je Mailbox zweimal aufgerufen wird. Falls das ein Performanceproblem bei dir geben sollte, kann man das Ganze auch so umbauen, das das nur einmal passiert. Ich wollte es aber nicht noch komplizierter machen, daher schau mal ob dir das so reicht.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 2. Oktober 2012 16:23
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 4. Oktober 2012 13:20
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 4. Oktober 2012 18:03
Alle Antworten
-
Was sind denn "Pieps"? :)
Jedenfalls, eine Möglichkeit ist, den Output mit select-object entsprechend umzubauen, d.h dir eigene Properties mit den gewünschten Werten zu erstellen.
Ein einfaches Beispiel zum Verständnis: Angenommen, ich möchte mit Get-process alle Prozesse mit ID und Prozessname ausgeben und in die Ausgabe eine zusätzliche Spalte einfügen, in der alle Prozessnamen in Großbuchstaben geschrieben sind. Die Spalte soll "ProcNameInGross" heissen:
Get-Process | select id,Processname, @{name = "ProcNameInGross" ; expression = { $_.Processname.toupper()}}
Auf deinen Code übertragen, heißt das du setzt an der Stelle an, an dem der Samaccountname noch vorhanden ist. Das ist in er Pipeline direkt nach deiner "where {$_.UseDatabaseQuotaDefaults ..." - Bedingung.
Dann selektierst du Samaccountname und erstellst dir zwei weitere Properties (Database und Totalitemsize) mit den Werten aus "Get-MailboxStatistics":
select samaccountname,@{Name = "Database" ; Expression = { (Get-MailboxStatistics $_).Database} , @{Name = "TotalItemSize" ; Expression = { (Get-MailboxStatistics $_).TotalItemSize }
Da ich mangels Exchange den Code nicht testen kann, wäre es gut wenn du das Prinzip verstanden hast. :)
Dann kannst du das ganze an Export-CSV übergeben. Die ganze Pipeline:
get-mailbox -Database $Item -RecipientTypeDetails "UserMailbox"| where { <deine Bedingungen> } | select samaccountname,@{Name = "Database" ; Expression = { (Get-MailboxStatistics $_).Database} , @{Name = "TotalItemSize" ; Expression = { (Get-MailboxStatistics $_).TotalItemSize } | Export-CSV "C:\temp\std_user_nonDatabaseQuotaDefaults_$Item.csv"
Der einzige "Nachteil" an dieser Methode ist, das nun Get-MailboxStatistics je Mailbox zweimal aufgerufen wird. Falls das ein Performanceproblem bei dir geben sollte, kann man das Ganze auch so umbauen, das das nur einmal passiert. Ich wollte es aber nicht noch komplizierter machen, daher schau mal ob dir das so reicht.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 2. Oktober 2012 16:23
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 4. Oktober 2012 13:20
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 4. Oktober 2012 18:03
-
Hallo Denniver,
vielen Dank, dass ist schon mal der Richtige Weg :-)
ich habe deinen Vorschlag etwas umgeschrieben:
get-mailbox -Database $Item.Name | where {Bedingung} | select samaccountname,Database,@{Name = "TotalItemSize" ; Expression = {(Get-MailboxStatistics $_).TotalItemSize}} | Export-CSV "C:\temp\std_user_nonDatabaseQuota_$Item.csv"
Es wird auch die Spalte TotalItemSize dazu geschrieben, aber leider scheint $_ leer zu sein, da keine Daten in die Spalte geschrieben werden. $_.samaccountname, hat leider auch nicht geholfen.
Gruß
Uwe
-
Prinzipiell ist der Code so richtig. $_ kann auch nicht leer sein, sonst hättest du gar keine Ausgabe. Es liegt dann wohl an
(Get-MailboxStatistics $_).TotalItemSize
Ich kanns leider nicht testen, aber wenn dein Code oben stimmt, dann sollte auch
(Get-MailboxStatistics).TotalItemSize
an der Stelle gehen.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". -
Hi Denniver,
ich habe es erst mal so gelöst:
foreach ($Item in $Database) { # write-host $Item $User = "" $User = get-mailbox -Database $Item.Name | where {$_.UseDatabaseQuotaDefaults -eq $false} foreach($Quota in $User){ # write-host $Quota.Name $User |select samaccountname,Database,@{Name = "TotalItemSize" ; Expression = {(Get-MailboxStatistics $Quota.Name).TotalItemSize}} | Out-File "C:\temp\std_user_nonDatabaseQuota_$Item.txt" -append } }
ich schau mal ob ich die Datenausgabe noch etwas hübscher bekomme, dann sollte es ok sein.
Vielen Dank für den Denkanstoss. Ich markiere es mal als gelöst.
Gruß
Uwe
-
Da Exchange mittlerweile sehr Stark mit PowerShell Administriert wird (und ich auch kein Exchange habe), empfehle ich, solche fragen im Exchange Forum zu stellen:
http://social.technet.microsoft.com/Forums/de-de/exchange_serverde/threads<object height="0" id="plugin0" style=";z-index:1000;" type="application/x-dgnria" width="0"><param name="tabId" value="ff-tab-14" /><param name="counter" value="91" /></object>Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' ' -
Ach, die ein oder andere Exchangefrage schaffen wir schon, Peter. :)
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort". -
Moin,
get-mailbox -Database $Item.Name | where {Bedingung} | select samaccountname,Database,@{Name = "TotalItemSize" ; Expression = {(Get-MailboxStatistics $_).TotalItemSize}} | Export-CSV "C:\temp\std_user_nonDatabaseQuota_$Item.csv"
Get-Mailboxstatistics ist manchmal etwas pingelig, wenn die Shelle "zu schnell ist".
Probier mal:
get-mailbox | select samaccountname,Database,@{Name = "TotalItemSize" ; Expression = {start-sleep -Milliseconds 100; (Get-MailboxStatistics $_).TotalItemSize }}
Es würde mich nicht wundern, wenn Du dann plötzlich zahlen bekommst.
Es gab in der internen Maillingliste auch mal eine Frage dazu, hat irgendwas mit der Latenz der Abfragen zu den Datenbanken zu tun.
Grüße aus Berlin schickt Robert
MVP Exchange Server