Waar ik eerst echt weinig van powershell wou weten, grijp ik nu elke gelegenheid aan om een script in elkaar te knutselen. Echt leuk werk. Zo nu en dan is het even zoeken naar de juiste manier, maar word er steeds handiger in. En hergebruik veel code uit oude scripts. Waarom 2x het wiel uitvinden?
Het is eindelijk zover, op 10 Januari heeft Microsoft Powershell core 6.0 vrijgegeven, zie ook dit artikel op de FP bericht.
Integenstelling tot Windows Powershell draait powershell core 6.0 op .net Core en mist daardoor sommige functionaliteit die Windows Powershell wel heeft.
Windows powershell wordt door microsoft beschouwd als Af en zal alleen nog bugfixes en security fixes krijgen waar Powershell core wordt gezien als de toekomst. Het is cross platform en volledig open source.
Ik ben zelf nu bezig om een sessie voor collega's in elkaar te zetten waarbij ik de verschillen belicht. Zijn er meer mensen hier die al met Powershell core 6 aan de slag zijn gegaan en wat zijn jullie ervaringen?
Wat mij het eerste opviel is dat de Active directory module niet werkt.
Integenstelling tot Windows Powershell draait powershell core 6.0 op .net Core en mist daardoor sommige functionaliteit die Windows Powershell wel heeft.
Windows powershell wordt door microsoft beschouwd als Af en zal alleen nog bugfixes en security fixes krijgen waar Powershell core wordt gezien als de toekomst. Het is cross platform en volledig open source.
Ik ben zelf nu bezig om een sessie voor collega's in elkaar te zetten waarbij ik de verschillen belicht. Zijn er meer mensen hier die al met Powershell core 6 aan de slag zijn gegaan en wat zijn jullie ervaringen?
Wat mij het eerste opviel is dat de Active directory module niet werkt.
Een hele rij microsoft certificeringen.
Zie https://github.com/powershell/powershell/issues/4062 voor niet werkende modules.@r!k schreef op vrijdag 12 januari 2018 @ 14:15:
Het is eindelijk zover, op 10 Januari heeft Microsoft Powershell core 6.0 vrijgegeven, zie ook dit artikel op de FP bericht.
Integenstelling tot Windows Powershell draait powershell core 6.0 op .net Core en mist daardoor sommige functionaliteit die Windows Powershell wel heeft.
Windows powershell wordt door microsoft beschouwd als Af en zal alleen nog bugfixes en security fixes krijgen waar Powershell core wordt gezien als de toekomst. Het is cross platform en volledig open source.
Ik ben zelf nu bezig om een sessie voor collega's in elkaar te zetten waarbij ik de verschillen belicht. Zijn er meer mensen hier die al met Powershell core 6 aan de slag zijn gegaan en wat zijn jullie ervaringen?
Wat mij het eerste opviel is dat de Active directory module niet werkt.
De niet werkende AD module was mij ook al opgevallen.
Ik dacht eerst dat dit kwam door het ontbreken van System.DirectoryServices, echter zijn deze afgelopen november toegevoegd aan .NET core (maar als ik de betreffende assemblies toevoeg dan krijg ik weer een error op System.Configuration.ConfigurationManager).
Voorlopig nog geen echt alternatief voor mij om in productie te gebruiken aangezien een groot deel van mijn scripts in productie juist gebruik maken van AD.
Ook loop ik tegen het feit aan dat TAB autocomplete niet lekker werkt voor assemblies die ik toevoeg dmv Add-Type (of met Reflection). Ik moet echt de volledige class uittypen. Autocomplete for bv (static) methods werken dan weer wel.
[ Voor 7% gewijzigd door Killah_Priest op 12-01-2018 14:28 ]
En is werken via remoting geen optie?
Weet iemand module om zip/rar/7zip/whatever bestanden te maken die ook met wachtwoorden en waar de archief files gesplitst kan worden? Ik gebruik op dit moment 7zip4powershell, en deze zou met VolumeSize gesplitste files aan kunnen maken, maar of ik zie de optie voor iets anders aan, of er zit een bugje in...
In mijn geval helaas niet (normaal gesproken heb ik niet eens de AD cmdlets lokaal staan maar doe ik import-pssession voor de AD cmdlets) aangezien ik niet kan remoten naar de DCs.punisher007 schreef op vrijdag 12 januari 2018 @ 17:54:
En is werken via remoting geen optie?
[ Voor 9% gewijzigd door Killah_Priest op 01-02-2018 18:02 ]
Stel dat ik een Powershell script wil genereren op basis van input in een Word document (met knoppen/invulveld in een tabel). Wáár zou ik dan moeten beginnen met zoeken? Macro's in Word?
Je ziet op internet wel wat linkjes over het genereren van een Word document vanuit een Powershell script, maar ik wil het dus andersom hebben...
Bijv. iemand van HR die een Word document invult met de juiste gegevens/groepen etc, dit naar Systeembeheer mailt, die er via een knop in het formulier een Powershell script van genereert en dit op de domaincontroller uitvoert.
Lijkt me een leuk hobbyprojectje....
Je ziet op internet wel wat linkjes over het genereren van een Word document vanuit een Powershell script, maar ik wil het dus andersom hebben...
Bijv. iemand van HR die een Word document invult met de juiste gegevens/groepen etc, dit naar Systeembeheer mailt, die er via een knop in het formulier een Powershell script van genereert en dit op de domaincontroller uitvoert.
Lijkt me een leuk hobbyprojectje....
There are 10 kinds of people on the planet. Those who understand binary, and those who don't. | http://twitch.tv/jaapGoose || AMD Ryzen 5 3600, Asus RX 6650 XT OC-Edition, 16GB, MSI B450 Gaming X
Laat het HRM systeem een export maken naar csv met bepaalde velden die je vervolgens importeert met 1 Powershell-script in je AD. Scheelt HR weer een document invullen.DigitalExcorcist schreef op dinsdag 13 februari 2018 @ 14:16:
Stel dat ik een Powershell script wil genereren op basis van input in een Word document (met knoppen/invulveld in een tabel). Wáár zou ik dan moeten beginnen met zoeken? Macro's in Word?
Je ziet op internet wel wat linkjes over het genereren van een Word document vanuit een Powershell script, maar ik wil het dus andersom hebben...
Bijv. iemand van HR die een Word document invult met de juiste gegevens/groepen etc, dit naar Systeembeheer mailt, die er via een knop in het formulier een Powershell script van genereert en dit op de domaincontroller uitvoert.
Lijkt me een leuk hobbyprojectje....
Groepen zul je dan wel op basis van functie moeten toekennen (grootste uitdaging van organisaties over t algemeen).
Wat je sowieso niet wil is telkens een powershell-script genereren. Je maakt 1 script en je vult de variabelen vanuit de HRM export.
Volgens mij kan dit zelfs wel vanuit een Word doc, maar daar heb ik me nog nooit aan gewaagd.
[ Voor 10% gewijzigd door Oogje op 13-02-2018 14:28 ]
Any errors in spelling, tact, or fact are transmission errors.
Het HRM-systeem bestaat momenteel vooral uit iemand die een mail stuurt naar systeembeheer met 'oh, maandag begint Pietje bij ons, kun je nog ff een accountje maken? k thx bai' ... dan zou een HRM-systeem op zich al een hele vooruitgang zijnOogje schreef op dinsdag 13 februari 2018 @ 14:26:
[...]
Laat het HRM systeem een export maken naar csv met bepaalde velden die je vervolgens importeert met 1 Powershell-script in je AD. Scheelt HR weer een document invullen.
Groepen zul je dan wel op basis van functie moeten toekennen (grootste uitdaging van organisaties over t algemeen).
Wat je sowieso niet wil is telkens een powershell-script genereren. Je maakt 1 script en je vult de variabelen vanuit de HRM export.
Volgens mij kan dit zelfs wel vanuit een Word doc, maar daar heb ik me nog nooit aan gewaagd.
Nee allicht is die persoon ook wel binnen andere systemen bekend, maar wellicht denk ik er te makkelijk over. Even een Word documentje met een macrootje eraan die zelf de variabelen invult op basis van wat er in het documentje staat, handjevol radiobuttons en klaar is Klara..
There are 10 kinds of people on the planet. Those who understand binary, and those who don't. | http://twitch.tv/jaapGoose || AMD Ryzen 5 3600, Asus RX 6650 XT OC-Edition, 16GB, MSI B450 Gaming X
Waarom zou je dit vanuit Word genereren ipv vanuit Excel? Het is een koud kunstje om met PS van je Excel sheet een CSV te genereren OF om de velden uit te lezen (ik zou gaan voor omzetten naar CSV aangezien de COM object van Excel nogal wat performance issues heeft, Word is niet veel beter).DigitalExcorcist schreef op dinsdag 13 februari 2018 @ 14:42:
[...]
Het HRM-systeem bestaat momenteel vooral uit iemand die een mail stuurt naar systeembeheer met 'oh, maandag begint Pietje bij ons, kun je nog ff een accountje maken? k thx bai' ... dan zou een HRM-systeem op zich al een hele vooruitgang zijn
Nee allicht is die persoon ook wel binnen andere systemen bekend, maar wellicht denk ik er te makkelijk over. Even een Word documentje met een macrootje eraan die zelf de variabelen invult op basis van wat er in het documentje staat, handjevol radiobuttons en klaar is Klara..
Als jullie Office365 hebben zou ik dit gewoon via een SharePoint formulier icm Flow doen oid.
Was het maar zo'n feest..Killah_Priest schreef op dinsdag 13 februari 2018 @ 15:07:
[...]
Als jullie Office365 hebben zou ik dit gewoon via een SharePoint formulier icm Flow doen oid.
Maar, waarom Word ipv Excel? Ik denk vanwege de document-achtige opzet die ik in gedachten had. Gewoon een soortement invulformulier. Excel kan natuurlijk ook wel.
There are 10 kinds of people on the planet. Those who understand binary, and those who don't. | http://twitch.tv/jaapGoose || AMD Ryzen 5 3600, Asus RX 6650 XT OC-Edition, 16GB, MSI B450 Gaming X
Misschien off-topic, maar HRM heeft geen pakket waarin ze de personeelsadministratie bijhouden? Daar de export mogelijkheden van bekijken. Je wil zoveel mogelijk automatiserenDigitalExcorcist schreef op dinsdag 13 februari 2018 @ 14:42:
[...]
Het HRM-systeem bestaat momenteel vooral uit iemand die een mail stuurt naar systeembeheer met 'oh, maandag begint Pietje bij ons, kun je nog ff een accountje maken? k thx bai' ... dan zou een HRM-systeem op zich al een hele vooruitgang zijn
Nee allicht is die persoon ook wel binnen andere systemen bekend, maar wellicht denk ik er te makkelijk over. Even een Word documentje met een macrootje eraan die zelf de variabelen invult op basis van wat er in het documentje staat, handjevol radiobuttons en klaar is Klara..
[ Voor 5% gewijzigd door Oogje op 13-02-2018 15:27 ]
Any errors in spelling, tact, or fact are transmission errors.
Alleen online. Nu moet ik zeggen dat het één van m'n klanten is, maar een beetje universeel opgezet documentje zou ik bij meerdere klanten kunnen gebruiken in al dan niet wat aangepaste vorm.Oogje schreef op dinsdag 13 februari 2018 @ 15:26:
[...]
Misschien off-topic, maar HRM heeft geen pakket waarin ze de personeelsadministratie bijhouden? Daar de export mogelijkheden van bekijken. Je wil zoveel mogelijk automatiseren
There are 10 kinds of people on the planet. Those who understand binary, and those who don't. | http://twitch.tv/jaapGoose || AMD Ryzen 5 3600, Asus RX 6650 XT OC-Edition, 16GB, MSI B450 Gaming X
Lijkt me sterk dat er dan geen exportje gemaakt kan worden. Dat moet online ook kunnen... CSV bestand alten bakken door het online systeem, iedere donderdag, dan heb je de vrijdag om de output te controleren en voor het weekeinde met een sciprt een aantal nieuwe accounts uit te poepen..
Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)
Dit kun je toch simpel met een webinterface doen? Simpele .NET forms appje maken (of laten maken) is niet zo complex. Je kunt zelfs de complete logica in .NET doen i.p.v. in een PowerShell script.
En wat als het proces wijzigt? Wat als men bv overgaat naar Office 365 en het aanmaken van een user gaat ineens anders? Dan werkt de applicatie ook niet meer.downtime schreef op dinsdag 13 februari 2018 @ 20:36:
Dit kun je toch simpel met een webinterface doen? Simpele .NET forms appje maken (of laten maken) is niet zo complex. Je kunt zelfs de complete logica in .NET doen i.p.v. in een PowerShell script.
Overigens draait Powershell op het .NET platform. Sterker nog, ik gebruik soms zelfs CIL in mijn Powershell scripts (lang leve de Reflection namespace in .Net) als ik bepaalde specifieke doelen wil bereiken welke op geen andere manier mogelijk zijn.
Powershell is juist geschikt voor dit soort zaken omdat code zo makkelijk aan te passen is zonder code te hoeven compilen.
Verder voor de TS : probeer simpel te denken. Proberen om een script te genereren vanuit een Office document is lastig (ja, vbs gebruiken en daar Powershell mee aanroepen).
Maak gewoon een script om een Word of Excel document te parsen. De basic flow is dan als volgt :
- je krijgt een Word of Excel document (gestandariseerd uiteraard)
- Powershell script parsed het document (legio voorbeelden te vinden online) : script leest dus de velden uit en voert op basis van de ingevulde velden bepaalde acties uit.
Maak het jezelf niet te moeilijk door te complex te denken voor simpele oplossingen.
Ik heb pas een script gebouwd waarvan ik dacht: "dit kan nog wel een GUI gebruiken."
Via PoshGUI.com ben ik ooit met Windows Forms in PowerShell in aanraking gekomen, maar ik had het tot nu toe alleen nog gebruikt om gegevens wat chiquer weer te geven.
Ik heb nu een scriptje dat als enige doel heeft om te spelen met de verschillende controls, aangezien ik nog nooit eerder een (Windows-)GUI heb geprogrammeerd.
Het script opent een form met een panel. Door panels al dan niet visible te maken, zijn de verschillende onderdelen van het "programma" zichtbaar.
Nu heb ik een cancel knop $ButtonCancel die ik mooi dacht te kunnen hergebruiken op meerdere panels. Nu ik echter meerder panels heb, komt de knop op nog maar één panel daadwerkelijk tevoorschijn.
Ik heb dit nu "opgelost" door $ButtonCancel1 aan te maken, maar dat is natuurlijk geen nette oplossing.
Vraag: Hoe kan ik een button hergebruiken op meerdere panels?
Via PoshGUI.com ben ik ooit met Windows Forms in PowerShell in aanraking gekomen, maar ik had het tot nu toe alleen nog gebruikt om gegevens wat chiquer weer te geven.
Ik heb nu een scriptje dat als enige doel heeft om te spelen met de verschillende controls, aangezien ik nog nooit eerder een (Windows-)GUI heb geprogrammeerd.
Het script opent een form met een panel. Door panels al dan niet visible te maken, zijn de verschillende onderdelen van het "programma" zichtbaar.
Nu heb ik een cancel knop $ButtonCancel die ik mooi dacht te kunnen hergebruiken op meerdere panels. Nu ik echter meerder panels heb, komt de knop op nog maar één panel daadwerkelijk tevoorschijn.
Ik heb dit nu "opgelost" door $ButtonCancel1 aan te maken, maar dat is natuurlijk geen nette oplossing.
Vraag: Hoe kan ik een button hergebruiken op meerdere panels?
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
| <# This form was created using POSHGUI.com a free online gui designer for PowerShell .NAME Untitled #> Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Application]::EnableVisualStyles() #region begin GUI{ $Form = New-Object system.Windows.Forms.Form $Form.ClientSize = '400,400' $Form.text = "Practice" $Form.BackColor = "#50e3c2" $Form.TopMost = $false $Form.icon = "C:\Windows\WinSxS\amd64_microsoft-windows-dxp-deviceexperience_31bf3856ad364e35_10.0.16299.15_none_6a1157b66aebb1cb\settings.ico" $PanelMenu = New-Object system.Windows.Forms.Panel $PanelMenu.height = 300 $PanelMenu.width = 300 $PanelMenu.location = New-Object System.Drawing.Point(10,1) $PanelTijd = New-Object System.Windows.Forms.Panel $PanelTijd.height = 300 $PanelTijd.width = 300 $PanelTijd.location = New-Object System.Drawing.Point(10,1) $PanelTijd.Visible = $false $PanelInvoer = New-Object System.Windows.Forms.Panel $PanelInvoer.height = 300 $PanelInvoer.width = 300 $PanelInvoer.location = New-Object System.Drawing.Point(10,1) $PanelInvoer.Visible = $false $ButtonTijd = New-Object system.Windows.Forms.Button $ButtonTijd.text = "Tijd" $ButtonTijd.width = 60 $ButtonTijd.height = 30 $ButtonTijd.location = New-Object System.Drawing.Point(7,21) $ButtonTijd.Font = 'Microsoft Sans Serif,10' $ButtonInvoer = New-Object system.Windows.Forms.Button $ButtonInvoer.text = "Invoer" $ButtonInvoer.width = 60 $ButtonInvoer.height = 30 $ButtonInvoer.location = New-Object System.Drawing.Point(7,69) $ButtonInvoer.Font = 'Microsoft Sans Serif,10' $ButtonExit = New-Object system.Windows.Forms.Button $ButtonExit.text = "Sluiten" $ButtonExit.width = 60 $ButtonExit.height = 30 $ButtonExit.location = New-Object System.Drawing.Point(7,(69+69-21)) $ButtonExit.Font = 'Microsoft Sans Serif,10' $ButtonCancel = New-Object system.Windows.Forms.Button $ButtonCancel.text = "Cancel" $ButtonCancel.width = 60 $ButtonCancel.height = 30 $ButtonCancel.location = New-Object System.Drawing.Point(7,50) $ButtonCancel.Font = 'Microsoft Sans Serif,10' $ButtonCancel1 = New-Object system.Windows.Forms.Button $ButtonCancel1.text = "Cancel" $ButtonCancel1.width = 60 $ButtonCancel1.height = 30 $ButtonCancel1.location = New-Object System.Drawing.Point(7,50) $ButtonCancel1.Font = 'Microsoft Sans Serif,10' $ButtonRefresh = New-Object system.Windows.Forms.Button $ButtonRefresh.text = "Refresh" $ButtonRefresh.width = 80 $ButtonRefresh.height = 30 $ButtonRefresh.location = New-Object System.Drawing.Point(120,50) $ButtonRefresh.Font = 'Microsoft Sans Serif,10' $Tijd = New-Object System.Windows.Forms.Label $Tijd.location = New-Object System.Drawing.Point(7,21) $Tijd.Font = 'Microsoft Sans Serif,10' $Tijd.AutoSize = $true $Invoer = New-Object System.Windows.Forms.TextBox $Invoer.location = New-Object System.Drawing.Point(7,21) $Invoer.Font = 'Microsoft Sans Serif,10' $Uitvoer = New-Object System.Windows.Forms.Label $Uitvoer.location = New-Object System.Drawing.Point(120,25) $Uitvoer.Font = 'Microsoft Sans Serif,10' $Uitvoer.Text = '...' $Form.controls.AddRange(@($PanelMenu,$PanelTijd,$PanelInvoer)) $PanelMenu.controls.AddRange(@($ButtonTijd,$ButtonInvoer,$ButtonExit)) $PanelTijd.controls.AddRange(@($Tijd,$ButtonCancel1)) $PanelInvoer.controls.AddRange(@($Invoer,$Uitvoer,$ButtonCancel,$ButtonRefresh)) #region gui events { $ButtonTijd.Add_Click({ $Tijd.Text = Get-Date $PanelMenu.Visible = $false $PanelTijd.Visible = $true }) $ButtonInvoer.Add_Click({ $PanelMenu.Visible = $false $PanelInvoer.Visible = $true }) $ButtonRefresh.Add_Click({ $Uitvoer.Text = $Invoer.Text $Uitvoer.Refresh() }) $ButtonCancel1.Add_Click({ $PanelTijd.Visible = $false $PanelInvoer.Visible = $false $PanelMenu.Visible = $true }) $ButtonCancel.Add_Click({ $PanelTijd.Visible = $false $PanelInvoer.Visible = $false $PanelMenu.Visible = $true }) $ButtonExit.Add_Click({ $PanelTijd.Visible = $false $PanelMenu.Visible = $fale $Form.Close() $Form.Dispose()}) #endregion events } #endregion GUI } #Close Encounters of the Third Kind [console]::beep(900,400) [console]::beep(1000,400) [console]::beep(800,400) [console]::beep(400,400) [console]::beep(600,1600) #Open het formulier [void]$Form.ShowDialog() #Dag hoor $MenuForm.Dispose() (new-object -com SAPI.SpVoice).speak('Have a good day!') |
[ Voor 0% gewijzigd door Vunzz op 18-02-2018 17:27 . Reden: typootje ]
How can you conquer a hill top, if you are to busy at the bottom stepping over stones.
En? Dat PS script moet dan ook gewijzigd worden.Killah_Priest schreef op woensdag 14 februari 2018 @ 18:10:
[...]
En wat als het proces wijzigt? Wat als men bv overgaat naar Office 365 en het aanmaken van een user gaat ineens anders? Dan werkt de applicatie ook niet meer.
Alsof code compilen zo moeilijk is. Daarnaast hoeft een webforms formuliertje ook niet gecompileerd te worden. Ik heb wel eens een formulier zo in elkaar gezet en daar kwam geen compiler aan te pas. En als je .NET dan toch eng vindt dan maak je de site gewoon in PHP en laat je dat een PS scriptje aftrappen.Overigens draait Powershell op het .NET platform. Sterker nog, ik gebruik soms zelfs CIL in mijn Powershell scripts (lang leve de Reflection namespace in .Net) als ik bepaalde specifieke doelen wil bereiken welke op geen andere manier mogelijk zijn.
Powershell is juist geschikt voor dit soort zaken omdat code zo makkelijk aan te passen is zonder code te hoeven compilen.
Gewoon niet aan Word of Excel formulieren beginnen. Ik ken dat: Je maakt een formulier en verspreidt het onder je klanten. Dan maak je 3 maanden later een kleine aanpassing, en die verspreid je ook, en dan blijf je nog maanden (en soms jaren) oude versies van dat formulier ontvangen omdat die klanten elke keer de vorige aanvraag weer openen, naam aanpassen, en dan dat formulier weer opsturen. En die klanten snappen niet waarom jij zo moeilijk doet over welke versie van het formulier ze invullen.Verder voor de TS : probeer simpel te denken. Proberen om een script te genereren vanuit een Office document is lastig (ja, vbs gebruiken en daar Powershell mee aanroepen).
Maak gewoon een script om een Word of Excel document te parsen. De basic flow is dan als volgt :
- je krijgt een Word of Excel document (gestandariseerd uiteraard)
- Powershell script parsed het document (legio voorbeelden te vinden online) : script leest dus de velden uit en voert op basis van de ingevulde velden bepaalde acties uit.
Maak het jezelf niet te moeilijk door te complex te denken voor simpele oplossingen.
Daarom vind ik webformulieren veel fijner. Dan verspreid je gewoon de URL en je kunt het formulier blijven aanpassen zonder dat je klanten het zelfs maar hoeven te weten.
Dit is niet zo heel simpel op te lossen : je hangt een button immers als een child onder een ander item, logischerwijs kun je dit dus maar 1x doen (je button is een child van de form).Vunzz schreef op zaterdag 17 februari 2018 @ 10:56:
Ik heb pas een script gebouwd waarvan ik dacht: "dit kan nog wel een GUI gebruiken."
Via PoshGUI.com ben ik ooit met Windows Forms in PowerShell in aanraking gekomen, maar ik had het tot nu toe alleen nog gebruikt om gegevens wat chiquer weer te geven.
Ik heb nu een scriptje dat als enige doel heeft om te spelen met de verschillende controls, aangezien ik nog nooit eerder een (Windows-)GUI heb geprogrammeerd.
Het script opent een form met een panel. Door panels als dan niet visible te maken, zijn de verschillende onderdelen van het "programma" zichtbaar.
Nu heb ik een cancel knop $ButtonCancel die ik mooi dacht te kunnen hergebruiken op meerdere panels. Nu ik echter meerder panels heb, komt de knop op nog maar één panel daadwerkelijk tevoorschijn.
Ik heb dit nu "opgelost" door $ButtonCancel1 aan te maken, maar dat is natuurlijk geen nette oplossing.
Vraag: Hoe kan ik een button hergebruiken op meerdere panels?
In feite is je huidige oplossing al voldoende (naar mijn idee de meest simpele oplossing).
Ok, duidelijk, TNX!
Ik heb nu de MenuStrip ontdekt, wat denk een mooiere oplossing is om te navigeren binnen de applicatie.
De Buttons zijn dan alleen voor het bedienen van functionaliteiten.
Ik heb nu de MenuStrip ontdekt, wat denk een mooiere oplossing is om te navigeren binnen de applicatie.
De Buttons zijn dan alleen voor het bedienen van functionaliteiten.
How can you conquer a hill top, if you are to busy at the bottom stepping over stones.
Is er enige scripting/programmeer voorkennis nodig voor Powershell? Ik wil het boek ''learning powershell in a month of lunches'' aanschaffen en mij verdiepen in Powershell, is dit boek aan te raden?
"So that's how democracy dies, with a thunderous applause"
Nodig? Nee. Maar bij het leren van een nieuwe taal is ervaring met vergelijkbare andere talen altijd een voordeel. Maar er zijn uitzonderingen. Kennis van C#, Java, Python of Ruby zal je helpen als je met PowerShell begint. Kennis van batch files of Bash zal je eerder hinderen omdat je dan gemakkelijk in die traditionele manier van denken blijft hangen en vaak geneigd bent om oude oplossingen 1 op 1 naar PowerShell te vertalen.BroWohsEdis schreef op maandag 26 maart 2018 @ 18:51:
Is er enige scripting/programmeer voorkennis nodig voor Powershell?
Lees de reviews op Amazon gewoon eens. Maar ik betwijfel of dit boek geschikt voor jou is. Drie van de vier reviews voor de 2017 editie van dat boek geeft aan dat het niet voor beginners is:Ik wil het boek ''learning powershell in a month of lunches'' aanschaffen en mij verdiepen in Powershell, is dit boek aan te raden?
Before ordering this book through Amazon Vine, I thought that this book was intended to be for beginners but after getting and reading a few chapters from this book, I can see that the target reader level is definitely not the beginner; the book is targetted for Intermediate-Advanced users of PowerShell.
Je hebt 2 boeken van PowerShell in de 'month of lunches' reeks.BroWohsEdis schreef op maandag 26 maart 2018 @ 18:51:
Is er enige scripting/programmeer voorkennis nodig voor Powershell? Ik wil het boek ''learning powershell in a month of lunches'' aanschaffen en mij verdiepen in Powershell, is dit boek aan te raden?
https://morelunches.com/2...-month-of-lunches-2nd-ed/ is zeker geen slecht beginnersboek.
Als je nog nooit geprogrammeerd/gescript hebt, kan het soms wat moeilijk zijn.
Het is alleszins één van mijn eerste boeken geweest dat ik indertijd gelezen heb inzake PowerShell
Battle.net: NagaByrd#2844
Learn Powershell in a month of lunches is juist HET boek dat ik aanraad voor iedereen die wil beginnen met Powershell. De opvolger daarvan, Learn Powershell scripting in a month of lunches is pas aan te raden als je de eerste goed begrijpt en kan toepassen.BroWohsEdis schreef op maandag 26 maart 2018 @ 18:51:
Is er enige scripting/programmeer voorkennis nodig voor Powershell? Ik wil het boek ''learning powershell in a month of lunches'' aanschaffen en mij verdiepen in Powershell, is dit boek aan te raden?
Scripting/programmeer voorkennis helpt uiteraard maar is niet nodig, je zult iets langer doen over het begrijpen ervan verwacht ik.
Een hele rij microsoft certificeringen.
@r!k schreef op dinsdag 27 maart 2018 @ 08:27:
[...]
Learn Powershell in a month of lunches is juist HET boek dat ik aanraad voor iedereen die wil beginnen met Powershell. De opvolger daarvan, Learn Powershell scripting in a month of lunches is pas aan te raden als je de eerste goed begrijpt en kan toepassen.
nagasy schreef op maandag 26 maart 2018 @ 19:46:
[...]
Je hebt 2 boeken van PowerShell in de 'month of lunches' reeks.
https://morelunches.com/2...-month-of-lunches-2nd-ed/ is zeker geen slecht beginnersboek.
Als je nog nooit geprogrammeerd/gescript hebt, kan het soms wat moeilijk zijn.
Het is alleszins één van mijn eerste boeken geweest dat ik indertijd gelezen heb inzake PowerShell
Ik heb het boek al (Learning powershell in a month of lunches), ik heb de eerste 3 hoofdstukken gelezen en vind dat het tot nu toe erg duidelijk wordt uitgelegd. Al moet het moeilijk natuurlijk nog komendowntime schreef op maandag 26 maart 2018 @ 19:14:
[...]
.
[...]
Lees de reviews op Amazon gewoon eens. Maar ik betwijfel of dit boek geschikt voor jou is. Drie van de vier reviews voor de 2017 editie van dat boek geeft aan dat het niet voor beginners is:
[...]
"So that's how democracy dies, with a thunderous applause"
'Learn Powershell in a month of lunches' en 'Learn Powershell scripting in a month of lunches' zijn beide goede boeken inderdaad.
Nadat ik deze boeken heb gelezen, vond ik Windows PowerShell Best Practices van Ed Wilson (Scripting Guy, maar inmiddels met pensioen) ook heel goed.
Verder heb ik zelf op mijn leeslijst ook nog staan:
-The PowerShell Scripting & Toolmaking book "Forever" Edition van Don Jones en Jeffery Hicks
-PowerShell 101 The No-Nonsense Beginner's Guide to PowerShell van Mike F Robbins
-The Pester Book van Adam Bertram
-The DSC book "Forever" Edition van Don Jones en Melissa Januszko
Iemand een of meerdere van deze al gelezen?
Nadat ik deze boeken heb gelezen, vond ik Windows PowerShell Best Practices van Ed Wilson (Scripting Guy, maar inmiddels met pensioen) ook heel goed.
Verder heb ik zelf op mijn leeslijst ook nog staan:
-The PowerShell Scripting & Toolmaking book "Forever" Edition van Don Jones en Jeffery Hicks
-PowerShell 101 The No-Nonsense Beginner's Guide to PowerShell van Mike F Robbins
-The Pester Book van Adam Bertram
-The DSC book "Forever" Edition van Don Jones en Melissa Januszko
Iemand een of meerdere van deze al gelezen?
De laatste 2 heb ik reeds doorlezen.punisher007 schreef op maandag 2 april 2018 @ 19:12:
'Learn Powershell in a month of lunches' en 'Learn Powershell scripting in a month of lunches' zijn beide goede boeken inderdaad.
Nadat ik deze boeken heb gelezen, vond ik Windows PowerShell Best Practices van Ed Wilson (Scripting Guy, maar inmiddels met pensioen) ook heel goed.
Verder heb ik zelf op mijn leeslijst ook nog staan:
-The PowerShell Scripting & Toolmaking book "Forever" Edition van Don Jones en Jeffery Hicks
-PowerShell 101 The No-Nonsense Beginner's Guide to PowerShell van Mike F Robbins
-The Pester Book van Adam Bertram
-The DSC book "Forever" Edition van Don Jones en Melissa Januszko
Iemand een of meerdere van deze al gelezen?
Maar wel omdat ik daar dagelijks mee bezig ben op mijn werk (infra as code).
Het zijn voor mij boeken die PowerShell aanvullen en zeker interessant zijn.
Maar niet onmiddellijk nodig zijn voor het schrijven van (basic) tools.
Maar boeken van Don Jones zijn zeker een aanrader
Andere PowerShell boeken die ik heb staan zijn:
Windows Powershell in Action v3 van Bruce Payette
Battle.net: NagaByrd#2844
Verwijderd
Goedemorgen,
Zou een van jullie willen kijken naar mijn script?
Ik krijg een foutmelding zodra ik Get-Random uitvoer
# alle kleuren van de regenboog
$red = Write-host (1) -ForegroundColor red
$white = Write-Host (2) -ForegroundColor white
$blue = Write-Host (3)-ForegroundColor blue
Get-Random $red, $white, $blue
Zou een van jullie willen kijken naar mijn script?
Ik krijg een foutmelding zodra ik Get-Random uitvoer
# alle kleuren van de regenboog
$red = Write-host (1) -ForegroundColor red
$white = Write-Host (2) -ForegroundColor white
$blue = Write-Host (3)-ForegroundColor blue
Get-Random $red, $white, $blue
Welke foutmelding?
Die variabelen zijn leeg, waarschijnlijk omdat je de output naar het scherm stuurt met Write-Host. Er valt voor Get-Random dus weinig random meer te kiezen.
Kijk zelf maar:
Die variabelen zijn leeg, waarschijnlijk omdat je de output naar het scherm stuurt met Write-Host. Er valt voor Get-Random dus weinig random meer te kiezen.
Kijk zelf maar:
code:
1
2
| $red = Write-host (1) -ForegroundColor red $red |
[ Voor 98% gewijzigd door Jazzy op 22-05-2018 09:30 ]
Verwijderd
Kijk als ik met Get-Random 1/tm 10 kies, dan komt er bijvoorbeeld 3 uit. (of een andere random tot 10 getal)
Doe ik dat met die variable $red, $white $blue dan komt er niks.Met Write-host stuur ik het dus naar het scherm?
Kan Get-Random dan niet uit variabelen selectereren?
Doe ik dat met die variable $red, $white $blue dan komt er niks.Met Write-host stuur ik het dus naar het scherm?
Kan Get-Random dan niet uit variabelen selectereren?
Je mist een stukje basis over hoe powershell werkt.
Wat je probeert te doen, een write-host met een kleurtje in een variabele stoppen, kan niet. Wat wel kan is een random getal in een variabele stoppen. Get-random in jou geval. Die kan je dan met write-host in een kleur tekst naar je console output wegschrijven.
Wat je probeert te doen, een write-host met een kleurtje in een variabele stoppen, kan niet. Wat wel kan is een random getal in een variabele stoppen. Get-random in jou geval. Die kan je dan met write-host in een kleur tekst naar je console output wegschrijven.
Ik weet niet wat je probeert te doen, maar een soortgelijk voorbeeld staat in:
Volgens https://docs.microsoft.co...-random?view=powershell-6
Example 8:
Get-Random -InputObject "red", "yellow", "blue"
Dit lijkt op jouw code alleen heb jij het over $Red, $White en $Blue. Als je echter nog nergens de variabelen hebt gedefinieerd, gaat het niet werken natuurlijk want dan zijn de variabelen leeg.
Dit zou wel werken:
$Color1 = "Red"
$Color2 = "White"
$Color3 = "Blue"
$Colors = @($Color1,$Color2,$Color3)
Get-Random -InputObject $Colors
Maar makkelijker is:
$Colors = @("Red","White","Blue")
Get-Random -InputObject $Colors
Om het met Write-Host te combineren zou je dit kunnen doen:
$Colors = @("Red","White","Blue")
$RandomColor = Get-Random -InputObject $Colors
Write-Host -Object "Random color is $RandomColor" -ForeGroundColor $RandomColor
Volgens https://docs.microsoft.co...-random?view=powershell-6
Example 8:
Get-Random -InputObject "red", "yellow", "blue"
Dit lijkt op jouw code alleen heb jij het over $Red, $White en $Blue. Als je echter nog nergens de variabelen hebt gedefinieerd, gaat het niet werken natuurlijk want dan zijn de variabelen leeg.
Dit zou wel werken:
$Color1 = "Red"
$Color2 = "White"
$Color3 = "Blue"
$Colors = @($Color1,$Color2,$Color3)
Get-Random -InputObject $Colors
Maar makkelijker is:
$Colors = @("Red","White","Blue")
Get-Random -InputObject $Colors
Om het met Write-Host te combineren zou je dit kunnen doen:
$Colors = @("Red","White","Blue")
$RandomColor = Get-Random -InputObject $Colors
Write-Host -Object "Random color is $RandomColor" -ForeGroundColor $RandomColor
[ Voor 18% gewijzigd door punisher007 op 22-05-2018 19:02 ]
Voor de liefhebber: de aankondiging van de volgende DuPSUG: http://dupsug.com/2018/05/23/dupsug-12-visit-from-aws/
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Wat zowel @Jazzy , @Craven als @punisher007 je willen uitleggen heet de Powershell Pipeline.Craven schreef op dinsdag 22 mei 2018 @ 17:36:
Je mist een stukje basis over hoe powershell werkt.
Wat je probeert te doen, een write-host met een kleurtje in een variabele stoppen, kan niet. Wat wel kan is een random getal in een variabele stoppen. Get-random in jou geval. Die kan je dan met write-host in een kleur tekst naar je console output wegschrijven.
Verwijderd
Thanks, dat is em.punisher007 schreef op dinsdag 22 mei 2018 @ 18:46:
Ik weet niet wat je probeert te doen, maar een soortgelijk voorbeeld staat in:
Volgens https://docs.microsoft.co...-random?view=powershell-6
Example 8:
Get-Random -InputObject "red", "yellow", "blue"
Dit lijkt op jouw code alleen heb jij het over $Red, $White en $Blue. Als je echter nog nergens de variabelen hebt gedefinieerd, gaat het niet werken natuurlijk want dan zijn de variabelen leeg.
Dit zou wel werken:
$Color1 = "Red"
$Color2 = "White"
$Color3 = "Blue"
$Colors = @($Color1,$Color2,$Color3)
Get-Random -InputObject $Colors
Maar makkelijker is:
$Colors = @("Red","White","Blue")
Get-Random -InputObject $Colors
Om het met Write-Host te combineren zou je dit kunnen doen:
$Colors = @("Red","White","Blue")
$RandomColor = Get-Random -InputObject $Colors
Write-Host -Object "Random color is $RandomColor" -ForeGroundColor $RandomColor
[ Voor 96% gewijzigd door Verwijderd op 24-05-2018 07:37 ]
Beetje slecht om hier zo te vragen, maar ik ga toch een poging doen. Jaren geleden had ik op internet een Powershell script gevonden wat een 'kruisjes tabel' in Excel kon maken van je AD users en groepen.
Een beetje dit idee:
Je snapt het wel, ik kan dat script nergens meer terug vinden.
Herkent iemand toevallig het bovenstaande en heeft de link?
Na het al het zoeken had ik het waarschijnlijk beter zelf kunnen maken, maar toch.
Edit: inmiddels toch zelf maar iets geschreven.
Een beetje dit idee:
code:
1
2
3
4
| Group 1 Group 2 Group 3 User 1 X User 2 X X User 3 X |
Je snapt het wel, ik kan dat script nergens meer terug vinden.

Na het al het zoeken had ik het waarschijnlijk beter zelf kunnen maken, maar toch.

Edit: inmiddels toch zelf maar iets geschreven.
[ Voor 3% gewijzigd door new_guy op 29-05-2018 13:16 ]
@new_guy Ik denk dat je deze bedoelde: https://gallery.technet.m...37-4b5d-93f3-c409c6cf7a45
Maar ik ben wel benieuwd wat je er zelf van hebt gemaakt, kun je die delen?
Ik zou zelf nooit in Excel maken, maar in plaats hiervan een object outputten. Dan kan de gebruiker daarna zelf kiezen of hij het naar Excel, HTML, etc wil outputten.
Maar ik ben wel benieuwd wat je er zelf van hebt gemaakt, kun je die delen?
Ik zou zelf nooit in Excel maken, maar in plaats hiervan een object outputten. Dan kan de gebruiker daarna zelf kiezen of hij het naar Excel, HTML, etc wil outputten.
Verwijderd
Nog een hoop te doen
Ach, let niet op de muziek die er in een lijstje staat, want ik weet de meeste vinden het toch 'bagger' Haha
Had een .mp3 playlist gemaakt.Set-Location D:\mp3\
Write-Host '.\50 Cent - Im The Man (ft. Sonny Digital).mp3'
start '.\50 Cent - Im The Man (ft. Sonny Digital).mp3'
start-sleep -s 130
#volgende liedje zit 130 seconden tussen
Write-Host '.\50 Cent - Window Shopper.mp3'
start '.\50 Cent - Window Shopper.mp3'
start-sleep -s 130
#liedje
Write-Host '.\Eminem - Not Afraid.mp3'
start '.\Eminem - Not Afraid.mp3'
start-sleep -s 130
#doet het wel
start '.\Xzibit - Paparazzi.mp3'
start-sleep -s 130
start '.\Dr. Dre - Kush ft. Snoop Dogg, Akon.mp3'
start-sleep -s 130
start '.\Trinidad James - All Gold Everything (Explicit).mp3'
start-sleep -s 130
start '.\Rick Ross - Hustlin.mp3'
start-sleep -s 130
start '.\Rick Ross - You Know I Got It (Reprise).mp3'
start-sleep -s 130
start '.\Jeremih - Down On Me ft. 50 Cent.mp3'
start-sleep -s 130
start '.\Drake, Kanye West, Lil Wayne, Eminem - Forever (Explicit Version).mp3'
start-sleep -s 130
start '.\50 Cent - Many Men.mp3.mp3'
start-sleep -s 130
#einde playlist ga naar exit
exit
Ach, let niet op de muziek die er in een lijstje staat, want ik weet de meeste vinden het toch 'bagger' Haha
[ Voor 6% gewijzigd door Verwijderd op 15-06-2018 15:18 ]
Ik vraag me af wat de beste manier is om dit aan te pakken. Voorbeeldje uit de PowerCLI van VMware waar ik nu tegenaan loop.
De variable $var1 heeft nu de velden Name, PowerState, NumCPUs en MemoryGB. Ik wil de laatste backup van deze VM zien, dus bijvoorbeeld:
Nu bevat de variable $var1 de velden AnnotatedEntity, Name, Value. (Name is naam van het customattribute. Nu wil ik een lijst maken (array zodat ik dit naar een CSV kan exporteren) met de naam van de VM en de laatste keer dat deze gebackupped is. Ik moet dus de naam van de VM uit het eerste commando combineren met de output van het laatste commando.
Op dit moment maak ik een custom array die ik zelf opbouw met de velden, maar ik vraag me af of er een betere manier is om dit te doen?
code:
1
| $var1 = Get-VM -name "VM1" |
De variable $var1 heeft nu de velden Name, PowerState, NumCPUs en MemoryGB. Ik wil de laatste backup van deze VM zien, dus bijvoorbeeld:
code:
1
| $var1 = Get-VM -name "VM1" | Get-Annotation -CustomAttribute "Last Backup" |
Nu bevat de variable $var1 de velden AnnotatedEntity, Name, Value. (Name is naam van het customattribute. Nu wil ik een lijst maken (array zodat ik dit naar een CSV kan exporteren) met de naam van de VM en de laatste keer dat deze gebackupped is. Ik moet dus de naam van de VM uit het eerste commando combineren met de output van het laatste commando.
Op dit moment maak ik een custom array die ik zelf opbouw met de velden, maar ik vraag me af of er een betere manier is om dit te doen?
De naam haal je ergens uit toch? Nu staat die als string opgegeven. Ik neem aan dat je ergens doorheen gaat om de namen op te halen. Je kunt de naam en lastBackup toch in een aparte variable gooien in de loop?Pimmerd schreef op vrijdag 15 juni 2018 @ 15:55:
Ik vraag me af wat de beste manier is om dit aan te pakken. Voorbeeldje uit de PowerCLI van VMware waar ik nu tegenaan loop.
code:
1 $var1 = Get-VM -name "VM1"
De variable $var1 heeft nu de velden Name, PowerState, NumCPUs en MemoryGB. Ik wil de laatste backup van deze VM zien, dus bijvoorbeeld:
code:
1 $var1 = Get-VM -name "VM1" | Get-Annotation -CustomAttribute "Last Backup"
Nu bevat de variable $var1 de velden AnnotatedEntity, Name, Value. (Name is naam van het customattribute. Nu wil ik een lijst maken (array zodat ik dit naar een CSV kan exporteren) met de naam van de VM en de laatste keer dat deze gebackupped is. Ik moet dus de naam van de VM uit het eerste commando combineren met de output van het laatste commando.
Op dit moment maak ik een custom array die ik zelf opbouw met de velden, maar ik vraag me af of er een betere manier is om dit te doen?
code:
1
2
3
4
| $name = "VM1" $lastBackup = Get-VM -name $name | Get-Annotation -CustomAttribute "Last Backup" Write-Host $name $lastBackup |
Klopt, dit was misschien niet het beste voorbeeld, dit is wat ik nu doe met een foreach loop. Stel nou dat ik Name en PowerState uit het eerste commando wil halen en LastBackup uit het tweede, wat is het meest efficiente manier om dit te doen zonder de gehele array opnieuw op te bouwen?Squ1zZy schreef op vrijdag 15 juni 2018 @ 16:44:
De naam haal je ergens uit toch? Nu staat die als string opgegeven. Ik neem aan dat je ergens doorheen gaat om de namen op te halen. Je kunt de naam en lastBackup toch in een aparte variable gooien in de loop?
code:
1 2 3 4 $name = "VM1" $lastBackup = Get-VM -name $name | Get-Annotation -CustomAttribute "Last Backup" Write-Host $name $lastBackup
Hier een nieuwe PowerShell module waar je excel bestanden kan importeren zonder Excel geinstalleerd te hebben:
https://github.com/dfinke/ImportExcel
https://github.com/dfinke/ImportExcel
Voor mensen die veel met verschillende onderdelen (eventueel voor verschillende tenants) van de Microsoft Office365 Cloud werken, heeft een collega van me een handige module gemaakt:
https://github.com/martensnico/Office365.Connect
Deze connect voor je met de volgende services:
- Azure Active Directory (AzureAD)
- Microsoft Online (Msol)
- SharePoint Online (SPO
- Exchange Online
- Skype for Business Online
- Microsoft Teams
- Security & Compliance
- Connect PNP
Hierbij wordt gebruik gemaakt van de Credential Store van Windows zelf. Mocht je ergens mee willen verbinden en daarvoor nog aanvullende zaken op je systeem nodig hebt, dan wordt dit voor je gedownload.
Meer info: https://sharepointrelated...ll-easy-secure-office365/
https://github.com/martensnico/Office365.Connect
Deze connect voor je met de volgende services:
- Azure Active Directory (AzureAD)
- Microsoft Online (Msol)
- SharePoint Online (SPO
- Exchange Online
- Skype for Business Online
- Microsoft Teams
- Security & Compliance
- Connect PNP
Hierbij wordt gebruik gemaakt van de Credential Store van Windows zelf. Mocht je ergens mee willen verbinden en daarvoor nog aanvullende zaken op je systeem nodig hebt, dan wordt dit voor je gedownload.
Meer info: https://sharepointrelated...ll-easy-secure-office365/
Dat soort modules bestaan al, ik heb ze al wel is voorbij zien komen, maar zeer zeker erg handig.Neal schreef op maandag 18 juni 2018 @ 09:10:
Voor mensen die veel met verschillende onderdelen (eventueel voor verschillende tenants) van de Microsoft Office365 Cloud werken, heeft een collega van me een handige module gemaakt:
https://github.com/martensnico/Office365.Connect
Deze connect voor je met de volgende services:
- Azure Active Directory (AzureAD)
- Microsoft Online (Msol)
- SharePoint Online (SPO
- Exchange Online
- Skype for Business Online
- Microsoft Teams
- Security & Compliance
- Connect PNP
Hierbij wordt gebruik gemaakt van de Credential Store van Windows zelf. Mocht je ergens mee willen verbinden en daarvoor nog aanvullende zaken op je systeem nodig hebt, dan wordt dit voor je gedownload.
Meer info: https://sharepointrelated...ll-easy-secure-office365/
Verwijderd
Zodra ik het script wil draaien gebeurt er niks.#tafel van 1
$getal = 1,2,3,4,5,6,7,8,9,10
foreach ($getal in $d)
{
$getal * 1
}
#tafel van 2
$getal2 = 1,2,3,4,5,6,7,8,9,10
foreach ($getal2 in $d)
{
$getal2 * 2
}
#tafel van 3
$getal3 = 0,1,2,3,4,5,6,7,8,9,10
foreach ($getal3 in $d)
{
Write-host $getal3 * 3 -ForegroundColor red
}
[ Voor 17% gewijzigd door Verwijderd op 21-06-2018 16:05 . Reden: Powershell werkt niet meer ]
Verwijderd
Deze is ook handig: Show-Command -Height 500 -Width 350
Laat Commandos van Powershell zien in een gui
Laat Commandos van Powershell zien in een gui
Of je doet gewoon 'Shcm | ogv'.Verwijderd schreef op woensdag 20 juni 2018 @ 16:14:
Deze is ook handig: Show-Command -Height 500 -Width 350
Laat Commandos van Powershell zien in een gui
Scheelt je weer typen.
Volgens mij klopt het script ook nietVerwijderd schreef op woensdag 20 juni 2018 @ 10:34:
[...]
Zodra ik het script wil draaien gebeurt er niks.
[afbeelding]
Wat wil je precies doen?
Je laat ook niets zienVerwijderd schreef op woensdag 20 juni 2018 @ 10:34:
[...]
Zodra ik het script wil draaien gebeurt er niks.
[afbeelding]
Als je iets in een variabele zet dan vraag je niet om een output. Wat je b.v. kan doen is:
Witte-Host $getal
Je hebt een array aangemaakt, maar je zegt:
ForEach ($getal in $d)
Dat moet zijn:
ForEach ($d in $getal)
Dan in de loop $d gebruiken. Het script heeft wel wat aandacht nodig. Wat probeer je precies? Doe het stap voor stap en post eens wat je hebt gemaakt na het lezen van wat artikelen.
Versimpeld zou het zoiets als dit kunnen zijn:
$Tafels = 1..10
Foreach($Tafel in $Tafels)
{
Write-Output "Tafel van $Tafel"
1..10 | Foreach{
$_ * $Tafel
}
}
$Tafels = 1..10
Foreach($Tafel in $Tafels)
{
Write-Output "Tafel van $Tafel"
1..10 | Foreach{
$_ * $Tafel
}
}
Verwijderd
punisher007 schreef op donderdag 21 juni 2018 @ 20:52:
Versimpeld zou het zoiets als dit kunnen zijn:
$Tafels = 1..10
Foreach($Tafel in $Tafels)
{
Write-Output "Tafel van $Tafel"
1..10 | Foreach{
$_ * $Tafel
}
}
[ Voor 18% gewijzigd door Verwijderd op 22-06-2018 11:59 ]
Doen, doen, doen. En had ik al gezegd doen?Verwijderd schreef op vrijdag 22 juni 2018 @ 11:55:
Hoe zijn jullie zo goed geworden in programmeren.
Ik zie mezelf niet zo goed worden.
Ipv in de GUI te klikken, kijk of je iets simpels met Powershell kan doen. Dan raak je ermee vertrouwd en ga je vanzelf scriptjes uitbreiden en ben je na verloop van tijd beter dan je dacht.
Any errors in spelling, tact, or fact are transmission errors.
Verwijderd
Oefenen, boeken lezen. Zaken zoeken die je echt wilt automatiseren en voorbeelden van anderen overnemen en aanpassen naar eigen wens.Verwijderd schreef op vrijdag 22 juni 2018 @ 11:55:
Hoe zijn jullie zo goed geworden in programmeren.
Ik zie mezelf niet zo goed worden.
Vraagje: Waarom zou je write-host gebruiken ipv write-output ? Write-host kan volgens mij niets loggen (althans niet met 'tee'), en write-output laat de output ook gewoon op het scherm zien.
57696520646974206c65657374206973206e657264
Verwijderd
Het is iirc vooral dat het er wat anders uitziet (qua kleur, write-host kun je andere kleurtjes gebruiken)Sluuut schreef op vrijdag 22 juni 2018 @ 14:37:
Vraagje: Waarom zou je write-host gebruiken ipv write-output ? Write-host kan volgens mij niets loggen (althans niet met 'tee'), en write-output laat de output ook gewoon op het scherm zien.
Write-host stuurt data naar de console, write-output stuurt data naar de output stream.Sluuut schreef op vrijdag 22 juni 2018 @ 14:37:
Vraagje: Waarom zou je write-host gebruiken ipv write-output ? Write-host kan volgens mij niets loggen (althans niet met 'tee'), en write-output laat de output ook gewoon op het scherm zien.
Simpel voorbeeld van het verschil :
PowerShell:
1
2
| $a = Write-Host "test" $b = Write-Output "test" |
Het eerste commando (de write-host) geeft een output naar de console : de variable is leeg.
Write-output geeft in dit geval geen output naar de console maar wel in de variable $b.
Kan wel met write-output hoor;Verwijderd schreef op vrijdag 22 juni 2018 @ 14:43:
[...]
Het is iirc vooral dat het er wat anders uitziet (qua kleur, write-host kun je andere kleurtjes gebruiken)
PowerShell:
1
| $host.ui.RawUI.ForegroundColor = "White" |
[ Voor 4% gewijzigd door Sluuut op 22-06-2018 15:00 ]
57696520646974206c65657374206973206e657264
$host.ui.RawUI.ForegroundColor is toch niet hetzelfde als write-output? Dit is gewoon direct de setting van de console aanpassen.Sluuut schreef op vrijdag 22 juni 2018 @ 15:00:
[...]
Kan wel met write-output hoor;
PowerShell:
1 $host.ui.RawUI.ForegroundColor = "White"
Klopt, je hebt gelijk.Killah_Priest schreef op vrijdag 22 juni 2018 @ 15:01:
[...]
$host.ui.RawUI.ForegroundColor is toch niet hetzelfde als write-output? Dit is gewoon direct de setting van de console aanpassen.
57696520646974206c65657374206973206e657264
Zoals al genoemd. Vooral veel doen en vragen als je iets niet weetVerwijderd schreef op vrijdag 22 juni 2018 @ 11:55:
Hoe zijn jullie zo goed geworden in programmeren.
Ik zie mezelf niet zo goed worden.
Vooral veel doen.Verwijderd schreef op vrijdag 22 juni 2018 @ 11:55:
Hoe zijn jullie zo goed geworden in programmeren.
Ik zie mezelf niet zo goed worden.
Op de MVA staan ook twee hele leuke cursussen.
- PowerShell fundamentals
- PowerShell scripting and toolmaking
Daar kun je je prima een avondje mee vermaken.
Ik raad deze aan op MVP:mufana schreef op vrijdag 22 juni 2018 @ 23:05:
[...]
Vooral veel doen.![]()
Op de MVA staan ook twee hele leuke cursussen.
- PowerShell fundamentals
- PowerShell scripting and toolmaking
Daar kun je je prima een avondje mee vermaken.
https://mva.microsoft.com...276?l=r54IrOWy_2304984382
Geeft een foutmelding op de sessieSqu1zZy schreef op zaterdag 23 juni 2018 @ 08:22:
[...]
Ik raad deze aan op MVP:
https://mva.microsoft.com...276?l=r54IrOWy_2304984382
https://mva.microsoft.com...microsoft-powershell-8276
Die doet het wel
Beetje zelf onderzoeken:Verwijderd schreef op maandag 25 juni 2018 @ 12:15:
En waarvoor is die @ sign? die word gebruikt in het script
http://lmgtfy.com/?q=powershell+at+sign
Weet iemand hoe ik de naam "A.txt" en "B.txt" kan opvragen via Powershell? Waar in de properties die verstopt zitten?
Als voorbeeld in het taakbeheer notepad; maar in de praktijk is het een ander process:

Ik probeer het met varianten op:
Maar misschien dat iemand het zo weet?
Edit:
Gevonden:
get-process -Name notepad | select MainWindowTitle
Soms kijk je te lang naar een probleem...
Als voorbeeld in het taakbeheer notepad; maar in de praktijk is het een ander process:

Ik probeer het met varianten op:
code:
1
| get-process -Name notepad | select name -ExpandProperty name |
Maar misschien dat iemand het zo weet?
Edit:
Gevonden:
get-process -Name notepad | select MainWindowTitle

[ Voor 9% gewijzigd door Roamor op 27-06-2018 15:56 ]
Get-Process notepad |where {$_.mainWindowTItle} | Format-Table id, name, mainwindowtitle
Voortaan eerst ff refreshen.
Voortaan eerst ff refreshen.
[ Voor 19% gewijzigd door MADG0BLIN op 27-06-2018 15:58 ]
Verwijderd
$gemoedstoestand = "positief"
if ($gemoedstoestand -eq "positief")
{
Write-Host "Ik ben positeif"
}
else {Write-Host "Helaas ik ben negatief"}
Natuurlijk is er ook de groter dan of le opties die ik heb bekeken.$password = 1
if ($password -eq "1")
{
Write-Host " $password je hebt toegang"
} {else
(Write-host "$password je hebt geen toegang") }
Bijvoorbeeld als getal groter is dan 2 "getal is groter" of getal is kleiner dan 2.
Werkt dat? Eerst ken je het getal 1 toe aan $password en dan vergelijk je dat getal met de string “1”. Ik zou een foutmelding verwachten.Verwijderd schreef op donderdag 28 juni 2018 @ 13:10:
[...]
$password = 1
if ($password -eq "1")
{
[...]
Net thuisgekomen en het even uitgeprobeerd. Warempel, het werkt, PowerShell accepteert het gewoon als je een integer en een string vergelijkt.downtime schreef op donderdag 28 juni 2018 @ 17:46:
[...]
Werkt dat? Eerst ken je het getal 1 toe aan $password en dan vergelijk je dat getal met de string “1”. Ik zou een foutmelding verwachten.
Nog een leuke die je kunt gebruiken voor logging: start-transcript en stop-transcript.
De complete output kan dan naar een logfile worden geschreven. Let wel: er wordt anders omgegaan met write-host en write-output.
De complete output kan dan naar een logfile worden geschreven. Let wel: er wordt anders omgegaan met write-host en write-output.
Je kan dit via een GPO regelen (dit had ik bij een eerdere werkgever ingericht).Henkje.doc schreef op donderdag 5 juli 2018 @ 06:27:
Nog een leuke die je kunt gebruiken voor logging: start-transcript en stop-transcript.
De complete output kan dan naar een logfile worden geschreven. Let wel: er wordt anders omgegaan met write-host en write-output.
Het grootste nadeel hiervan vond ik (buiten het feit dat de transcript files echt enorm kunnen worden) dat bv plain text passwords (waar je soms niet onderuit komt met bepaalde web APIs) ook in de transcript verschijnen, dus 2x per week liep ik dmv een script de boel na op deze info om het uit de transcript te halen.
"Every time you use Write-Host, you kill a puppy". - Don JonesHenkje.doc schreef op donderdag 5 juli 2018 @ 06:27:
Let wel: er wordt anders omgegaan met write-host en write-output.
Behalve in PS5+:
https://twitter.com/jsnover/status/727902887183966208
ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device
Beste mede-tweakers,
Ik zit met een probleem. Er is mij gevraagd of ik een lijst kan aanleveren van pc's die nog in het oude domein zitten en wanneer deze voor het laatst gebruikt zijn. En door wie, zodat het zoeken naar de bewuste pc wat makkelijker gaat. (Het cmdb is nog niet op orde)
De eerste 2 stappen zijn relatief eenvoudig:
Op de domaincontroller vul ik het volgende in:
Get-ADComputer -Filter {OperatingSystem -notLike '*SERVER*' } -Properties lastlogondate,operatingsystem | Select name,lastlogondate,operatingsystem | Sort-Object -Property name | export-csv c:\list.csv -notypeinformation
Tot zover geen probleem, maar hoe krijg ik in dat lijstje ook nog de laatst aangemelde gebruiker? Is dat überhaupt bekend in de AD? Lijkt me toch wel..
Ik zit met een probleem. Er is mij gevraagd of ik een lijst kan aanleveren van pc's die nog in het oude domein zitten en wanneer deze voor het laatst gebruikt zijn. En door wie, zodat het zoeken naar de bewuste pc wat makkelijker gaat. (Het cmdb is nog niet op orde)
De eerste 2 stappen zijn relatief eenvoudig:
Op de domaincontroller vul ik het volgende in:
Get-ADComputer -Filter {OperatingSystem -notLike '*SERVER*' } -Properties lastlogondate,operatingsystem | Select name,lastlogondate,operatingsystem | Sort-Object -Property name | export-csv c:\list.csv -notypeinformation
Tot zover geen probleem, maar hoe krijg ik in dat lijstje ook nog de laatst aangemelde gebruiker? Is dat überhaupt bekend in de AD? Lijkt me toch wel..
Die info zal in de security log van je DC's staan, je zou een query kunnen bouwen met een bepaald eventid en welke de pcnaam bevat die je zoekt. Daar is dan wel de username uit te halen.
Info staat niet in de AD zelf afaik.
Info staat niet in de AD zelf afaik.
Any errors in spelling, tact, or fact are transmission errors.
Nee, wie als laatste op een computer is aangemeld staat niet in AD. Bovendien is dat ook niet echt representatief want wat als een service account is aangemeld? Met name bij servers willen er nog weleens meerdere service accounts aanmelden, want services draaien onder dat account. Aanmelden != inloggen op een desktop sessie.rolfkunst schreef op woensdag 12 september 2018 @ 11:36:
Beste mede-tweakers,
Ik zit met een probleem. Er is mij gevraagd of ik een lijst kan aanleveren van pc's die nog in het oude domein zitten en wanneer deze voor het laatst gebruikt zijn. En door wie, zodat het zoeken naar de bewuste pc wat makkelijker gaat. (Het cmdb is nog niet op orde)
De eerste 2 stappen zijn relatief eenvoudig:
Op de domaincontroller vul ik het volgende in:
Get-ADComputer -Filter {OperatingSystem -notLike '*SERVER*' } -Properties lastlogondate,operatingsystem | Select name,lastlogondate,operatingsystem | Sort-Object -Property name | export-csv c:\list.csv -notypeinformation
Tot zover geen probleem, maar hoe krijg ik in dat lijstje ook nog de laatst aangemelde gebruiker? Is dat überhaupt bekend in de AD? Lijkt me toch wel..
Maar zodra je weet wat de naam van de pc is, kun je toch met een pssession ernaar verbinden en kijken welk gebruikers profiel het laatst is gemodified?
code:
1
| Get-ChildItem "\\$computer\c$\Users" | Sort-Object LastWriteTime -Descending | Select-Object Name, LastWriteTime -first 1 |
Computer says no
Alle domain logins zou je in de logging van de DC moeten zien. Dus gewoon allemaal uitlezen en dan de laatste eruit filteren. Ik heb het niet geprobeerd maar het lijkt me niet zo moeilijk.Meekoh schreef op woensdag 12 september 2018 @ 11:55:
[...]
Nee, wie als laatste op een computer is aangemeld staat niet in AD. Bovendien is dat ook niet echt representatief want wat als een service account is aangemeld? Met name bij servers willen er nog weleens meerdere service accounts aanmelden, want services draaien onder dat account. Aanmelden != inloggen op een desktop sessie.
downtime schreef op woensdag 12 september 2018 @ 20:42:
[...]
Alle domain logins zou je in de logging van de DC moeten zien. Dus gewoon allemaal uitlezen en dan de laatste eruit filteren. Ik heb het niet geprobeerd maar het lijkt me niet zo moeilijk.
PowerShell:
1
| Get-WinEvent -Computer ComputerNaam -FilterHashtable @{Logname='Security';ID=4672} -MaxEvents 1 | select @{N='User';E={$_.Properties[1].Value}} |
Dan nog, nee niet in ad. Wel in een eventlog en wat als die eventlog al overschreven is? Ik ga er niet van uit dat iedereen zijn eventlog heeft groter gemaakt.downtime schreef op woensdag 12 september 2018 @ 20:42:
[...]
Alle domain logins zou je in de logging van de DC moeten zien. Dus gewoon allemaal uitlezen en dan de laatste eruit filteren. Ik heb het niet geprobeerd maar het lijkt me niet zo moeilijk.
Computer says no
Klopt. Maar het is beter dan niks.Meekoh schreef op donderdag 13 september 2018 @ 08:05:
[...]
Dan nog, nee niet in ad. Wel in een eventlog en wat als die eventlog al overschreven is? Ik ga er niet van uit dat iedereen zijn eventlog heeft groter gemaakt.
Even heel iets anders: ik heb zonder al te gefundeerde kennis een stuk of 20 PowerShell-scripts gemaakt die over het algemeen prima doen wat ze moeten doen.
Nu zijn we echter sinds vorige week over op Office 365, dus onze Exchange server is ook daarnaartoe verhuisd.
Ik heb van het internet deze regels gevonden:
Set-ExecutionPolicy RemoteSigned
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking
(sorry, ik weet niet hoe je die code in een apart dingetje zet)
maar dat werkt niet.
Ik heb inmiddels al 3 dagen doorgebracht met troubleshooten, maar ik kom geen steek verder.
Daarom...
Zoek ik nu *knip* hier geen vraag en aanbod van betaalde diensten * 1 script dusdanig aanpassen dat die z'n Exchange-onderdelen op de externe server doet. Ik gok erop dat ik aan de hand van dat voorbeeld alle andere scripts ook wel aan de praat krijg.
Nu zijn we echter sinds vorige week over op Office 365, dus onze Exchange server is ook daarnaartoe verhuisd.
Ik heb van het internet deze regels gevonden:
Set-ExecutionPolicy RemoteSigned
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking
(sorry, ik weet niet hoe je die code in een apart dingetje zet)
maar dat werkt niet.
Ik heb inmiddels al 3 dagen doorgebracht met troubleshooten, maar ik kom geen steek verder.
Daarom...
Zoek ik nu *knip* hier geen vraag en aanbod van betaalde diensten * 1 script dusdanig aanpassen dat die z'n Exchange-onderdelen op de externe server doet. Ik gok erop dat ik aan de hand van dat voorbeeld alle andere scripts ook wel aan de praat krijg.
[ Voor 12% gewijzigd door F_J_K op 20-09-2018 14:50 ]
Lijkt mij iets triviaals, heb je de instructies van MS wel helemaal gevolgd? OS/.NET zijn de juiste versies?
https://docs.microsoft.co...wershell?view=exchange-ps
https://docs.microsoft.co...wershell?view=exchange-ps
Jazeker - ik kan die pagina wel dromen inmiddels... Maar daar kom ik dus niet mee verder.wagenveld schreef op donderdag 20 september 2018 @ 14:24:
Lijkt mij iets triviaals, heb je de instructies van MS wel helemaal gevolgd? OS/.NET zijn de juiste versies?
https://docs.microsoft.co...wershell?view=exchange-ps
[ Voor 4% gewijzigd door markcoutinho op 20-09-2018 14:37 ]
Wat is de exacte foutmelding die je krijgt? De connectie string lijkt juist.
@markcoutinho dit topic / dit forum is niet bedoeld voor vraag en aanbod van betaalde diensten. Dat kan je desgewenst in https://tweakers.net/aanbod/#highlightCat:892 kwijt.
Hier denken we wel graag mee, maar dan is het wel meedenken waarbij het meeste werk door jezelf gebeurt. Als je het zelf wilt oplossen met onze hulp, stel ik voor dat je even een los topic opent en daarbij ook bovenstaande meeneemt.
Hier denken we wel graag mee, maar dan is het wel meedenken waarbij het meeste werk door jezelf gebeurt. Als je het zelf wilt oplossen met onze hulp, stel ik voor dat je even een los topic opent en daarbij ook bovenstaande meeneemt.
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)
Dank je voor je reactie.F_J_K schreef op donderdag 20 september 2018 @ 14:52:
@markcoutinho dit topic / dit forum is niet bedoeld voor vraag en aanbod van betaalde diensten. Dat kan je desgewenst in https://tweakers.net/aanbod/#highlightCat:892 kwijt.
Hier denken we wel graag mee, maar dan is het wel meedenken waarbij het meeste werk door jezelf gebeurt. Als je het zelf wilt oplossen met onze hulp, stel ik voor dat je even een los topic opent en daarbij ook bovenstaande meeneemt.
Ik heb m'n vraag op de door jou voorgestelde pagina gepost.
En geloof me: ik heb al heel wat uren zitten zoeken/testen/proberen, vandaar dat ik hier terecht kwam.
Was je, naast het zoeken van iemand om het aan uit te besteden, ook nog op zoek naar concrete hulp van de experts hier? In dat geval, vertel even precies wat er niet werkt.markcoutinho schreef op donderdag 20 september 2018 @ 14:20:
maar dat werkt niet.
@markcoutinho al nagekeken of de firewall niets blokkeert naar buiten toe?
[ Voor 8% gewijzigd door nagasy op 20-09-2018 16:54 ]
Battle.net: NagaByrd#2844
Als ik je code kopieer en uitvoer werkt het gewoon. Welke melding krijg je? Access denied?markcoutinho schreef op donderdag 20 september 2018 @ 14:20:
Even heel iets anders: ik heb zonder al te gefundeerde kennis een stuk of 20 PowerShell-scripts gemaakt die over het algemeen prima doen wat ze moeten doen.
Nu zijn we echter sinds vorige week over op Office 365, dus onze Exchange server is ook daarnaartoe verhuisd.
Ik heb van het internet deze regels gevonden:
Set-ExecutionPolicy RemoteSigned
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking
(sorry, ik weet niet hoe je die code in een apart dingetje zet)
maar dat werkt niet.
Ik heb inmiddels al 3 dagen doorgebracht met troubleshooten, maar ik kom geen steek verder.
Daarom...
Zoek ik nu ~[mbr]*knip* hier geen vraag en aanbod van betaalde diensten * ~[/] 1 script dusdanig aanpassen dat die z'n Exchange-onderdelen op de externe server doet. Ik gok erop dat ik aan de hand van dat voorbeeld alle andere scripts ook wel aan de praat krijg.
Als je access denied krijgt kan het zijn dat MFA enabled is of je de rechten niet hebt. Vergeet ook niet PowerShell als admin uit te voeren gezien je set-executionpolicy gebruikt. PowerShell geeft daar echter een melding over dus ga er vanuit dat dat het niet is.
Als je PowerShell code wilt posten kan je [ code=PowerShell]bla bla[/code] gebruiken. Alleen dan de spatie weg tussen [ en code
Interessante suggesties, Nazy en Squ1zZy - ik ga ermee aan de slag en laat mijn bevindingen weten.
Voor Exchange Online MFA PowerShell zie : https://docs.microsoft.co...wershell?view=exchange-ps
Ik heb voor deze doeleinden eigenlijk altijd een app password gebruikt, dat werkt ook (hoewel niet echt secure)punisher007 schreef op vrijdag 21 september 2018 @ 10:19:
Voor Exchange Online MFA PowerShell zie : https://docs.microsoft.co...wershell?view=exchange-ps
Waar ik eerder mijn scriptjes via een tooltje liet draaien op meerdere computers wil ik dit nu vanaf mijn eigen pc doen, dus niet meer afhankelijk zijn van de tool.
Ik had een commando die een itempropery ophaalde uit het register, die heb ik verwerkt in een if om een logfile aan te maken. In de if had ik ook een variable zitten die de hostname ophaalde alleen als ik het commando uitvoer met foreach of invoke-command dan haalt hij mijn computer naam naar voren omdat ik vanaf mijn computer het script uitvoer. Opzich logisch..
Ik wil eigenlijk 1 logfile waar alle computernamen met de register value in een tabel instaan. Nu zat ik al te denken om 2 verschillende itemproperty's op te vragen en die dan te verwerken in 1 out-file regel. Heeft iemand enig idee of dat werkt? Met de ene property de waarde die ik wil weten en de andere property de hostname.
Ik zoek ook nog een handigheidje in het remote powershellen met de computers die uitstaan. Met de tool wordt het script uitgevoerd als de computer aangaat. Hij onthoud als het ware zijn commando tot het mogelijk is om het uit te voeren. Ik wachtte meestal een week met uitlezen van de loggings en had ik een mooi overzicht, nu zou ik het script meerdere keren moeten draaien om alle computers te krijgen. Als iemand hier tips voor heeft hoor ik het graag!
Ik had een commando die een itempropery ophaalde uit het register, die heb ik verwerkt in een if om een logfile aan te maken. In de if had ik ook een variable zitten die de hostname ophaalde alleen als ik het commando uitvoer met foreach of invoke-command dan haalt hij mijn computer naam naar voren omdat ik vanaf mijn computer het script uitvoer. Opzich logisch..
Ik wil eigenlijk 1 logfile waar alle computernamen met de register value in een tabel instaan. Nu zat ik al te denken om 2 verschillende itemproperty's op te vragen en die dan te verwerken in 1 out-file regel. Heeft iemand enig idee of dat werkt? Met de ene property de waarde die ik wil weten en de andere property de hostname.
Ik zoek ook nog een handigheidje in het remote powershellen met de computers die uitstaan. Met de tool wordt het script uitgevoerd als de computer aangaat. Hij onthoud als het ware zijn commando tot het mogelijk is om het uit te voeren. Ik wachtte meestal een week met uitlezen van de loggings en had ik een mooi overzicht, nu zou ik het script meerdere keren moeten draaien om alle computers te krijgen. Als iemand hier tips voor heeft hoor ik het graag!
😲
Ik snap het niet. Je wilt het script toch vanaf je eigen computer draaien? Dan weet je toch welke externe computers je benadert? Waarom wil je de computernaam nog een keer ophalen terwijl je die al kent?mswp schreef op donderdag 21 maart 2019 @ 21:24:
Waar ik eerder mijn scriptjes via een tooltje liet draaien op meerdere computers wil ik dit nu vanaf mijn eigen pc doen, dus niet meer afhankelijk zijn van de tool.
Ik had een commando die een itempropery ophaalde uit het register, die heb ik verwerkt in een if om een logfile aan te maken. In de if had ik ook een variable zitten die de hostname ophaalde alleen als ik het commando uitvoer met foreach of invoke-command dan haalt hij mijn computer naam naar voren omdat ik vanaf mijn computer het script uitvoer. Opzich logisch..
En waarom gebruik je invoke-command? Je kunt de registry gewoon remote uitlezen. https://stackoverflow.com...get-remote-registry-value
Makkelijk zat. Doe zoiets alsIk wil eigenlijk 1 logfile waar alle computernamen met de register value in een tabel instaan. Nu zat ik al te denken om 2 verschillende itemproperty's op te vragen en die dan te verwerken in 1 out-file regel. Heeft iemand enig idee of dat werkt? Met de ene property de waarde die ik wil weten en de andere property de hostname.
code:
1
2
3
4
5
6
| $Array = @() $Array += New-Object -Typename PSObject -Property { ComputerName = $HostName RegistryValue = $ThatValue } $Array | Export-CSV -Path 'C:\Dit.is.een.csv' |
Jij had er toch al een tool voor? Gebruik die dan.Ik zoek ook nog een handigheidje in het remote powershellen met de computers die uitstaan. Met de tool wordt het script uitgevoerd als de computer aangaat. Hij onthoud als het ware zijn commando tot het mogelijk is om het uit te voeren. Ik wachtte meestal een week met uitlezen van de loggings en had ik een mooi overzicht, nu zou ik het script meerdere keren moeten draaien om alle computers te krijgen. Als iemand hier tips voor heeft hoor ik het graag!
Ik zou iets anders doen voor de last login van de computerrolfkunst schreef op woensdag 12 september 2018 @ 11:36:
Beste mede-tweakers,
Ik zit met een probleem. Er is mij gevraagd of ik een lijst kan aanleveren van pc's die nog in het oude domein zitten en wanneer deze voor het laatst gebruikt zijn. En door wie, zodat het zoeken naar de bewuste pc wat makkelijker gaat. (Het cmdb is nog niet op orde)
De eerste 2 stappen zijn relatief eenvoudig:
Op de domaincontroller vul ik het volgende in:
Get-ADComputer -Filter {OperatingSystem -notLike '*SERVER*' } -Properties lastlogondate,operatingsystem | Select name,lastlogondate,operatingsystem | Sort-Object -Property name | export-csv c:\list.csv -notypeinformation
Tot zover geen probleem, maar hoe krijg ik in dat lijstje ook nog de laatst aangemelde gebruiker? Is dat überhaupt bekend in de AD? Lijkt me toch wel..
PowerShell:
1
2
3
| $DaysInactive = 90 $time = (Get-Date).Adddays(-($DaysInactive)) Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -ResultPageSize 2000 -resultSetSize $null -Properties Name, OperatingSystem, SamAccountName, DistinguishedName |
Ik zou hem eerst even draaien zonder export-csv en als je dan een goede output krijgt , dan kun je hem daarna exporteren, en dan kun je in de lijst zelf filteren op client os. Je zult hier trouwens niet de aangemelde gebruiker inzien, alleen naam en het os van het computeraccount.
Als je de gebruiker erbij wil hebben wordt het wat ingewikkelder:
PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # Find DC list from Active Directory $DCs = Get-ADDomainController -Filter * # Define time for report (default is 1 day) $startDate = (get-date).AddDays(-1) # Store successful logon events from security logs with the specified dates and workstation/IP in an array foreach ($DC in $DCs){ $slogonevents = Get-Eventlog -LogName Security -ComputerName $DC.Hostname -after $startDate | where {$_.eventID -eq 4624 }} foreach ($e in $slogonevents){ # Logon Successful Events # Local (Logon Type 2) if (($e.EventID -eq 4624 ) -and ($e.ReplacementStrings[8] -eq 2)){ write-host "Type: Local Logon`tDate: "$e.TimeGenerated "`tStatus: Success`tUser: "$e.ReplacementStrings[5] "`tWorkstation: "$e.ReplacementStrings[11] } # Remote (Logon Type 10) if (($e.EventID -eq 4624 ) -and ($e.ReplacementStrings[8] -eq 10)){ write-host "Type: Remote Logon`tDate: "$e.TimeGenerated "`tStatus: Success`tUser: "$e.ReplacementStrings[5] "`tWorkstation: "$e.ReplacementStrings[11] "`tIP Address: "$e.ReplacementStrings[18] }} |
Hiermee zie je alle login historie in dat hele domein (alle succesvolle logins). Hopelijk worden je event logs op je DC wel lang genoeg bewaard
Hopelijk ben je hiermee geholpen
[ Voor 55% gewijzigd door Turdie op 22-03-2019 00:51 ]
Voor remote registry moet natuurlijk ook de service draaien, de FW open staan, etc. Dus dan kan het makkelijker zijn om invoke-command te gebruiken als hiervoor wel alles in place is.downtime schreef op donderdag 21 maart 2019 @ 23:12:
[...]
Ik snap het niet. Je wilt het script toch vanaf je eigen computer draaien? Dan weet je toch welke externe computers je benadert? Waarom wil je de computernaam nog een keer ophalen terwijl je die al kent?
En waarom gebruik je invoke-command? Je kunt de registry gewoon remote uitlezen. https://stackoverflow.com...get-remote-registry-value
[...]
Makkelijk zat. Doe zoiets als
code:
1 2 3 4 5 6 $Array = @() $Array += New-Object -Typename PSObject -Property { ComputerName = $HostName RegistryValue = $ThatValue } $Array | Export-CSV -Path 'C:\Dit.is.een.csv'
[...]
Jij had er toch al een tool voor? Gebruik die dan.
Ik wil de computernaam ophalen om weg te schrijven in een logfile. Ik heb het nu draaien via invoke-command. Hiermee draait hij dus het scriptje op de betreffende computer. Ik ga morgen testen hoe dit gaat om met 10 computers tegelijk in 1 file te schrijven, ik ben ook wel benieuwd hoe dit gaat met 80 tegelijk. Iemand ervaring mee?downtime schreef op donderdag 21 maart 2019 @ 23:12:
[...]
Ik snap het niet. Je wilt het script toch vanaf je eigen computer draaien? Dan weet je toch welke externe computers je benadert? Waarom wil je de computernaam nog een keer ophalen terwijl je die al kent?
En waarom gebruik je invoke-command? Je kunt de registry gewoon remote uitlezen. https://stackoverflow.com...get-remote-registry-value
[...]
Makkelijk zat. Doe zoiets als
code:
1 2 3 4 5 6 $Array = @() $Array += New-Object -Typename PSObject -Property { ComputerName = $HostName RegistryValue = $ThatValue } $Array | Export-CSV -Path 'C:\Dit.is.een.csv'
[...]
Jij had er toch al een tool voor? Gebruik die dan.
Alles wat ik nieuw ga maken wil ik zonder de tool gaan maken, hoe mooi is het om zometeen niet meer tool afhankelijk te zijn? M'n baas betaald er nu voor en volgens mij moet het ook 'gratis' met PowerShell kunnen?
😲