Any errors in spelling, tact, or fact are transmission errors.
[System.GC]::Collect()downtime schreef op woensdag 06 juli 2016 @ 18:03:
[...]
Mijn record is 9GB. Hoe roep je die GC handmatig aan? Klinkt erg nuttig.
(Dit is de .Net GC). Voordat het zin heeft dien je wel de ongebruikte variables te nullen omdat er anders niets te garbage collecten valt (dus $bla = $null OF Remove-Variable op de var)
Je voert het commando remote uit? Is dit niet gewoon een beperking daarvan? Probeer het is vanuit een lokale posh sessie.Oogje schreef op woensdag 06 juli 2016 @ 18:13:
[...]
Zit me eerst een uur blind te starten op die foutmelding en bedenk me net dat ik misschien mn selectie moet verkleinen en ineens valt t kwartje...ik wil de statistics niet van alles, dus daar moet ik al een filtering toepassen.Dus voeg ik dit toe: |Where {$_.totalitemsize -gt 10240Mb}
Nog steeds dezelfde foutmelding maar de variabele is wel gevuld met t eindresultaat
Ik ga er maar een nachtje over slapen
Even schaamteloos cross posten trouwens. Maar * Craven heeft bijna zijn test framework af. Een paar 1000 regels aan powershell code verder kunnen we nu volautomatisch:
- rds, view en xendesktop uitrollen en configgen
- onze 3 eigen producten uitrollen en configgen
- een developer kan met 3 antwoorden een volledige testomgeving uitrollen binnen een kwartier
- we met een paar klikken een extra test hebben hangen
Zometeen kan een devvers iets committen waarna er een paar uur later een functionerend stuk software uit komt rollen met volledig testrapport zonder dat ik ook maar een vinger hoef uit te steken.
I love it when a plan comes together
het was initieel niet mijn plan maar dat mag de pret niet drukken
[ Voor 37% gewijzigd door Craven op 06-07-2016 19:36 ]
Kijk hier eens naar http://stackoverflow.com/...-size-in-a-remote-commandOogje schreef op woensdag 06 juli 2016 @ 17:11:
Ik kan me redelijk redden met powershell maar loop nu tegen een geheugenprobleempje aan waarbij ik zo 1,2,3, niet zie hoe ik dit kan omzeilen. De max van 52Mb voor een PS sessie is mn waterloo op het moment.
Ik heb een script en ergens daarin gebeurt dit:
PowerShell:
1 $mailboxsizes = get-mailbox -resultsize unlimited| Get-MailboxStatistics |Sort-Object TotalItemSize -Descending | Select-Object DisplayName,TotalItemSize -First 10
In mn testomgeving geen probleem maar in productie hebben we iets teveel mailboxen![]()
Iemand enig idee hoe ik dit kan omzeilen/oplossen? Of een richting waar ik in moet gaan denken? Uiteindelijk wil ik de 10 grootste mailboxen ergens in een HTML duwen waar nog wat meer info over mn Exchange omgeving staat.
/edit: als ik het niet in $mailboxsizes wil stoppen krijg ik op mn scherm wel netjes de top10 te zien.
Je kan de 52 MB limiet voor je variabele aanpassen met een pssessionconfiguration
@Craven: DSC met SMA? of wat je gebruik je daarvoor?
Battle.net: NagaByrd#2844
Ons eigen product bevat alle logica en intelligentie om RDS,View en XenDesktop uit te rollen en te configgen. Dat heeft ook een posh admin module dus daar kunnen we heel makkelijk tegenaan scripten. Het powershell framework eromheen zit allerlei custom code en knoopt alles aan elkaar vast. We praten namelijk ook tegen hyper-v om machines uit te rollen, in het domein te hangen en snapshots mee te maken. QaWizardPro heb ik er nu net bijna helemaal in geïntegreerd en verzorgt alle tests die we tegen de UI van onze producten willen doen. Oh en we gebruiken pester trouwens voor onze test logica en rapportages.
Maar dus gebaseerd op DSC/SMA momenteel.
Onze hypervisor is wel VMware waarop alles uitgerold wordt.
We twijfelen om Azure Automation te gebruiken ipv SMA voor de rapportering en logging.
Werkt allemaal heel leuk voor onze doeleinden.
Battle.net: NagaByrd#2844
* Craven is er blij mee
Exchange Management Shell is standaard implicit remotingCraven schreef op woensdag 06 juli 2016 @ 18:45:
[...]
Je voert het commando remote uit? Is dit niet gewoon een beperking daarvan? Probeer het is vanuit een lokale posh sessie.
Any errors in spelling, tact, or fact are transmission errors.
Niet supported op Exchange 2010 of hoger.Craven schreef op woensdag 06 juli 2016 @ 18:45:
[...]
Je voert het commando remote uit? Is dit niet gewoon een beperking daarvan? Probeer het is vanuit een lokale posh sessie.
Heb nu ook een eerste versie van onze rapportage module. Vroegah was dat makkelijk en hoefden we alleen maar pester resultaten te interpreteren. Nu moet ik queries loslaten op een SQLite db en die meuk weer toevoegen aan mijn pester resultaten. Nu weet ik direct weer waarom ik een hekel had een SQL tijdens mijn studie...
Ik ben ook blij dat jij dat niet hoeft te beheren.Craven schreef op vrijdag 08 juli 2016 @ 11:19:
Gatverdamme... ben ik blij dat ik dat niet hoef te beheren...
[ Voor 18% gewijzigd door Jazzy op 08-07-2016 11:24 ]
Heb jij als Exchange goeroe nog een suggestie om mn script te redden?Jazzy schreef op vrijdag 08 juli 2016 @ 11:23:
[...]
Ik ben ook blij dat jij dat niet hoeft te beheren.Remote PowerShell is echt de way to go als je servers beheert die over de hele wereld kunnen staan.
edit:
Ik heb het maar met een omweg opgelost. In plaats van alle mailboxen ineens verwerk ik ze nu per server en voeg ze op het laatst samen. Ik haal nu per server de top10 op en maak daar uiteindelijk een top10 voor de hele omgeving van. Is qua doorlooptijd nog sneller ook
1
2
3
4
5
6
7
8
9
| $servers=Get-Exchangeserver foreach ($server in $servers){ $mailboxsizes+=Get-MailboxStatistics -Server $server| Sort-Object TotalItemSize -Descending| Select-Object DisplayName,TotalItemSize -First 10 } $mailboxsizes = $mailboxsizes |Sort-Object TotalItemSize -Descending| Select-Object DisplayName,TotalItemSize -First 10 |
[ Voor 48% gewijzigd door Oogje op 08-07-2016 16:09 ]
Any errors in spelling, tact, or fact are transmission errors.
Remote powershell is zeker the way to go. Ik doe niks anders. Maar dat een product dat vereist terwijl je op de machine zelf bent ingelogd vind ik wel ranzig...Jazzy schreef op vrijdag 08 juli 2016 @ 11:23:
[...]
Ik ben ook blij dat jij dat niet hoeft te beheren.Remote PowerShell is echt de way to go als je servers beheert die over de hele wereld kunnen staan.
@hierboven je gebruikt 2 maal dezelfde variabele terwijl het een andere inhoud heeft. Is niet echt best practice/overzichtelijk maar werkt prima.
Edit: oh wacht dat was de oplossing voor je probleem al. Dacht dat je om suggesties vroeg
[ Voor 21% gewijzigd door Craven op 10-07-2016 20:00 ]
Ik gebruik nu maar .Net als workaround maar wel irritant.
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Ik zag het gisteren toevallig al, ik heb mij net opgegeven (en mijn Powershellende collega gemeld dat hij toch echt snel zijn ticket moet aanvragen)ralpje schreef op donderdag 14 juli 2016 @ 09:43:
Voor de liefhebbers: begin September is er weer een nieuwe meeting van de Dutch Powershell User Group (DuPSUG). Eén van de sprekers dit keer is Ed Wilson, ook bekend als de Microsoft Scripting Guy. Er zijn, op dit moment, nog een stuk of 30 kaarten beschikbaar. Het is een gratis evenement en naar mijn ervaring altijd zeer de moeite waard om te bezoeken als je serieus met PoSH bezig bent
Hopelijk reageert hij een beetje snel...
Computer says no
Even mailen met admin@dupsug.comCraven schreef op donderdag 14 juli 2016 @ 22:11:
Ook ingeschreven. Wel dubbel per ongeluk... Achteraf wijzigen is moeilijk als je het verkeerde mailadres hebt ingevoerd, als je het überhaupt kan wijzigen. Zit je toevallig in de organisatie?
Een hele rij microsoft certificeringen.
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Het verbaasde mij enigzins dat er nog kaartjes waren
Computer says no
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| Import-Module 'C:\Program Files (x86)\PSSQLite\PSSQLite.psm1' $database = 'D:\Data\Desktop\UsageReporting.db' $Sessions = Invoke-SqliteQuery -Query "Select * from UsageReportingSession" -datasource $database $Users = Invoke-SqliteQuery -query "Select * from UsageReportingUser" -datasource $database $Output = $null $Counter = 0 $TotalSessions = $Sessions.Count foreach ($Session in $Sessions){ $Counter ++ Write-Progress -Activity "Processing sessions ($Counter/$TotalSessions)" -PercentComplete $($Counter/$TotalSessions * 100) $Username = ($Users | Where {$_.Id -eq $Session.UserId}).Username $Logon = [datetime]$Session.LogonTimestamp $Logoff = [datetime]$Session.LogoffTimestamp [array]$Output += "$Username;$Logon;$Logoff" } |
1
2
3
| $csv = Import-Csv C:\pad\naar\file.csv | Where-Object {$_.appref -like "*zoekterm*"} if ($csv) { Write-Host "variable is NOT null" } if (!$csv) { Write-Host "variable is null" } |
Te verwachten uitvoer: variable is NOT null
In Windows PowerShell ISE: variable is NOT null
Commando's ingevoerd op de PowerShell console: variable is NOT null
Ps1 script uitgevoerd vanaf de PowerShell console: variable is NOT null
Ps1 script uitgevoerd vanuit verkenner: variable is null
.....
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Een hele rij microsoft certificeringen.
Kan het NIET reproduceren, sorry.Raven schreef op donderdag 04 augustus 2016 @ 21:41:
* Raven maakt een PowerShell script met o.a.
PowerShell:
1 2 3 $csv = Import-Csv C:\pad\naar\file.csv | Where-Object {$_.appref -like "*zoekterm*"} if ($csv) { Write-Host "variable is NOT null" } if (!$csv) { Write-Host "variable is null" }
Te verwachten uitvoer: variable is NOT null
In Windows PowerShell ISE: variable is NOT null
Commando's ingevoerd op de PowerShell console: variable is NOT null
Ps1 script uitgevoerd vanaf de PowerShell console: variable is NOT null
Ps1 script uitgevoerd vanuit verkenner: variable is null
.....![]()
Zojuist een test .csv file gemaakt [waardes aangepast natuurlijk] en alle 4 de opties geven mij het verwachte resultaat.
pr0mpt - It never hurts to help!
Ik gebruikCraven schreef op vrijdag 05 augustus 2016 @ 06:29:
Geen relatieve paden gebruikt ergens?
1
2
3
4
| $MyInvocation.MyCommand.Path $ScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent $ScriptRoot\bestandsnaam |
Niks, $csv lijk leeg te zijn.@r!k schreef op vrijdag 05 augustus 2016 @ 08:54:
En als je de output van $csv laat weergeven, wat krijg je dan?
Check, anders zou de rest van het script het niet eens doenTommiiee schreef op vrijdag 05 augustus 2016 @ 09:00:
Stomme vraag misschien, maar script uitgevoerd als Administrator? Dat heeft mij namelijk zó vaak dit soort problemen opgeleverd..
Thanks voor 't testenpr0mpt schreef op vrijdag 05 augustus 2016 @ 10:44:
[...]
Kan het NIET reproduceren, sorry.
Zojuist een test .csv file gemaakt [waardes aangepast natuurlijk] en alle 4 de opties geven mij het verwachte resultaat.
Ik ben inmiddels wel iets op het spoor. Voor het csv gebeuren worden er 2 services gestopt om een file te unlocken, na het kopiëren van de geunlockte file naar een toegankelijke plek worden die services weer gestart. Heb net voor de csv-commando's een korte delay toegevoegd in de vorm van
1
| Start-Sleep -Second 1 |
Zou haast denken dat Import-Csv afhankelijk is van de 2 gestopte en gestarte services die mogelijk op het moment van het uitvoeren van Import-Csv nog niet helemaal gestart zijn. Al had ik dan wel een foutmelding verwacht....
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Jakkie, doe danRaven schreef op vrijdag 05 augustus 2016 @ 10:50:
[...]
Ik gebruikPowerShell:Dat lijkt gewoon te werken.
1 2 3 4 $MyInvocation.MyCommand.Path $ScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent $ScriptRoot\bestandsnaam
[...]
Niks, $csv lijk leeg te zijn.
[...]
Check, anders zou de rest van het script het niet eens doen
[...]
Thanks voor 't testen
Ik ben inmiddels wel iets op het spoor. Voor het csv gebeuren worden er 2 services gestopt om een file te unlocken, na het kopiëren van de geunlockte file naar een toegankelijke plek worden die services weer gestart. Heb net voor de csv-commando's een korte delay toegevoegd in de vorm van
PowerShell:Dat lijkt het op te lossen
1 Start-Sleep -Second 1
Zou haast denken dat Import-Csv afhankelijk is van de 2 gestopte en gestarte services die mogelijk op het moment van het uitvoeren van Import-Csv nog niet helemaal gestart zijn. Al had ik dan wel een foutmelding verwacht....
http://www.powershellmaga...reach-a-specified-status/
Nice, mooie tip!
pr0mpt - It never hurts to help!
Noted, thanks
Nu wachten tot de bug van W10 waarvoor ik dit script had geschreven weer terug komt om te testen of ik er wat aan kan doen
After the first glass you see things as you wish they were. After the second you see things as they are not. Finally you see things as they really are, and that is the most horrible thing in the world...
Oscar Wilde
Even kijken of er nog Tweakers komen, behalve dan @r!k en ralpje
pr0mpt - It never hurts to help!
En volgens mij heb ik in dit topic al meer mensen met een ticket gezien.
Minimeet!
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
https://blogs.technet.mic...uble-hop-solved-securely/
[ Voor 8% gewijzigd door nagasy op 31-08-2016 16:20 ]
Battle.net: NagaByrd#2844
Credssp gebruik ik regelmatig bij klanten en ik word sowieso helemaal gek van de requirements en (het gebrek aan) de stabiliteit.nagasy schreef op woensdag 31 augustus 2016 @ 16:20:
Voor de geïnteresseerden die problemen ondervinden met double-hop en geen credssp willen gebruiken.
https://blogs.technet.mic...uble-hop-solved-securely/
Kijken of ik dat kan testen.
Voor wie er wel is: * ralpje zit op de tafels aan de linkerzijde van de ruimte, grijs overhemd en iets te slecht onderhouden baard.
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
pr0mpt - It never hurts to help!
Computer says no
Edit: groene blouse met zwarte ringbaard overigens.
[ Voor 11% gewijzigd door Craven op 01-09-2016 14:52 ]
Ik zou jullie product inderdaad wel eens in een DuPSUG-sessie willen zien. En ik heb gezwaaidCraven schreef op donderdag 01 september 2016 @ 14:51:
Ik ben al de hele tijd bezig met stoelendans. Dit is mijn eerste dupsug maar misschien moet ik zelf maar is een sessie geven. Ik kan misschien wel een pester2.0 sessie geven. Of een sessie over ons posh based product.
Edit: groene blouse met zwarte ringbaard overigens.
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
[ Voor 47% gewijzigd door ralpje op 01-09-2016 18:33 ]
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Time management is niet mijn beste punt
what the f* zat er in die vleesstokjes op het eind? Mijn ingewanden do not agree
[ Voor 19% gewijzigd door Craven op 01-09-2016 21:36 ]
Ik denk dat je het goed zou doen op DuPSUG-meeting, ook leuk om eens nieuwe gezichten te zien dan de usual suspects
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Is het vaak dit zelfde groepje dan? Je zou denken dat ertoch wel wat afwisseling in zit.
[ Voor 26% gewijzigd door Craven op 01-09-2016 23:21 ]
Er zitten wel de usual suspects vaak, maar ook veel nieuw zoals je gisteren zag.Craven schreef op donderdag 01 september 2016 @ 23:18:
We zullen zien, heb de laatste tijd veel sales gedaan. Moet er ff wat tijd in steken om er geen marketing praatje van te maken.
Is het vaak dit zelfde groepje dan? Je zou denken dat ertoch wel wat afwisseling in zit.
Was leuk om ook wat gezichten bij avatars te zien
pr0mpt - It never hurts to help!
Edit: mis 1 dingetje in VS code. Ik kan geen losse commando's uitvoeren in de huidige sessie. In de ISE wilde ik nog wel is troubleshooten en ff wat losse code uitvoeren. Nu moet ik iedere keer een stukje code in het script typen en dan uitvoeren met F8. Omslachtig en irritant. In de terminal (heb ik aangepast naar powershell) zit ik niet in mijn sessie en in het output window kan ik weer geen code typen...
[ Voor 34% gewijzigd door Craven op 05-09-2016 14:45 ]
Ik gebruik zelf vooral ISE Steroids, werkt enorm fijn moet ik zeggen.Craven schreef op maandag 05 september 2016 @ 11:37:
Ik weet niet meer wie het er tijdens de sessie over had (dacht Jeff) maar ik kan Visual Studio Code wel aanbevelen in ieder geval. Het code een stuk lekkerder dan de ISE. Voorheen zat ik altijd te klooien met een combo tussen de ISE (makkelijk troubleshooten) en notepad++ (vind ik persoonlijk toch lekkerder lezen/typen). Maar voor zover ik nu kan zien kan visual studio code beide wel.
Edit: mis 1 dingetje in VS code. Ik kan geen losse commando's uitvoeren in de huidige sessie. In de ISE wilde ik nog wel is troubleshooten en ff wat losse code uitvoeren. Nu moet ik iedere keer een stukje code in het script typen en dan uitvoeren met F8. Omslachtig en irritant. In de terminal (heb ik aangepast naar powershell) zit ik niet in mijn sessie en in het output window kan ik weer geen code typen...
Daarnaast kan je met themes heel makkelijk in ISE aanpassen hoe alles er uit ziet, hier een kleine collectie en de officiele Visual Studio theme van Microsoft zelf
pr0mpt - It never hurts to help!
Die themes kan ik nog even proberen iig.
Ik vind persoonlijk het intuitief fijn werken, dat had ik compleet niet met VS Code.Craven schreef op dinsdag 06 september 2016 @ 19:32:
Ik heb het een tijdje geleden uitgeprobeerd maar vond het niet zo heel spannend eerlijk gezegd. Wat vind jij zo handig aan die steroïden dan?
Die themes kan ik nog even proberen iig.
Bijvoorbeeld de tab-completion vind ik daar niet fijn.
In ISE Steroids is het bijvoorbeeld het makkelijk converten naar Function of naar Module, snippets, direct met F2 alle "instances" van een variabele wijzigen in je script, de versioning die je kan gebruiken en bijvoorbeeld de syntax analyzer welke aangeeft als je per ongeluk nog een alias hebt gebruikt of " ipv ' .
pr0mpt - It never hurts to help!
* ralpje is dus ook fan van ISESteroids, maar dat kan ook komen door het feit dat ik ooit een blogpostjes over ISESteroids heb geschreven en daarvoor een gratis license kreeg. Dat wist ik overigens pas nadat ik het blogpostje had gemaakt, dus het is geen positief-omdat-het-moet-post
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Niet vergeten, daarnaast hadden we ook al een licentie via vorige baas gescoredralpje schreef op woensdag 07 september 2016 @ 08:35:
En erg prettig: vanuit de console in ISE een stuk code typen en testen en vervolgens met één klik je laatst uitgevoerde stuk code uit de console kopiëren naar de huidige regel in je script pane.
* ralpje is dus ook fan van ISESteroids, maar dat kan ook komen door het feit dat ik ooit een blogpostjes over ISESteroids heb geschreven en daarvoor een gratis license kreeg. Dat wist ik overigens pas nadat ik het blogpostje had gemaakt, dus het is geen positief-omdat-het-moet-post
pr0mpt - It never hurts to help!
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Klinkt alsof jullie nog een licentie over hebben
[ Voor 55% gewijzigd door Craven op 07-09-2016 10:01 ]
Let op, -UFormat %V is niet het ISO 6801 weeknummer! Zou misschien moeten, maar is het niet...
[ Voor 25% gewijzigd door mdruiter op 08-09-2016 11:02 . Reden: reactie op ]
Ik houd me tegenwoordig bezig met development, software testing, beetje sales, trainingen en eigenlijk alles wat met ons (powershell) based product te maken heeft.
Hiervoor consultancy en managed services gedaan van xenapp en rds omgevingen en alles wat er omheen hangt.
Daarnaast ben ik mij nu meer aan het richten op de publieke clouds en dan met name Azure. De stap van Windows Azure Pack naar Azure is niet zo denderend groot namelijk.
Computer says no
PS gebruiken wij zelf veel voor AD, Exchange en SharePoint.
Omdat ik ook kan coden (voornamelijk C# maar ook veel PS omdat het lekker laagdrempelig is) maak ik vaak "oplossingen" voor problemen : bv een sync opzetten tussen een x aantal documenten uit SharePoint naar een fileshare (PS script welke de REST API van SharePoint aanspreekt en de bytes van het document daarna naar een UNC pad opslaat).
Eigenlijk doen wij als "klein" IT team (3 man, 2 Powershellers) 90% van ons beheer tegenwoordig met Powershell (wij hebben ook nog een stuk of 40 developers rondlopen voor oa de website etc maar die doen weinig met Windows, laat staan Powershell)
Ik script bijna 20 jaar intensief en onderhoud nog steeds een 10 jaar oud vbs script dat ik vaak gebruik, dat script brengt AD gebruik in kaart, na 10 minuten runnen weet ik meer van een klant zijn AD dan alle beheerders bij elkaar. Klanten zijn dol op dit instant-inzicht, de 25 xls bestanden kunnen als werklijst gebruikt worden en zetten op een rij wat er mis is met het gebruik van hun AD.
Naast de langdurige migraties, die bijna fulltime zijn, doe ik assessments van 1 of 2 dagen en gebruik dit script als primaire tool.
Een Powershell script dat ik heb geschreven koppelt een on-premise-AD en Azure AD die 3 jaar lang los van elkaar hebben bestaan en dus nog al verschillen in de loop der jaren. Dat verschil heb ik bij een klant met 2500 medewerkers met Powershell weg gepoetst en uiteindelijk gekoppeld met Azure AD Connect.
Daarnaast onderhoud ik mijn Powershell-vaardigheid en breid deze uit met ogenschijnlijk nutteloze scripts, Zoals een script dat een range bankrekeningnummers genereert (11 check) en deze omzet naar IBAN (incl controle getal).
Versie 2 levert nog steeds alleen generieke gegevens, direct toepasbare inzichten ontbreken. bijv:
Zijn er user-GPO's gekoppeld aan een OU met alleen machines? in welke GPO's is loopback geactiveerd en in welke modes?
Daarnaast vereist het script een bepaalde versie PowerShell en lokaal geinstalleerde Word. Dat zijn voorwaardes die in de weg zitten als het bij een klant gebruikt wordt. "Ik moet eerst .net, PowerShellv3 en Word installeren voordat ik iets kan zien". Dit is de reden waarom ik .vbs koos en het resultaat exporteer naar .csv bestanden. De csv opmaak maakt excel draaitabellen eenvoudig en geeft extra inzicht, succes daarmee in Word
Tegen de tijd dat de PowerShell user klaar is met prerequisites installeren, bespreek ik al de resultaten
Tot slot, als rode draad door het script wordt te pas en te on pas queries afgevuurd op AD (soms zelfs in for-each loops). Er zijn ook dubbele queries, bijv 2 queries die alle computer objecten opvragen, 1 keer met een kenmerk van een DC, andere keer zonder dat kenmerk. Zo zijn er meerdere voorbeelden te vinden. Dat is niet zo fraai.
Het alternatief is alle AD queries in het begin van het script te runnen, deze bevatten alle informatie die wordt gebruikt in het hele script. Dat geeft veel minder load op een Domain Controller en is vele malen sneller.
M.b.t. Word geef ik je gelijk. Mijn eigen scripts gebruiken ook meestal CSV als output. Ik wil niet afhankelijk zijn van al dan niet geïnstalleerde lokale applicaties en al helemaal niet als die applicaties ook nog licenties vereisen.Semt-x schreef op zaterdag 24 september 2016 @ 12:22:
Daarnaast vereist het script een bepaalde versie PowerShell en lokaal geinstalleerde Word. Dat zijn voorwaardes die in de weg zitten als het bij een klant gebruikt wordt. "Ik moet eerst .net, PowerShellv3 en Word installeren voordat ik iets kan zien". Dit is de reden waarom ik .vbs koos en het resultaat exporteer naar .csv bestanden. De csv opmaak maakt excel draaitabellen eenvoudig en geeft extra inzicht, succes daarmee in Word![]()
Tegen de tijd dat de PowerShell user klaar is met prerequisites installeren, bespreek ik al de resultaten
Het argument m.b.t. .NET en PSv3 snap ik niet. Je moet al met heel antieke spullen te maken hebben wil PSv3 er (vandaag de dag) niet opstaan. Het enige argument pro VBS wat ik nog begrijp is legacy: Iets wat je al hebt is altijd beter dan iets wat je nog moet maken.
Nu kan het script ook op een member machine draaien (elke nieuwere versie van windows) dus ik ben niet per se afhankelijk van de OS versie van een DC. Dus vaak zou PowerShell wel een optie zijn, als ik niet het hele script in .vbs had gemaakt.
Maar je hebt gelijk, als ik het script op dit moment van 0 zou opbouwen ligt PowerShell meer voor de hand. 10 jaar ben ik met dit script gestart, toen stond PowerShell nog in de kinderschoenen en bood bij lange na niet de functies die vbs al wel bood. Daarnaast was toen het extra installeren van .NET en PowerShell eerder regel dan uitzondering.
Vanuit een AD perspectief biedt PowerShell nog steeds niet meer functies dan vbs, het heeft een aantal dingen handiger "verpakt", maar diepgaande functies zijn even lastig. Zoals bijvoorbeeld het uitlezen van een loopback instelling in een GPO. Of het in kaart brengen van groepsnesting die niet in een oneindige loop blijft hangen als er sprake is van cirkelnesting.
Naast dat vbs script maak ik controle scripts die de output controleren, die maak ik wel in PowerShell. dus delen van het vbs heb ik ook in PowerShell. Ik vind vbs zeker niet beter dan PowerShell, maar het voldoet (net) en is compatible met meer Windows versies.
Gebruik nu ook een tijdje Visual Studio Code en het bevalt mij erg goed tot nu toe!Craven schreef op maandag 05 september 2016 @ 11:37:
Ik weet niet meer wie het er tijdens de sessie over had (dacht Jeff) maar ik kan Visual Studio Code wel aanbevelen in ieder geval. Het code een stuk lekkerder dan de ISE. Voorheen zat ik altijd te klooien met een combo tussen de ISE (makkelijk troubleshooten) en notepad++ (vind ik persoonlijk toch lekkerder lezen/typen). Maar voor zover ik nu kan zien kan visual studio code beide wel.
Edit: mis 1 dingetje in VS code. Ik kan geen losse commando's uitvoeren in de huidige sessie. In de ISE wilde ik nog wel is troubleshooten en ff wat losse code uitvoeren. Nu moet ik iedere keer een stukje code in het script typen en dan uitvoeren met F8. Omslachtig en irritant. In de terminal (heb ik aangepast naar powershell) zit ik niet in mijn sessie en in het output window kan ik weer geen code typen...
Ik gebruikte voorheen altijd gewoon Visual Studio, voornamelijk omdat ik dat gewend was uit mijn C# tijd.
Maar VS Code is wat lichter, bevat niet de overkill van gewoon Visual Studio, maar heeft toch alle dingen uit Visual Studio die ik handig vind
Maar Losse Commando's kun je wel uitvoeren in je huidige sessie. In het kleine balkje helemaal onderaan je debug window. Echter je moet dan wel een breakpoint plaatsen in je script, dan kun je zodra de breakpoint geraakt wordt binnen de sessie waarin dat script ook draait commando's uitvoeren.
Computer says no
Ik ben er vanaf gestapt. Te lui om me in breakpoints te verdiepen. Misschien binnenkort maar weer is kijken naar ise on steroids. Voorlopig voldoet ISE wel weer even. Zag de meerwaarde van visual studio code niet zo voor mij. Zag er wel leuker uit en voelde wat sneller aan na initial start maar voor de rest ook niet.Meekoh schreef op dinsdag 27 september 2016 @ 11:08:
[...]
Gebruik nu ook een tijdje Visual Studio Code en het bevalt mij erg goed tot nu toe!![]()
Ik gebruikte voorheen altijd gewoon Visual Studio, voornamelijk omdat ik dat gewend was uit mijn C# tijd.
Maar VS Code is wat lichter, bevat niet de overkill van gewoon Visual Studio, maar heeft toch alle dingen uit Visual Studio die ik handig vind![]()
Maar Losse Commando's kun je wel uitvoeren in je huidige sessie. In het kleine balkje helemaal onderaan je debug window. Echter je moet dan wel een breakpoint plaatsen in je script, dan kun je zodra de breakpoint geraakt wordt binnen de sessie waarin dat script ook draait commando's uitvoeren.
Gloednieuwe powershell course voor beginners. Ik zou eerst beginnen met powershell 3.0 kickstart op MVA (Microsoft Virtual Academy)
when in trouble fear or doubt run in circles scream and shout
Ik denk eigenlijk gewoon dat ik lekker bij de ISE blijf. Ding staat overal, en ik script ook overal. Veelal integreer ik met van alles en nog wat en is het wel fijn als ik op allerlei systemen makkelijk kan werken. Zolang ik aan de ISE gewend ben kan ik die ook gewoon overal gebruiken zonder gedoe.Craven schreef op dinsdag 27 september 2016 @ 12:39:
[...]
Ik ben er vanaf gestapt. Te lui om me in breakpoints te verdiepen. Misschien binnenkort maar weer is kijken naar ise on steroids. Voorlopig voldoet ISE wel weer even. Zag de meerwaarde van visual studio code niet zo voor mij. Zag er wel leuker uit en voelde wat sneller aan na initial start maar voor de rest ook niet.
Vandaag weer lekker de halve dag mijn kop in powershell bedolven. Morgen ook weer de hele dag vrij gepland voor een projectje. Dat zijn toch wel de leuke dingen vind ik vaak. Iets opbouwen van scratch. Helemaal als ze het ook van plan zijn om het op grote schaal te gaan gebruiken.
Same here. Wel vind ik ISESteroids enorm fijn omdat dat (eenvoudig met Install-Module) als module toe te voegen is aan de ISE.Craven schreef op dinsdag 04 oktober 2016 @ 22:33:
[...]
Ik denk eigenlijk gewoon dat ik lekker bij de ISE blijf. Ding staat overal, en ik script ook overal. Veelal integreer ik met van alles en nog wat en is het wel fijn als ik op allerlei systemen makkelijk kan werken. Zolang ik aan de ISE gewend ben kan ik die ook gewoon overal gebruiken zonder gedoe.
Vandaag weer lekker de halve dag mijn kop in powershell bedolven. Morgen ook weer de hele dag vrij gepland voor een projectje. Dat zijn toch wel de leuke dingen vind ik vaak. Iets opbouwen van scratch. Helemaal als ze het ook van plan zijn om het op grote schaal te gaan gebruiken.
Maar dan moet je neem ik aan ook nog een license invoeren? Ik rol in 1 week meerdere testomgevingen uit. Dan blijf ik aan de gang met ise on steroids.punisher007 schreef op maandag 10 oktober 2016 @ 16:39:
[...]
Same here. Wel vind ik ISESteroids enorm fijn omdat dat (eenvoudig met Install-Module) als module toe te voegen is aan de ISE.
Sysadmin. Ik bouw voor verschillende klanten ook oplossingen in Powershell met een front end (bv. voor AD management, e-mail signatures, ...)Craven schreef op maandag 19 september 2016 @ 22:48:
Gewoom benieuwd maar wat doen de meeste van jullie hiero? Professional powershellert is nog niet een baan die ik ben tegen gekomen.
Mijn IDE is Powershell Studio trouwens, die voor PoSh toch wel een stuk intuitiever is als VS.
Klopt, maar je hebt een trial period. Persoonlijk gebruik ik steroids ook alleen bij de wat grotere projecten en voor de rest gewoon de standaard ISE.Craven schreef op maandag 10 oktober 2016 @ 21:12:
[...]
Maar dan moet je neem ik aan ook nog een license invoeren? Ik rol in 1 week meerdere testomgevingen uit. Dan blijf ik aan de gang met ise on steroids.
[ Voor 3% gewijzigd door punisher007 op 13-10-2016 10:39 ]
Applicatie-beheerder. Gebruik Powershell eigenlijk alleen zoals we vroeger VBS gebruikten, om kleine scriptjes te maken voor terugkerende activiteiten, bijv. verwijderen van folders/bestanden, controle op bestaan van bepaalde bestanden, ruimte op disks/shares, maken van backups, stop/start services enz.Craven schreef op maandag 19 september 2016 @ 22:48:
Gewoom benieuwd maar wat doen de meeste van jullie hiero?
En dan evt. via BigBrother signaleren.
Incidenteel voor ombouwen van div. formaten, iets als Excel naar XML. Zitten heel handige routines in PS.
[ Voor 3% gewijzigd door Goner op 13-10-2016 11:46 ]
Powershell studio is ook vet ja maar een beetje duur. Misschien dat ik maar is ga kijken of dat kan krijgen hiero.YellowOnline schreef op maandag 10 oktober 2016 @ 22:57:
[...]
Sysadmin. Ik bouw voor verschillende klanten ook oplossingen in Powershell met een front end (bv. voor AD management, e-mail signatures, ...)
Mijn IDE is Powershell Studio trouwens, die voor PoSh toch wel een stuk intuitiever is als VS.
Mjah dan is het misschien wel weer een idee. Toch maar weer is onder de loep nemen dan.punisher007 schreef op donderdag 13 oktober 2016 @ 10:38:
[...]
Klopt, maar je hebt een trial period. Persoonlijk gebruik ik steroids ook alleen bij de wat grotere projecten en voor de rest gewoon de standaard ISE.
Zal ik ook maar is een duit in het zakje doen dan. 1 van onze producten (werk bij een software vendor) is aan de client kant (de runtime) bijna volledig Powershell. Heeft ook zijn eigen module van 20.000+ regels aan code.Goner schreef op donderdag 13 oktober 2016 @ 11:45:
[...]
Applicatie-beheerder. Gebruik Powershell eigenlijk alleen zoals we vroeger VBS gebruikten, om kleine scriptjes te maken voor terugkerende activiteiten, bijv. verwijderen van folders/bestanden, controle op bestaan van bepaalde bestanden, ruimte op disks/shares, maken van backups, stop/start services enz.
En dan evt. via BigBrother signaleren.
Incidenteel voor ombouwen van div. formaten, iets als Excel naar XML. Zitten heel handige routines in PS.
Ook is ons hele development proces geautomatiseerd van begin tot eind met powershell + pester. Ons testframework draait hier ook op.
Momenteel ben ik bezig met het schrijven van een prototype voor een nieuwe product. Is wel een combinatie van PowerShell met wat C++ (doe ik zelf niet).
In any case ben ik tegenwoordig vrij veel met powershell bezig dus
DBA hier. Wij gebruiken het om bv onze collega's ons werk re laten doen.Craven schreef op maandag 19 september 2016 @ 22:48:
Gewoom benieuwd maar wat doen de meeste van jullie hiero? Professional powershellert is nog niet een baan die ik ben tegen gekomen.
Powershell.org is inderdaad een goeie. Was tijdelijk offline wegens problemen maar las op twitter dat de site inmiddels weer online is.punisher007 schreef op vrijdag 14 oktober 2016 @ 11:51:
In het verleden powershell.org , maar schijnbaar is dat nu (tijdelijk???) down.
Ik ben daar nu een beetje mee aan het spelen. Wel een mooie manier om 'voordat je daadwerkelijke scripts' te schrijven, eerst pester tests te schrijven. Geeft ook een mooi handvat en documentatie systeem om te beschrijven wat je precies verwacht van je script.
Icm source control wordt het wel allemaal erg developer achtig.
https://www.reddit.com/r/PowerShell/Craven schreef op vrijdag 14 oktober 2016 @ 08:37:
Zijn er overigens nog powershell specific fora? Het is hier nogal dood. Had idera al gevonden maar zijn er nog anderen?
Ik gebruik het dagelijks. Niet om code te checken maar we gebruiken om onze software te controleren op fouten. PowerShell met pester is het framework waarin we alle QA tests schrijven. Heel leuk spul, doen we ook met source control idd.mufana schreef op zaterdag 15 oktober 2016 @ 00:21:
Iemand trouwens al eens iets gedaan met pester?
Ik ben daar nu een beetje mee aan het spelen. Wel een mooie manier om 'voordat je daadwerkelijke scripts' te schrijven, eerst pester tests te schrijven. Geeft ook een mooi handvat en documentatie systeem om te beschrijven wat je precies verwacht van je script.
Icm source control wordt het wel allemaal erg developer achtig.
Reddit ken ik al maar is meer een helpmij achtig forum. Stackoverflow hetzelfde.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| $users = @(Get-ADUser -Filter * -Properties userPrincipalName, givenName, middleName, sn, title, department, wWWHomePage, telephoneNumber, mobile, facsimileTelephoneNumber, company, streetAddress, postalCode, city, country | Select-Object userPrincipalName, givenName, middleName, sn, title, department, wWWHomePage, telephoneNumber, mobile, facsimileTelephoneNumber, company, streetAddress, postalCode, city, country) $mailboxes = @(Get-Mailbox -Identity * | Select-Object userPrincipalName, ProhibitSendQuota, ServerName, Database) $overview = @() foreach ($user in $users) { foreach ($mailbox in $mailboxes) { if ($user.userPrincipalName -eq $mailbox.userPrincipleName) { $object = New-Object -TypeName PSObject $object | Add-Member -MemberType NoteProperty -Name userPrincipalName -Value $user.userPrincipalName $object | Add-Member -MemberType NoteProperty -Name givenName -Value $user.givenName $object | Add-Member -MemberType NoteProperty -Name middleName -Value $user.middleName $object | Add-Member -MemberType NoteProperty -Name sn -Value $user.sn $object | Add-Member -MemberType NoteProperty -Name title -Value $user.title $object | Add-Member -MemberType NoteProperty -Name department -Value $user.department $object | Add-Member -MemberType NoteProperty -Name wWWHomePage -Value $user.wWWHomePage $object | Add-Member -MemberType NoteProperty -Name telephoneNumber -Value $user.telephoneNumber $object | Add-Member -MemberType NoteProperty -Name mobile -Value $user.mobile $object | Add-Member -MemberType NoteProperty -Name facsimileTelephoneNumber -Value $user.facsimileTelephoneNumber $object | Add-Member -MemberType NoteProperty -Name company -Value $user.company $object | Add-Member -MemberType NoteProperty -Name streetAddress -Value $user.streetAddress $object | Add-Member -MemberType NoteProperty -Name postalCode -Value $user.postalCode $object | Add-Member -MemberType NoteProperty -Name city -Value $user.city $object | Add-Member -MemberType NoteProperty -Name country -Value $user.country $object | Add-Member -MemberType NoteProperty -Name ProhibitSendQuota -Value $mailbox.ProhibitSendQuota $object | Add-Member -MemberType NoteProperty -Name ServerName -Value $mailbox.ServerName $object | Add-Member -MemberType NoteProperty -Name Database -Value $mailbox.Database $statistics = @(Get-MailboxStatistics $mailbox.userPrincipalName -ErrorAction SilentlyContinue | Select-Object ItemCount, TotalItemSize, LastLogonTime) $object | Add-Member -MemberType NoteProperty -Name ItemCount -Value $statistics.ItemCount $object | Add-Member -MemberType NoteProperty -Name TotalItemSize -Value $statistics.TotalItemSize $object | Add-Member -MemberType NoteProperty -Name LastLogonTime -Value $statistics.LastLogonTime $overview += $object } } } $overview | Export-Csv C:\Temp\Overview.csv -Encoding UTF8 -NoTypeInformation -Delimiter ';' |
In mijn eindresultaat ontbreken de AD resultaten - behalve bij een aantal waar dan heel andere informatie (comment-veld vermoed ik) instaat. WTF? 't Is alsof ze ergens in de pipeline overschreven worden met andere data, maar ik zie geen dubbele noteproperties.
[ Voor 8% gewijzigd door YellowOnline op 18-10-2016 15:21 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
| $ShareDetails = [pscustomobject]@{ Periode = $CurrentPeriod AANTAL = $Aantal Service = $CustomerDetailsObject.($CustomerPrefix).ServiceST Klant = $CustomerDetailsObject.($CustomerPrefix).Klant KlantSub = $CustomerDetailsObject.($CustomerPrefix).KlantSub Detail1 = $ServerName Detail2 = $CustomerDetailsObject.($CustomerPrefix).Detail2 Detail3 = $Path Detail4 = $Allocated Detail5 = $Allocated2Y } $FinalResult += $ShareDetails |
Dit zit allemaal in een loop en $FinalResult is een simpele array.
De oplossing zit hem in het gebruiken van de pscustomobject ipv psobject.
PSObject is namelijk gewoon een hashtable.
[ Voor 7% gewijzigd door Meekoh op 18-10-2016 15:33 ]
Computer says no
Als je zoveel properties van je ADUser wilt hebben kun je net zo goed een * gebruiken
Mogelijk moet je nog een -SearchBase (de OU waarin deze users staan) en een -Server (mag zowel de domainname als een Domain Controller zijn) gebruiken om te zorgen dat die Get-ADuser search goed gaat.
Als mijn code een lege CSV oplevert gaat het daar waarschijnlijk mis.
Je hoeft daarnaast volgens mij niet nog eens door je Mailboxen te loopen, als je uit je mailboxen array op zoek gaat naar de userprincipalname van de gebruiker zou hij maar 1 resultaat mogen geven.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| $users = @(Get-ADUser -Filter * -Properties *) $mailboxes = @(Get-Mailbox -Identity * | Select-Object userPrincipalName, ProhibitSendQuota, ServerName, Database) $overview = @() foreach ($user in $users) { $mailbox= $mailboxes | Where { $_.UserPrincipalName -eq $user.UserPrincipalName } if($mailbox){ $statistics = @(Get-MailboxStatistics $mailbox.userPrincipalName -ErrorAction SilentlyContinue | Select-Object ItemCount, TotalItemSize, LastLogonTime) $overview += [PsCustomObject]@{ userPrincipalName = $user.userPrincipalName givenName = $user.givenName middleName = $user.middleName sn = $user.sn title = $user.title department = $user.department wWWHomePage = $user.wWWHomePage telephoneNumber = $user.telephoneNumber mobile = $user.mobile facsimileTelephoneNumber = $user.facsimileTelephoneNumber company = $user.company streetAddress = $user.streetAddress postalCode = $user.postalCode city = $user.city country = $user.country ProhibitSendQuota = $mailbox.ProhibitSendQuota ServerName = $mailbox.ServerName Database = $mailbox.Database ItemCount = $statistics.ItemCount TotalItemSize = $statistics.TotalItemSize LastLogonTime = $statistics.LastLogonTime } } } $overview | Export-Csv C:\Temp\Overview.csv -Encoding UTF8 -NoTypeInformation -Delimiter ';' |
Typo: if ($user.userPrincipalName -eq $mailbox.userPrincipleName) {YellowOnline schreef op dinsdag 18 oktober 2016 @ 15:14:
Ik heb een dom probleem en ik weet zeker dat dat het aan mijn vermoeidheid ligt en niet aan PoSh
PowerShell:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 $users = @(Get-ADUser -Filter * -Properties userPrincipalName, givenName, middleName, sn, title, department, wWWHomePage, telephoneNumber, mobile, facsimileTelephoneNumber, company, streetAddress, postalCode, city, country | Select-Object userPrincipalName, givenName, middleName, sn, title, department, wWWHomePage, telephoneNumber, mobile, facsimileTelephoneNumber, company, streetAddress, postalCode, city, country) $mailboxes = @(Get-Mailbox -Identity * | Select-Object userPrincipalName, ProhibitSendQuota, ServerName, Database) $overview = @() foreach ($user in $users) { foreach ($mailbox in $mailboxes) { if ($user.userPrincipalName -eq $mailbox.userPrincipleName) { $object = New-Object -TypeName PSObject $object | Add-Member -MemberType NoteProperty -Name userPrincipalName -Value $user.userPrincipalName $object | Add-Member -MemberType NoteProperty -Name givenName -Value $user.givenName $object | Add-Member -MemberType NoteProperty -Name middleName -Value $user.middleName $object | Add-Member -MemberType NoteProperty -Name sn -Value $user.sn $object | Add-Member -MemberType NoteProperty -Name title -Value $user.title $object | Add-Member -MemberType NoteProperty -Name department -Value $user.department $object | Add-Member -MemberType NoteProperty -Name wWWHomePage -Value $user.wWWHomePage $object | Add-Member -MemberType NoteProperty -Name telephoneNumber -Value $user.telephoneNumber $object | Add-Member -MemberType NoteProperty -Name mobile -Value $user.mobile $object | Add-Member -MemberType NoteProperty -Name facsimileTelephoneNumber -Value $user.facsimileTelephoneNumber $object | Add-Member -MemberType NoteProperty -Name company -Value $user.company $object | Add-Member -MemberType NoteProperty -Name streetAddress -Value $user.streetAddress $object | Add-Member -MemberType NoteProperty -Name postalCode -Value $user.postalCode $object | Add-Member -MemberType NoteProperty -Name city -Value $user.city $object | Add-Member -MemberType NoteProperty -Name country -Value $user.country $object | Add-Member -MemberType NoteProperty -Name ProhibitSendQuota -Value $mailbox.ProhibitSendQuota $object | Add-Member -MemberType NoteProperty -Name ServerName -Value $mailbox.ServerName $object | Add-Member -MemberType NoteProperty -Name Database -Value $mailbox.Database $statistics = @(Get-MailboxStatistics $mailbox.userPrincipalName -ErrorAction SilentlyContinue | Select-Object ItemCount, TotalItemSize, LastLogonTime) $object | Add-Member -MemberType NoteProperty -Name ItemCount -Value $statistics.ItemCount $object | Add-Member -MemberType NoteProperty -Name TotalItemSize -Value $statistics.TotalItemSize $object | Add-Member -MemberType NoteProperty -Name LastLogonTime -Value $statistics.LastLogonTime $overview += $object } } } $overview | Export-Csv C:\Temp\Overview.csv -Encoding UTF8 -NoTypeInformation -Delimiter ';'
In mijn eindresultaat ontbreken de AD resultaten - behalve bij een aantal waar dan heel andere informatie (comment-veld vermoed ik) instaat. WTF? 't Is alsof ze ergens in de pipeline overschreven worden met andere data, maar ik zie geen dubbele noteproperties.
Lijkt me dat het nu helemaal geen resultaten oplevert? Als ik de typo fix werkt het bij mij.
A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.
Kleine rechtzetting. Beide zijn geen Hashtable.Meekoh schreef op dinsdag 18 oktober 2016 @ 15:30:
Zo'n probleem had ik laatst ook. maar dan met fileshares, zie hier hoe ik het opgelost heb.
PowerShell:
1 2 3 4 5 6 7 8 9 10 11 12 13 $ShareDetails = [pscustomobject]@{ Periode = $CurrentPeriod AANTAL = $Aantal Service = $CustomerDetailsObject.($CustomerPrefix).ServiceST Klant = $CustomerDetailsObject.($CustomerPrefix).Klant KlantSub = $CustomerDetailsObject.($CustomerPrefix).KlantSub Detail1 = $ServerName Detail2 = $CustomerDetailsObject.($CustomerPrefix).Detail2 Detail3 = $Path Detail4 = $Allocated Detail5 = $Allocated2Y } $FinalResult += $ShareDetails
Dit zit allemaal in een loop en $FinalResult is een simpele array.
De oplossing zit hem in het gebruiken van de pscustomobject ipv psobject.
PSObject is namelijk gewoon een hashtable.
Het zijn custom objecten waar je in bovenstaande gevallen een hashtable in wrapt.
PSCustombject is gewoon sneller gezien het geïntroduceerd is sinds V3
http://www.jonathanmedd.n...ustomobject-its-fast.html
https://powershell.org/fo...ustomobject-and-psobject/
https://devopscollective....ct_vs_pscustomobject.html
Battle.net: NagaByrd#2844
Dan is dat veranderd, vroeger als je get-member deed op een psobject zei PS dat het een hashtable was.nagasy schreef op dinsdag 18 oktober 2016 @ 15:59:
[...]
Kleine rechtzetting. Beide zijn geen Hashtable.
Het zijn custom objecten waar je in bovenstaande gevallen een hashtable in wrapt.
PSCustombject is gewoon sneller gezien het geïntroduceerd is sinds V3
http://www.jonathanmedd.n...ustomobject-its-fast.html
https://powershell.org/fo...ustomobject-and-psobject/
https://devopscollective....ct_vs_pscustomobject.html
Als ik het nu uitvoer in V5, dan is het een pscustomobject.
Anyway, je layout is wel fucked up als je psobject gebruikt in plaats van pscustomobject wanneer je de boel piped naar export-csv.
[ Voor 7% gewijzigd door Meekoh op 18-10-2016 16:07 ]
Computer says no
Je hebt gelijk: die loop is zinloos en een gewone Select-Object is efficiënter. En nu werkt het wél naar behoren. Ik snap alleen niet goed waarom.Oaquasis schreef op dinsdag 18 oktober 2016 @ 15:30:
Effe snel gekeken, werkt dit wel?
Als je zoveel properties van je ADUser wilt hebben kun je net zo goed een * gebruiken
Mogelijk moet je nog een -SearchBase (de OU waarin deze users staan) en een -Server (mag zowel de domainname als een Domain Controller zijn) gebruiken om te zorgen dat die Get-ADuser search goed gaat.
Als mijn code een lege CSV oplevert gaat het daar waarschijnlijk mis.
Je hoeft daarnaast volgens mij niet nog eens door je Mailboxen te loopen, als je uit je mailboxen array op zoek gaat naar de userprincipalname van de gebruiker zou hij maar 1 resultaat mogen geven.
PowerShell:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 $users = @(Get-ADUser -Filter * -Properties *) $mailboxes = @(Get-Mailbox -Identity * | Select-Object userPrincipalName, ProhibitSendQuota, ServerName, Database) $overview = @() foreach ($user in $users) { $mailbox= $mailboxes | Where { $_.UserPrincipalName -eq $user.UserPrincipalName } if($mailbox){ $statistics = @(Get-MailboxStatistics $mailbox.userPrincipalName -ErrorAction SilentlyContinue | Select-Object ItemCount, TotalItemSize, LastLogonTime) $overview += [PsCustomObject]@{ userPrincipalName = $user.userPrincipalName givenName = $user.givenName middleName = $user.middleName sn = $user.sn title = $user.title department = $user.department wWWHomePage = $user.wWWHomePage telephoneNumber = $user.telephoneNumber mobile = $user.mobile facsimileTelephoneNumber = $user.facsimileTelephoneNumber company = $user.company streetAddress = $user.streetAddress postalCode = $user.postalCode city = $user.city country = $user.country ProhibitSendQuota = $mailbox.ProhibitSendQuota ServerName = $mailbox.ServerName Database = $mailbox.Database ItemCount = $statistics.ItemCount TotalItemSize = $statistics.TotalItemSize LastLogonTime = $statistics.LastLogonTime } } } $overview | Export-Csv C:\Temp\Overview.csv -Encoding UTF8 -NoTypeInformation -Delimiter ';'
Ah:
OK, thanks Oaquasis voor de optimalizatie en SteeringWheel voor de scherpe ogenSteeringWheel schreef op dinsdag 18 oktober 2016 @ 15:46:
[...]
Typo: if ($user.userPrincipalName -eq $mailbox.userPrincipleName) {
Lijkt me dat het nu helemaal geen resultaten oplevert? Als ik de typo fix werkt het bij mij.
[ Voor 7% gewijzigd door YellowOnline op 18-10-2016 17:01 ]
Gezien het sinds V3 toegevoegd is.
Handigste is dat hij de waardes in je hashtable wel in de volgorde plaatst zoals gedefinieerd in je customobject itt new-object
Battle.net: NagaByrd#2844
Het is jammer dat ik er hier niet verder over uit mag wijden want dit zijn nou echt de dingetjes waar ik helemaal blij van word
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Maar goed ik zou hem sowieso alsnog op de DuPSUG kunnen showen. Maar of dat echt interessant is. Als puntje bij paaltje komt zijn het ~1200 regels code en nog een tooltje in C# waar ik niet onderuit kwam vanwege beperkingen in powershell. Ik vind het altijd moeilijk inschatten of dat DuPSUG waardig is.