Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Powershell | Count aantal mailboxen in script

Pagina: 1
Acties:

Vraag


  • Wylana
  • Registratie: April 2009
  • Laatst online: 17:42
Beste mede Tweakers,

Voor mijn werk ben ik bezig om een Powershell script te maken die een overzicht geeft van alle actieve gebruikers met mailbox, waarbij Room- en Sharedmailboxen niet worden meegenomen.

In het overzicht dat gemaakt wordt wil ik uiteindelijk de volgende zaken zien:

- Naam (van de gebruiker)
- E-mailadres
- Actief (dit moet altijd de waarde True zijn).
- Telling van het aantal mailboxen die gevonden zijn door het script.

Ik heb zover al de volgende code:
PowerShell:
1
Get-Mailbox -ResultSize Unlimited -Filter {-not(RecipientTypeDetails -like '*SharedMailbox*') -and -not(RecipientTypeDetails -like '*RoomMailbox*')} | ForEach-Object -Process { get-aduser -identity $_.samaccountname -properties * | where-object {$_.enabled -eq $True} |select-Object -Property Name,EmailAddress,Enabled,Count} | ConvertTo-HTML | Out-File c:\Windows\Temp\mailboxreport.htm


Ik krijg het nu alleen niet voor elkaar om het laatste punt (de telling) in mijn overzicht te krijgen.

Op internet heb ik al gezocht naar hoe dit zou moeten werken en zie dat Measure-Object de waardes kan tellen en dan doorvoeren.
Echter reikt mijn kennis nog niet zo ver, dat ik precies weet hoe dit in mijn code gezet moet worden.

Ik hoop dat iemand mij op weg kan helpen om mijn uiteindelijke rapportage volledig te krijgen.

Ik ben steenrijk....ik heb een grindpad!

Beste antwoord (via Wylana op 24-06-2016 14:51)


  • Oaquasis
  • Registratie: Oktober 2004
  • Laatst online: 14:40
Ben niet zo van de oneliners...Dit kan vast ook in een oneliner maar dan wordt het totaal onleesbaar.
Dit zou moeten werken denk ik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$mailboxes = Get-Mailbox -ResultSize Unlimited -Filter {-not(RecipientTypeDetails -like '*SharedMailbox*') -and -not(RecipientTypeDetails -like '*RoomMailbox*')}
$nrOfMailboxes = ($mailboxes).count
$output = @()

Foreach($mailbox in $mailboxes){
    $user = Get-ADuser -identity $mailbox.SamAccountname -properties * | Select Name,EmailAddress,Enabled
    $output += New-Object psobject -Property @{
        Naam = $user.Name
        Emailadres = $user.EmailAddress
        Actief = $user.Enabled
        AantalTotaal = $nrOfMailboxes
    }
}

$output | Export-Csv C:\Windows\Temp\mailboxreport.csv -NoTypeInformation

Alle reacties


  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 16:40

MAX3400

XBL: OctagonQontrol

Maak je geen denkfout in je ForEach? Ik neem aan dat elke gebruiker maar 1 mailbox heeft maar je geeft je count op in de ForEach-loop en ik denk dat je daarover struikelt.

Gooi je loopje even weg en probeer dit eens:
code:
1
(Get-Mailbox -ResultSize Unlimited -Filter {-not(RecipientTypeDetails -like '*SharedMailbox*') -and -not(RecipientTypeDetails -like '*RoomMailbox*')}).count

Volgens mij krijg je dan in principe het totaal aantal user-mailboxen op de server; dit kan je dan weer joinen met je overige eisen (naam, adres, etc).

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


  • Wylana
  • Registratie: April 2009
  • Laatst online: 17:42
Bedankt MAX3400,

Jouw stukje toont inderdaad mijn waarde weer van het totaal aantal mailboxen dat het script telt.
Echter hoe krijg ik die waarde dan gejoined met mijn eigen waarde?

Ik dacht door jouw commando te pipen, voor mijn script, zodat hij de waarde zou meemen, maar ik denk dat ik dit verkeerd zie.

Ik ben steenrijk....ik heb een grindpad!


  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 16:40

MAX3400

XBL: OctagonQontrol

Ik zou het anders doen; even niet in code dan maar; hopelijk past het in jouw omgeving

- connect to mailboxserver A
-- loopje beginnen voor je users
--- for each user, select de properties, export naar csv-file
-- loopje eindigen
- tel totaal aantal mailboxen voor deze server, export naar dezelfde csv-file

En dat doe je voor elke mailboxserver. CSV vind ik handiger; kan je ook makkelijker nog cross-referencen, sorteren etc.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


  • Wylana
  • Registratie: April 2009
  • Laatst online: 17:42
MAX3400 schreef op vrijdag 24 juni 2016 @ 14:18:
Ik zou het anders doen; even niet in code dan maar; hopelijk past het in jouw omgeving

- connect to mailboxserver A
-- loopje beginnen voor je users
--- for each user, select de properties, export naar csv-file
-- loopje eindigen
- tel totaal aantal mailboxen voor deze server, export naar dezelfde csv-file

En dat doe je voor elke mailboxserver. CSV vind ik handiger; kan je ook makkelijker nog cross-referencen, sorteren etc.
Helaas is dit geen optie omdat het een rapportage moet worden voor onze sales afdeling die bij houdt hoeveel actieve gebruikers een klant heeft. Op basis hiervan wordt bepaald of de klant moet bijbetalen of niet.

Het enige dat ik dus nog nodig heb is die telling. Echter als dat te moeilijk is om in de code te zetten, dan zal sales dit zelf maar doen door copy-paste in excel.

Ik ben steenrijk....ik heb een grindpad!


  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 16:40

MAX3400

XBL: OctagonQontrol

Hint: kan je dan niet beter met Custom Attributes werken? Geen idee hoeveel klanten je hebt maar dan kan je beter/handiger op basis van klant een custom attribute invullen/aanmaken bij usermailboxen. Is een veel simpeler query uiteindelijk en lijkt dan op mijn eerdere reply.

code:
1
(Get-mailbox -ResultSize Unlimited | where {$_.CustomAttribute1 -eq 'Klantnaam1'}).Count | ConvertTo-HTML | Out-File C:\Klantnaam1.html


Desnoods maak je van Klantnaam ook nog een import (zoals een CSV) en dan hou je 2 regels over (de import-variable vanuit een CSV en de query) waarbij je in mijn voorbeeld Klantnaam1 vervangt door je import-variabele.

Kan Sales lekker die CSV bijhouden en zolang die up-to-date is, trap je een Scheduled Task af waarbij elke week de HTML-files in een bepaalde dir komen te staan?

Iets zegt me dat Sales je nu iets probeert op te leggen terwijl ze zelf enorm inflexibel zijn met wat er snel/makkelijk op te leveren is.

[ Voor 43% gewijzigd door MAX3400 op 24-06-2016 14:39 . Reden: Code correctie ]

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


  • Oaquasis
  • Registratie: Oktober 2004
  • Laatst online: 14:40
Welke telling wil je precies hebben?
Alle mailboxen van die gebruiker of het totaal aantal mailboxen?

  • Wylana
  • Registratie: April 2009
  • Laatst online: 17:42
MAX3400 schreef op vrijdag 24 juni 2016 @ 14:30:
Hint: kan je dan niet beter met Custom Attributes werken? Geen idee hoeveel klanten je hebt maar dan kan je beter/handiger op basis van klant een custom attribute invullen/aanmaken bij usermailboxen. Is een veel simpeler query uiteindelijk en lijkt dan op mijn eerdere reply.

code:
1
(Get-mailbox -ResultSize Unlimited | where {$_.CustomAttribute1 -eq 'Klantnaam1'}.Count) | ConvertTo-HTML | Out-File C:\Klantnaam1.html


Desnoods maak je van Klantnaam ook nog een import (zoals een CSV) en dan hou je 2 regels over (de import-variable vanuit een CSV en de query) waarbij je in mijn voorbeeld Klantnaam1 vervangt door je import-variabele.

Kan Sales lekker die CSV bijhouden en zolang die up-to-date is, trap je een Scheduled Task af waarbij elke week de HTML-files in een bepaalde dir komen te staan?

Iets zegt me dat Sales je nu iets probeert op te leggen terwijl ze zelf enorm inflexibel zijn met wat er snel/makkelijk op te leveren is.
Nee helaas niet. Dit omdat de query via een aparte tooling loopt die een geheel script verstuurd (waarbij dit script een onderdeel is).

Evengoed bedankt voor het meedenken.
Oaquasis schreef op vrijdag 24 juni 2016 @ 14:32:
Welke telling wil je precies hebben?
Alle mailboxen van die gebruiker of het totaal aantal mailboxen?
Totaal aantal mailboxen.

[ Voor 72% gewijzigd door Wylana op 24-06-2016 14:40 ]

Ik ben steenrijk....ik heb een grindpad!


Acties:
  • Beste antwoord

  • Oaquasis
  • Registratie: Oktober 2004
  • Laatst online: 14:40
Ben niet zo van de oneliners...Dit kan vast ook in een oneliner maar dan wordt het totaal onleesbaar.
Dit zou moeten werken denk ik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$mailboxes = Get-Mailbox -ResultSize Unlimited -Filter {-not(RecipientTypeDetails -like '*SharedMailbox*') -and -not(RecipientTypeDetails -like '*RoomMailbox*')}
$nrOfMailboxes = ($mailboxes).count
$output = @()

Foreach($mailbox in $mailboxes){
    $user = Get-ADuser -identity $mailbox.SamAccountname -properties * | Select Name,EmailAddress,Enabled
    $output += New-Object psobject -Property @{
        Naam = $user.Name
        Emailadres = $user.EmailAddress
        Actief = $user.Enabled
        AantalTotaal = $nrOfMailboxes
    }
}

$output | Export-Csv C:\Windows\Temp\mailboxreport.csv -NoTypeInformation

  • Wylana
  • Registratie: April 2009
  • Laatst online: 17:42
Oaquasis schreef op vrijdag 24 juni 2016 @ 14:46:
Ben niet zo van de oneliners...Dit kan vast ook in een oneliner maar dan wordt het totaal onleesbaar.
Dit zou moeten werken denk ik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$mailboxes = Get-Mailbox -ResultSize Unlimited -Filter {-not(RecipientTypeDetails -like '*SharedMailbox*') -and -not(RecipientTypeDetails -like '*RoomMailbox*')}
$nrOfMailboxes = ($mailboxes).count
$output = @()

Foreach($mailbox in $mailboxes){
    $user = Get-ADuser -identity $mailbox.SamAccountname -properties * | Select Name,EmailAddress,Enabled
    $output += New-Object psobject -Property @{
        Naam = $user.Name
        Emailadres = $user.EmailAddress
        Actief = $user.Enabled
        AantalTotaal = $nrOfMailboxes
    }
}

$output | Export-Csv C:\Windows\Temp\mailboxreport.csv -NoTypeInformation
Thanks dit is wat ik wil hebben.
Onwijs bedankt hiervoor.

Ik ben steenrijk....ik heb een grindpad!

Pagina: 1