Je PoSh tool porten naar C# ligt voor de hand vind ik zelf. Hopelijk zijn het geen Java developers bij je.Craven schreef op maandag 07 november 2016 @ 14:18:
Als hij de prototype fase voorbij is (eerder mag ik het toch niet showen) dan gaat PowerShell waarschijnlijk de prullenbak in. Dan gaan we "echt" devven. Als ik bij onze devvers aan kom met powershell zie ik heel veel vieze gezichten.
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.
Nee we hebben echte developersYellowOnline schreef op maandag 07 november 2016 @ 14:47:
[...]
Je PoSh tool porten naar C# ligt voor de hand vind ik zelf. Hopelijk zijn het geen Java developers bij je.
De reden dat ik prototypes in powershell schrijven zo makkelijk vind is dat je overal gewoon even een module kan pakken en snel tegen externe producten aan kan lullen. Zelfde geld voor ff snel een functie van internet af plukken. Zo heb ik binnen no-time een prototype draaien.
Ik heb een Raspberry Pi gekocht om wat te knutselen met Powershell en een breadboard. Daar is bijna niets over te vinden behalve https://github.com/1RedOne/Win10IoTCore - de belangrijkste dll lijkt wel te werken maar de interop niet (waarschijnlijk door de ARM architectuur).
Omdat ik het warm water niet graag opnieuw uitvind: heeft iemand ervaring met PoSh en RPI?
Omdat ik het warm water niet graag opnieuw uitvind: heeft iemand ervaring met PoSh en RPI?
Met Windows 10 IoT bedoel je?YellowOnline schreef op woensdag 30 november 2016 @ 14:52:
Ik heb een Raspberry Pi gekocht om wat te knutselen met Powershell en een breadboard. Daar is bijna niets over te vinden behalve https://github.com/1RedOne/Win10IoTCore - de belangrijkste dll lijkt wel te werken maar de interop niet (waarschijnlijk door de ARM architectuur).
Omdat ik het warm water niet graag opnieuw uitvind: heeft iemand ervaring met PoSh en RPI?
Ik heb hiermee lopen spelen een tijd geleden, echter het ontbreken van Add-Type of [System.Reflection.Assembly] maakte het voor mij eigenlijk redelijk onbruikbaar op het gebied van Powershell (en omdat .NET Core in de huidige setup nog niet werkt in IoT Core)
Ja, met Windows 10 IoT. De basis is uiteindelijk niet bijzonder ingewikkeld: aktiveer een pin of deactiveer een pin. Ik kan wel relatief gemakkelijk aan C# beginnen, maar PoSh moet niet compilen natuurlijk.Killah_Priest schreef op woensdag 30 november 2016 @ 15:46:
[...]
Met Windows 10 IoT bedoel je?
Ik heb hiermee lopen spelen een tijd geleden, echter het ontbreken van Add-Type of [System.Reflection.Assembly] maakte het voor mij eigenlijk redelijk onbruikbaar op het gebied van Powershell (en omdat .NET Core in de huidige setup nog niet werkt in IoT Core)
Ik denk dat het erg lastig gaat worden. Je zou de UWP library kunnen proberen te laden hiervoor. In de klasieke PS (ik heb echt geen zin om momenteel mijn RPI erbij te pakken en aan te sluiten) kun je een UWP namespace zonder add-type laden dmv [CLASS,NAMESPACE,CONTENTTPE] (je moet perse een class opvragen hiervoor, ik noem het daardoor ook "fakeload", weet niet waarom), in het geval van de GPIO namespace is dit dusYellowOnline schreef op woensdag 30 november 2016 @ 17:26:
[...]
Ja, met Windows 10 IoT. De basis is uiteindelijk niet bijzonder ingewikkeld: aktiveer een pin of deactiveer een pin. Ik kan wel relatief gemakkelijk aan C# beginnen, maar PoSh moet niet compilen natuurlijk.
PowerShell:
1
| [Windows.Devices.Gpio.GpioController,Windows.Devices.Gpio,ContentType=WindowsRuntime] |
Daarna kun je de static methods aanroepen en daarmee komt vervolgens weet het volgende probleem : bijna iedere method in UWP is Async en geeft een COM object retour bij het aanroepen van de Async method (de GetDefault() method van de GPIO class is echter niet async en heeft als return type Windows.Devices.Gpio.GpioController).
Vanuit Powershell kun je hier normaal gesproken niets mee doen. Nou heb ik een library (DLL = ik kwam voorbeeldcode tegen hiervoor) gemaakt in C# waarmee je de COM objects die je nav een Async terugkrijgt kunt "awaiten". Dit is een UWP library die in feite ook in Windows 10 IoT zou moeten werken... Ware het niet dat Add-Type ontbreekt (en ook geen Reflection) waardoor ik deze DLL dus niet kan gebruiken in IoT.
Hoezo geen Add-Type? Ik heb net een DLL met Add-Type geladen in W10 IoT!Killah_Priest schreef op woensdag 30 november 2016 @ 19:08:
[...]
Ware het niet dat Add-Type ontbreekt (en ook geen Reflection) waardoor ik deze DLL dus niet kan gebruiken in IoT.

Of heb ik je verkeerd begrepen?
Mijn probleem is dat ik die tweede DLL niet laden kan door - denk ik - een architektuurprobleem. De tweede error is de verkeerde (blijkbaar was de method niet setpin) - als ik de juiste method doe krijg ik net de error dat die Interop ontbreekt.
[ Voor 22% gewijzigd door YellowOnline op 01-12-2016 11:15 ]
Misschien dat Add-Type inmiddels is toegevoegd, laatste IoT build waar ik mee gewerkt heb was 10586. Daarna ben ik maar overgestapt op Arduino's en ESP8266 voor GPIO's, goedkoper, makkelijker met zaken als bv PWM en met de .Net serialport class volledig via powershell aan te sturen, zelfs via bluetooth.
Vraagje, als ik via powershell de printers wil op vragen van een andere computer gebruik ik het volgende commando:
Get-wmiobject -class win32_printer -computername <computernaam>
Ik krijg dan echter alleen de lokaal geinstalleerde printers. Als ik het bij mij zelf doe krijg ik wel alle netwerk printers.
Is dit een rechten dingetje? Ik heb wel ps als admin geopend en ik heb inprincipe ook overal admin rechten. Of licht dit ergens anders aan?
Op internet krijg ik vooral resultaten voor het instellen, maar dat is niet wat ik zoek.
Get-wmiobject -class win32_printer -computername <computernaam>
Ik krijg dan echter alleen de lokaal geinstalleerde printers. Als ik het bij mij zelf doe krijg ik wel alle netwerk printers.
Is dit een rechten dingetje? Ik heb wel ps als admin geopend en ik heb inprincipe ook overal admin rechten. Of licht dit ergens anders aan?
Op internet krijg ik vooral resultaten voor het instellen, maar dat is niet wat ik zoek.
😲
Waarom niet get-printer?mswp schreef op maandag 19 december 2016 @ 20:59:
Vraagje, als ik via powershell de printers wil op vragen van een andere computer gebruik ik het volgende commando:
Get-wmiobject -class win32_printer -computername <computernaam>
Ik krijg dan echter alleen de lokaal geinstalleerde printers. Als ik het bij mij zelf doe krijg ik wel alle netwerk printers.
Is dit een rechten dingetje? Ik heb wel ps als admin geopend en ik heb inprincipe ook overal admin rechten. Of licht dit ergens anders aan?
Op internet krijg ik vooral resultaten voor het instellen, maar dat is niet wat ik zoek.
PoSh Fan? Automation? RMM? blog - op zoek naar een nieuwe job? kijk dan hier.
Ook dan krijg ik alleen de lokale printers
😲
Ik lees nu pas dat je het van een andere computer probeert, stom
Hij gebruikt jouw credentials default om naar de andere computer te verbinden. Gezien netwerkmappings user based zijn zie jij dus alleen de mappings die jij op die computer zou hebben.
PoSh Fan? Automation? RMM? blog - op zoek naar een nieuwe job? kijk dan hier.
Workaround: een pssession opzetten naar die andere machine en vanuit die sessie het commando uitvoeren.
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Ik ben beginnend met Ps, deze optie nog niet bekeken. Ga ik doen, dankjewel!ralpje schreef op maandag 19 december 2016 @ 21:24:
Workaround: een pssession opzetten naar die andere machine en vanuit die sessie het commando uitvoeren.
😲
Werkt dat wel voor printers welke op userniveau gemapped zijn? Als ik een remote PS Sessie opzet dan zit ik normaal gesproken nog steeds in mijn eigen sessie welke los staat van de sessie van de logged on user.ralpje schreef op maandag 19 december 2016 @ 21:24:
Workaround: een pssession opzetten naar die andere machine en vanuit die sessie het commando uitvoeren.
Goed punt, dat kan inderdaad nog wel een issue zijn.
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Eigenlijk is de aanbevolen manier om remote cmdlets uit te voeren Invoke-Command. Sommige cmdlets hebben wel een -computername parameter, maar deze werkt niet altijd naar behoren. En in die gevallen gebruik je Invoke-Command. Uiteraard kun je een remote sessie opstarten zodat je op de 'target' server een interactieve console hebt, maar met Invoke-Command kun je de resultaten terughalen naar je eigen console.mswp schreef op dinsdag 20 december 2016 @ 07:10:
[...]
Ik ben beginnend met Ps, deze optie nog niet bekeken. Ga ik doen, dankjewel!
Hier een voorbeeldje:
C#:
1
| Invoke-Command -ComputerName server01 -ScriptBlock { Get-Printer } |
Het gebrek aan een -Credential (of PSCredential) parameter maakt de -computername parameter bij deze cmdlets redelijk nutteloos waardoor invoke-command noodzakelijk wordt (hoewel ik vaak de voorkeur geef aan Get-WmiObject in die gevallen aangezien een hele zooi van deze cmdlets gewoon wrappers om de WMI classes zijn)rdtechie schreef op vrijdag 30 december 2016 @ 23:32:
[...]
Sommige cmdlets hebben wel een -computername parameter, maar deze werkt niet altijd naar behoren.
WMI is vaak wat te complex voor sommige beheerders. Vandaar dat Invoke-Command wat gemakkelijker is. Ikzelf heb de voorkeur voor de *-CIM* cmdlets, omdat je hiermee via WSMAN naar een machine verbindt en niet via DCOM, alhoewel DCOM als fallback methode gebruikt kan worden. Op alle *-CIM* cmdlets wordt standaard ook de -Credential parameter ondersteund. Door de regel werkt dit ook sneller, omdat je een CIM sessie niet steeds opnieuw hoeft te openen. Invoke-Command doet dat wel.Killah_Priest schreef op zaterdag 31 december 2016 @ 10:47:
[...]
Het gebrek aan een -Credential (of PSCredential) parameter maakt de -computername parameter bij deze cmdlets redelijk nutteloos waardoor invoke-command noodzakelijk wordt (hoewel ik vaak de voorkeur geef aan Get-WmiObject in die gevallen aangezien een hele zooi van deze cmdlets gewoon wrappers om de WMI classes zijn)
Aankomende zondag ga ik met Powershell i.c.m. de Exchange EWS managed API ong +6000 afspraken importeren in Exchange.
Het script wat ik gemaakt heb plaatst de betreffende afspraak in de agenda van de medewerker en nodigt automatisch de room mailbox uit.
Als voorbereiding heb ik ong. 90 kamer mailboxen aangemaakt met automatische calendar processing
Het maken van het script was een erg leerzaam proces vooral doordat ik gebruik moet maken van de EWS Managed API.
Referenties die ik gebruikt heb:
https://msdn.microsoft.co...dd633696(v=exchg.80).aspx
Hopelijk gaat zondag alles goed
Het script wat ik gemaakt heb plaatst de betreffende afspraak in de agenda van de medewerker en nodigt automatisch de room mailbox uit.
Als voorbereiding heb ik ong. 90 kamer mailboxen aangemaakt met automatische calendar processing
Het maken van het script was een erg leerzaam proces vooral doordat ik gebruik moet maken van de EWS Managed API.
Referenties die ik gebruikt heb:
https://msdn.microsoft.co...dd633696(v=exchg.80).aspx
Hopelijk gaat zondag alles goed
Ga je hem handmatig aftrappen of vanuit een scheduled task oid?Ewoudb schreef op donderdag 5 januari 2017 @ 20:34:
Aankomende zondag ga ik met Powershell i.c.m. de Exchange EWS managed API ong +6000 afspraken importeren in Exchange.
Het script wat ik gemaakt heb plaatst de betreffende afspraak in de agenda van de medewerker en nodigt automatisch de room mailbox uit.
Als voorbereiding heb ik ong. 90 kamer mailboxen aangemaakt met automatische calendar processing
Het maken van het script was een erg leerzaam proces vooral doordat ik gebruik moet maken van de EWS Managed API.
Referenties die ik gebruikt heb:
MSDN: Working with the EWS Managed API 2.0
Hopelijk gaat zondag alles goed
EWS is altijd leuk om mee te spelen, vorige week heb ik nog een script gemaakt om een On-Prem public folder te kopiëren naar een Office365 shared mailbox : hij leest de on-prem folder uit en maakt daarna dezelfde folder structuur aan op de "target" shared mailbox en kopieert vervolgens de items naar deze folders.Ewoudb schreef op donderdag 5 januari 2017 @ 20:34:
Aankomende zondag ga ik met Powershell i.c.m. de Exchange EWS managed API ong +6000 afspraken importeren in Exchange.
Het script wat ik gemaakt heb plaatst de betreffende afspraak in de agenda van de medewerker en nodigt automatisch de room mailbox uit.
Als voorbereiding heb ik ong. 90 kamer mailboxen aangemaakt met automatische calendar processing
Het maken van het script was een erg leerzaam proces vooral doordat ik gebruik moet maken van de EWS Managed API.
Referenties die ik gebruikt heb:
MSDN: Working with the EWS Managed API 2.0
Hopelijk gaat zondag alles goed
Subscriben op events in EWS is ook leuk om mee te spelen zodat je een mail bv automatisch processed zodra deze binnenkomt (hoewel ik voor zulke "persistent" zaken meestal maar een echte Windows Service schrijf in C#)
Handmatig, gezien ik wil controleren of alles goed gaat.Craven schreef op vrijdag 6 januari 2017 @ 07:37:
[...]
Ga je hem handmatig aftrappen of vanuit een scheduled task oid?
Ik zou hem lekker laten transcripten. Maar als je het toch handmatig doet let wel op dat je eerst powershell opent en dan het script start. Geen context menu & run with powershell.Ewoudb schreef op vrijdag 6 januari 2017 @ 13:01:
[...]
Handmatig, gezien ik wil controleren of alles goed gaat.
Zal niet de eerste keer zijn dat iemand logging kwijt is die alleen naar scherm gaat
Cool! Wil je je script delen met ons?Ewoudb schreef op donderdag 5 januari 2017 @ 20:34:
Aankomende zondag ga ik met Powershell i.c.m. de Exchange EWS managed API ong +6000 afspraken importeren in Exchange.
Het script wat ik gemaakt heb plaatst de betreffende afspraak in de agenda van de medewerker en nodigt automatisch de room mailbox uit.
Als voorbereiding heb ik ong. 90 kamer mailboxen aangemaakt met automatische calendar processing
Het maken van het script was een erg leerzaam proces vooral doordat ik gebruik moet maken van de EWS Managed API.
Referenties die ik gebruikt heb:
MSDN: Working with the EWS Managed API 2.0
Hopelijk gaat zondag alles goed
De acties worden allemaal weggeschreven in een logfile, daar heb ik aan gedachtCraven schreef op vrijdag 6 januari 2017 @ 13:12:
[...]
Ik zou hem lekker laten transcripten. Maar als je het toch handmatig doet let wel op dat je eerst powershell opent en dan het script start. Geen context menu & run with powershell.
Zal niet de eerste keer zijn dat iemand logging kwijt is die alleen naar scherm gaat
De acties, maar wat doe je met de output van de acties?
Ik loop tegenwoordig (eigenlijk sinds versie 5.1 van Powershell merk ik dit) regelmatig tegen het probleem aan dat de TAB autocomplete voor .NET classes niet werkt na het gebruik van Add-Type of Reflection.
Bij de ingebouwde .NET Namespaces werkt dit correct ; als ik echter bv een 3rd party (vaak gewoon door Microsoft aangeleverde) libraries gebruik dan stopt de TAB autocomplete compleet voor alle .NET Classes.
Net bv de DLL van Graph ingeladen via Add-Type waarna geen enkele autocomplete actie meer werkt voor .NET classes (bv simpele classes als System.Console autocompleten niet meer). Bij andere libraries heb ik dit ook, maar bv bij EWS doet dit probleem zich niet voor. Het lijkt wel random. Het kan natuurlijk een probleem zijn met deze assemblies (hoewel deze in Visual Studio wel gewoon werken), echter lijkt het mij weer onzin dat de gehele autocomplete meteen moet falen (waarna ik gedwongen ben om de betreffende instance van PS te sluiten)
Als ik bv een 2012R2 server erbij pak dan werkt dit wel gewoon. Hebben anderen hier ook last van?
Probleem doet zich voor zowel in de reguliere Console als in ISE.
Bij de ingebouwde .NET Namespaces werkt dit correct ; als ik echter bv een 3rd party (vaak gewoon door Microsoft aangeleverde) libraries gebruik dan stopt de TAB autocomplete compleet voor alle .NET Classes.
Net bv de DLL van Graph ingeladen via Add-Type waarna geen enkele autocomplete actie meer werkt voor .NET classes (bv simpele classes als System.Console autocompleten niet meer). Bij andere libraries heb ik dit ook, maar bv bij EWS doet dit probleem zich niet voor. Het lijkt wel random. Het kan natuurlijk een probleem zijn met deze assemblies (hoewel deze in Visual Studio wel gewoon werken), echter lijkt het mij weer onzin dat de gehele autocomplete meteen moet falen (waarna ik gedwongen ben om de betreffende instance van PS te sluiten)
Als ik bv een 2012R2 server erbij pak dan werkt dit wel gewoon. Hebben anderen hier ook last van?
Probleem doet zich voor zowel in de reguliere Console als in ISE.
[ Voor 22% gewijzigd door Killah_Priest op 10-01-2017 15:03 ]
Nog even een status update, actie is afgelopen zondag goed gelukt.
Helaas wel een fout in het aanleverbestand waardoor ik grofweg 3500 appointments weer moest cancelen
Gelukkig had ik de itemid verzameld bij het aanmaken en kon ik met een vrij simpel commando de appointment cancelen.
Helaas wel een fout in het aanleverbestand waardoor ik grofweg 3500 appointments weer moest cancelen
Gelukkig had ik de itemid verzameld bij het aanmaken en kon ik met een vrij simpel commando de appointment cancelen.
PowerShell:
1
2
3
| $service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $email); $appointment = [Microsoft.Exchange.WebServices.Data.Appointment]::Bind($service,$itemid) [void]$appointment.CancelMeeting() |
[ Voor 36% gewijzigd door Ewoudb op 10-01-2017 19:12 ]
Na wat gegoogle en wat gepruts toch maar eens aan de experts vragen.
Mijn expertise met powershell is nog niet mega groot en waarschijnlijk Google ik op de verkeerde dingen..
ik heb een een tweetal WSUS server waar een scriptje op draait die de cleanup doet. Als dit klaar is stuurt deze een mooi mailtje
Tot zover tevreden!
Echter stuurt hij altijd het mailtje.. ook als er een error is. Er staat immers in het script dat hij een mail moet verzenden. Wat ik niet voor elkaar krijg is het afhankelijk maken van het resultaat van het commando.
Als het commando gelukt ik send A als het een error heeft send B. Iemand hier die mij een duw in de goede richting wil geven.
Mijn expertise met powershell is nog niet mega groot en waarschijnlijk Google ik op de verkeerde dingen..
ik heb een een tweetal WSUS server waar een scriptje op draait die de cleanup doet. Als dit klaar is stuurt deze een mooi mailtje
Echter stuurt hij altijd het mailtje.. ook als er een error is. Er staat immers in het script dat hij een mail moet verzenden. Wat ik niet voor elkaar krijg is het afhankelijk maken van het resultaat van het commando.
Als het commando gelukt ik send A als het een error heeft send B. Iemand hier die mij een duw in de goede richting wil geven.
Cloud ☁️
Google eens op try en catch. Je kunt dit binnen een if statement gebruiken in plaats van then en else.
Binnen de try voer je de cleanup uit met mailtje dat het gelukt is, en binnen de catch een mailtje dat het niet gelukt is.
Binnen de try voer je de cleanup uit met mailtje dat het gelukt is, en binnen de catch een mailtje dat het niet gelukt is.
[ Voor 38% gewijzigd door maussert op 07-02-2017 20:52 ]
Post het script eens.Downloader_NL schreef op dinsdag 7 februari 2017 @ 20:44:
Na wat gegoogle en wat gepruts toch maar eens aan de experts vragen.
Mijn expertise met powershell is nog niet mega groot en waarschijnlijk Google ik op de verkeerde dingen..
ik heb een een tweetal WSUS server waar een scriptje op draait die de cleanup doet. Als dit klaar is stuurt deze een mooi mailtjeTot zover tevreden!
Echter stuurt hij altijd het mailtje.. ook als er een error is. Er staat immers in het script dat hij een mail moet verzenden. Wat ik niet voor elkaar krijg is het afhankelijk maken van het resultaat van het commando.
Als het commando gelukt ik send A als het een error heeft send B. Iemand hier die mij een duw in de goede richting wil geven.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")` | out-null $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer(); $cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope; $cleanupScope.DeclineSupersededUpdates = $true $cleanupScope.DeclineExpiredUpdates = $true $cleanupScope.CleanupObsoleteUpdates = $true $cleanupScope.CompressUpdates = $true #$cleanupScope.CleanupObsoleteComputers = $true $cleanupScope.CleanupUnneededContentFiles = $true $cleanupManager = $wsus.GetCleanupManager(); $cleanupManager.PerformCleanup($cleanupScope); Send-MailMessage -To <downloadernl@mail.nl>" -From Reports Admin <Reportadmin@mail.nl>" -SMTPServer smtp1.mail.com -Subject Daily report” -Body “This is a daily report of server uptime” |
Items in send mail command zijn niet mijn mail adres en smtp server.
Hij is mega simpel hij voert het uit en send Dan een email.
Cloud ☁️
Wat dacht je van zoiets? Even snel iets gebouwd op mijn MacBook, dus niet kunnen testenDownloader_NL schreef op dinsdag 7 februari 2017 @ 21:09:
[...]
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")` | out-null $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer(); $cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope; $cleanupScope.DeclineSupersededUpdates = $true $cleanupScope.DeclineExpiredUpdates = $true $cleanupScope.CleanupObsoleteUpdates = $true $cleanupScope.CompressUpdates = $true #$cleanupScope.CleanupObsoleteComputers = $true $cleanupScope.CleanupUnneededContentFiles = $true $cleanupManager = $wsus.GetCleanupManager(); $cleanupManager.PerformCleanup($cleanupScope); Send-MailMessage -To <downloadernl@mail.nl>" -From Reports Admin <Reportadmin@mail.nl>" -SMTPServer smtp1.mail.com -Subject Daily report” -Body “This is a daily report of server uptime”
Items in send mail command zijn niet mijn mail adres en smtp server.
Hij is mega simpel hij voert het uit en send Dan een email.
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
| <# .SYNOPSIS This script will ... .DESCRIPTION This script will ... .PARAMETER None .INPUTS None .OUTPUTS Log file stored in C:\Windows\Temp\ .NOTES Version: 0.1 Author: Downloader_NL Creation Date: 02/07/2017 Purpose/Change: v0.1 - Initial script development .EXAMPLE .\Downloader_NL WSUS Script v0.1.ps1 #> #------------------------------------------[Initialisations]--------------------------------------- # Set Error Action to Silently Continue # $ErrorActionPreference = "SilentlyContinue" #-------------------------------------------[Declarations]----------------------------------------- # Script Name and Version $scriptName = "Downloader_NL WSUS Script" $scriptVersion = "0.1" # Log File Info $date = Get-Date -format MM-dd-yyyy.HH_mm_ss $logPath = "C:\Windows\Temp" $logName = "$scriptName.$date.log" $logFile = Join-Path -Path $logPath -ChildPath $logName # Variables that can be set if needed $to = "<downloadernl@mail.nl>" $from = "Reports Admin <Reportadmin@mail.nl>" $smtpServer = "smtp1.mail.com" $subject = "Daily report" $subjectIncorrect = "Daily report error" $body = "This is a daily report of server uptime" # Contstants that can be set if needed #--------------------------------------------[Functions]------------------------------------------- Function DNL-loadAssemblies { Param() Begin { Add-Content $logFile "Loading assemblies..." } Process { Try { [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null Write-Host "Pass - Loading assemblies finished" -ForegroundColor Green } Catch { Write-Host "Failed - Loading assemblies" -ForegroundColor Red Add-Content $logFile $_.Exception } } End { If($?) { Add-Content $logFile "Loading assemblies completed successfully..." Add-Content $logFile " " } } } Function DNL-setWsus { Param() Begin { Add-Content $logFile "Setting WSUS..." } Process { Try { $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer() $cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope $cleanupScope.DeclineSupersededUpdates = $true $cleanupScope.DeclineExpiredUpdates = $true $cleanupScope.CleanupObsoleteUpdates = $true $cleanupScope.CompressUpdates = $true $cleanupScope.CleanupUnneededContentFiles = $true $cleanupManager = $wsus.GetCleanupManager() $cleanupManager.PerformCleanup($cleanupScope) Write-Host "Pass - Setting WSUS finished" -ForegroundColor Green } Catch { Write-Host "Failed - Setting WSUS" -ForegroundColor Red Send-MailMessage -To $to -From $from -SMTPServer $smtpServer -Subject $subjectIncorrect -Body $body Add-Content $logFile $_.Exception Exit } } End { If($?) { Add-Content $logFile "Setting WSUS completed successfully..." Add-Content $logFile " " } } } Function DNL-sendEmail { Param() Begin { Add-Content $logFile "Sending email..." } Process { Try { Send-MailMessage -To $to -From $from -SMTPServer $smtpServer -Subject $subject -Body $body Write-Host "Pass - Sending email finished" -ForegroundColor Green } Catch { Write-Host "Failed - Sending email" -ForegroundColor Red Add-Content $logFile $_.Exception Exit } } End { If($?) { Add-Content $logFile "Sending email completed successfully..." Add-Content $logFile " " } } } #--------------------------------------------[Execution]------------------------------------------- Add-Content $logFile "$scriptName version $scriptVersion started at $(Get-Date)" Add-Content $logFile " " DNL-loadAssemblies DNL-setWsus DNL-sendEmail Add-Content $logFile "$scriptName version $scriptVersion ended at $(Get-Date)" |
De variables moeten netter, maar het is een opzetje
[ Voor 4% gewijzigd door Squ1zZy op 08-02-2017 11:11 ]
HeldSqu1zZy schreef op dinsdag 7 februari 2017 @ 21:28:
[...]
Wat dacht je van zoiets? Even snel iets gebouwd op mijn MacBook, dus niet kunnen testen
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 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 <# .SYNOPSIS This script will ... .DESCRIPTION This script will ... .PARAMETER None .INPUTS None .OUTPUTS Log file stored in C:\Windows\Temp\ .NOTES Version: 0.1 Author: Downloader_NL Creation Date: 02/07/2017 Purpose/Change: v0.1 - Initial script development .EXAMPLE .\Downloader_NL WSUS Script v0.1.ps1 #> #------------------------------------------[Initialisations]--------------------------------------- # Set Error Action to Silently Continue # $ErrorActionPreference = "SilentlyContinue" #-------------------------------------------[Declarations]----------------------------------------- # Script Name and Version $scriptName = "Downloader_NL WSUS Script" $scriptVersion = "0.1" # Log File Info $date = Get-Date -format MM-dd-yyyy.HH_mm_ss $logPath = "C:\Windows\Temp" $logName = "$scriptName.$date.log" $logFile = Join-Path -Path $logPath -ChildPath $logName # Variables that can be set if needed # Contstants that can be set if needed #--------------------------------------------[Functions]------------------------------------------- Function DNL-loadAssemblies { Param() Begin { Add-Content $logFile "Loading assemblies..." } Process { Try { [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null Write-Host "Pass - Loading assemblies finished" -ForegroundColor Green } Catch { Write-Host "Failed - Loading assemblies" -ForegroundColor Red Add-Content $logFile $_.Exception Exit } } End { If($?) { Add-Content $logFile "Loading assemblies completed successfully..." Add-Content $logFile " " } } } Function DNL-setWsus { Param() Begin { Add-Content $logFile "Setting WSUS..." } Process { Try { $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer(); $cleanupScope = new-object Microsoft.UpdateServices.Administration.CleanupScope; $cleanupScope.DeclineSupersededUpdates = $true $cleanupScope.DeclineExpiredUpdates = $true $cleanupScope.CleanupObsoleteUpdates = $true $cleanupScope.CompressUpdates = $true $cleanupScope.CleanupUnneededContentFiles = $true $cleanupManager = $wsus.GetCleanupManager(); $cleanupManager.PerformCleanup($cleanupScope); Write-Host "Pass - Setting WSUS finished" -ForegroundColor Green } Catch { Write-Host "Failed - Setting WSUS" -ForegroundColor Red Add-Content $logFile $_.Exception Exit } } End { If($?) { Add-Content $logFile "Setting WSUS completed successfully..." Add-Content $logFile " " } } } Function DNL-sendEmail { Param() Begin { Add-Content $logFile "Sending email..." } Process { Try { Send-MailMessage -To "<downloadernl@mail.nl>" -From Reports Admin "<Reportadmin@mail.nl>" -SMTPServer smtp1.mail.com -Subject "Daily report" -Body "This is a daily report of server uptime" Write-Host "Pass - Sending email finished" -ForegroundColor Green } Catch { Write-Host "Failed - Sending email" -ForegroundColor Red Add-Content $logFile $_.Exception Exit } } End { If($?) { Add-Content $logFile "Sending email completed successfully..." Add-Content $logFile " " } } } #--------------------------------------------[Execution]------------------------------------------- Add-Content $logFile "$scriptName version $scriptVersion started at $(Get-Date)" Add-Content $logFile " " DNL-loadAssemblies DNL-setWsus DNL-sendEmail Add-Content $logFile "$scriptName version $scriptVersion ended at $(Get-Date)"
De variables moeten netter, maar het is een opzetje
Cloud ☁️
Het is maar een opzetjeDownloader_NL schreef op dinsdag 7 februari 2017 @ 21:33:
[...]
Heldlijkt mijn (script) nergens op haha. Ga het morgen eens uitpluizen en testen
Ik zou altijd een template gebruiken als ik jou was. Al is het script maar 1 regel.
Als er vragen zijn kan je me ook DM-en. Ik reageer meestel vrij vlot.
TopperSqu1zZy schreef op dinsdag 7 februari 2017 @ 21:38:
[...]
Het is maar een opzetje
Ik zou altijd een template gebruiken als ik jou was. Al is het script maar 1 regel.
Als er vragen zijn kan je me ook DM-en. Ik reageer meestel vrij vlot.
Cloud ☁️
Voor de liefhebber: er komt weer een meeting van de Dutch Powershell User Group (DuPSUG). Info en tickets (gratiesch!) via www.dupsug.com.
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Voor wat betreft error handling, controleer ook of eventuele fouten resulteren in zogenaamde "terminating errors", anders functioneert de try, catch, finally niet. Zie bijvoorbeeld ook: MSDN: An Introduction to Error Handling in PowerShell – Keith Babinec&#...
Je zou eventueel nog de globale variabele $ErrorActionPreference=stop als workaround kunnen gebruiken, maar vergeet deze dan achteraf niet weer terug te zetten op de oorspronkelijke/gewenste waarde omdat het anders ook mogelijk op plekken toegepast waar het niet wenselijk is.
Je zou eventueel nog de globale variabele $ErrorActionPreference=stop als workaround kunnen gebruiken, maar vergeet deze dan achteraf niet weer terug te zetten op de oorspronkelijke/gewenste waarde omdat het anders ook mogelijk op plekken toegepast waar het niet wenselijk is.
Idem hier. Het lijkt er op dat ik nu Python moet gaan leren, maar waarom niet gewoon een PS module waarmee je rechtstreeks de IO pinnen kunt gebruiken?YellowOnline schreef op woensdag 30 november 2016 @ 14:52:
Ik heb een Raspberry Pi gekocht om wat te knutselen met Powershell en een breadboard. Daar is bijna niets over te vinden behalve https://github.com/1RedOne/Win10IoTCore - de belangrijkste dll lijkt wel te werken maar de interop niet (waarschijnlijk door de ARM architectuur).
Omdat ik het warm water niet graag opnieuw uitvind: heeft iemand ervaring met PoSh en RPI?
Misschien moeten we ruilen zodat ik enkele uren aan een PoSh-script voor jou spendeer en jij enkele uren aan mijn Exchange-from-hell-omgevingJazzy schreef op woensdag 8 februari 2017 @ 16:53:
[...]
Idem hier. Het lijkt er op dat ik nu Python moet gaan leren, maar waarom niet gewoon een PS module waarmee je rechtstreeks de IO pinnen kunt gebruiken?
Serieus: ik heb te weinig tijd tot nu toe en heb sowieso besloten mij eerst wat meer toe te leggen op de electriciteit zelf, waardoor mijn weinige vrije tijd verschoven is naar prutsen met een breadboard en de RP zelf eigenlijk in een hoekje stof ligt te vergaren.
Ik ben zelf uit frustratie mbt de Pi en Windows 10 IoT (waarbij het mijn intentie was om vooral lekker met powershell te kunnen kutten ermee) uiteindelijk maar een zooi Arduino's en ESP8266 controllers gekocht (en dan gebruik ik de Serialport class uit .net om deze weer via powershell aan te sturen)YellowOnline schreef op woensdag 8 februari 2017 @ 17:04:
[...]
Misschien moeten we ruilen zodat ik enkele uren aan een PoSh-script voor jou spendeer en jij enkele uren aan mijn Exhcange-from-hell-omgeving![]()
Serieus: ik heb te weinig tijd tot nu toe en heb sowieso besloten mij eerst wat meer toe te leggen op de electriciteit zelf, waardoor mijn weinige vrije tijd verschoven is naar prutsen met een breadboard en de RP zelf eigenlijk in een hoekje stof ligt te vergaren.
Kun je een voorbeeldje geven van hoe dat er in PS dan uit zou zien?
Ik zal vanavond wel even in mijn archief duiken hiervoor. Het vereist wel wat code werk op bv een Arduino om specifieke commando's als input te laten accepteren (neem bv een 16x2 LCD scherm op een arduino : ik schrijf op de arduino de code om via de serial port een string of byte array te accepteren als input, daarna gebruik ik Powershell om via de Serialport class deze data te sturen. Met Firmata op een Arduino was het ook makkelijk om adv de documentatie de juiste payload te creëren welke je via de serialport kunt sturen)
Ik ben ook wel benieuwd naar deze code, zowel de PoSH kant als de Arduino kant. Zou cool zijn om een schermpje te maken die via PoSH wat info kan tonen over m'n hostKillah_Priest schreef op donderdag 9 februari 2017 @ 08:00:
Ik zal vanavond wel even in mijn archief duiken hiervoor. Het vereist wel wat code werk op bv een Arduino om specifieke commando's als input te laten accepteren (neem bv een 16x2 LCD scherm op een arduino : ik schrijf op de arduino de code om via de serial port een string of byte array te accepteren als input, daarna gebruik ik Powershell om via de Serialport class deze data te sturen. Met Firmata op een Arduino was het ook makkelijk om adv de documentatie de juiste payload te creëren welke je via de serialport kunt sturen)
Hier alvast de Powershell kant van de code (dit is wel van ruim een jaar geleden, ik heb geprobeerd de code zoveel mogelijk nog even snel van comments te voorzien maar het was echt broddelwerk).
Arduino code moet ik even opzoeken, ik deed niet echt aan source control voor dit soort experimenten
Arduino code ook gevonden (het was de standaard Arduino SerialDisplay code met een paar kleine aanpassingen waarbij ik uiteraard niet echt gecomment heb waarvoor het diende en ik het inmiddels vergeten ben)
De pins die ik gebruikte voor het display hebben te maken met het Cheap China LCD scherm met afwijkende pin layout.
De firmata code heb ik ook nog wel ergens, maar daar moet ik echt goed naar zoeken (ik gebruikte een Neopixel LED strip op de Arduino met een Firmata met een aanpassing voor de Neopixels, via Powershell kon ik vervolgens weer kiezen welke LED op de strip een bepaalde kleur kreeg).
Arduino code moet ik even opzoeken, ik deed niet echt aan source control voor dit soort experimenten
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
| Function Out-LCD { [CmdletBinding()] Param ( [Parameter( Position=0, Mandatory=$true, ValueFromPipeline=$true)] [string]$LCDText, # Tekst die je op het scherm wilt tonen [Parameter( Position=1, Mandatory=$false, ValueFromPipeline=$false)] [string]$PortName # Com port naam ) Begin { if ([string]::IsNullOrEmpty($PortName)) # als er geen COM port gespecificeerd is.... { $PortName = [System.IO.Ports.SerialPort]::GetPortNames()[0] # ....pak de eerste COM port uit GetPortNames } Write-Verbose -Message "[System.IO.Ports.SerialPort]::new($PortName,9600,""None"",8,""one"")" $Port = [System.IO.Ports.SerialPort]::new($PortName,9600,"None",8,"one") # maak een serialport object Try { Write-Verbose -Message "Trying to open the port" $Port.Open() # Open de poort } Catch [System.UnauthorizedAccessException] { Throw [System.Exception]::new("Error : Port $PortName is in use") } } Process { Write-Verbose "`$Port.Write($LCDText)" $Port.Write($LCDText) # stuur de tekst naar de poort } End { # code om netjes de poort te sluiten if ($Port.IsOpen) {$Port.Close()} $Port.Dispose() } } |
Arduino code ook gevonden (het was de standaard Arduino SerialDisplay code met een paar kleine aanpassingen waarbij ik uiteraard niet echt gecomment heb waarvoor het diende en ik het inmiddels vergeten ben)
C:
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
| // Based on the LCD code : http://www.arduino.cc/en/Tutorial/LiquidCrystalSerial // include the library code: #include <LiquidCrystal.h> char inKey; // Character received from Serial input uint8_t Cursor = 0; // Position of cursor, 0 is top left, (rows*columns)-1 is bottom right uint8_t rows = 2; // Number rows, will be either 2 or 4 uint8_t columns = 16; // Number of columns, will be 16 or 20 uint8_t characters; // rows * columns // initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup(){ // set up the LCD's number of columns and rows: lcd.begin(16, 2); // initialize the serial communications: Serial.begin(9600); } void loop() { // when characters arrive over the serial port... if (Serial.available()) { // wait a bit for the entire message to arrive delay(100); // clear the screen lcd.clear(); Cursor = 0; // read all the available characters while (Serial.available() > 0) { // display each character to the LCD inKey = Serial.read(); LCDDisplay(inKey); } } } void LCDDisplay(char character) { int currentRow = 0; characters = rows * columns; // If Cursor is beyond screen size, get it right while (Cursor >= characters) Cursor -= characters; while (Cursor < 0) Cursor += characters; if (Cursor >= columns) currentRow = Cursor/columns; lcd.setCursor(Cursor%columns, currentRow); lcd.write(character); Cursor++; } |
De pins die ik gebruikte voor het display hebben te maken met het Cheap China LCD scherm met afwijkende pin layout.
De firmata code heb ik ook nog wel ergens, maar daar moet ik echt goed naar zoeken (ik gebruikte een Neopixel LED strip op de Arduino met een Firmata met een aanpassing voor de Neopixels, via Powershell kon ik vervolgens weer kiezen welke LED op de strip een bepaalde kleur kreeg).
[ Voor 38% gewijzigd door Killah_Priest op 09-02-2017 20:37 ]
Ik ben bezig met een script, maar ik kom er niet uit hoe ik een gedeelte hiervan kan opzetten.
Ik heb een import script (CSV) waar ik gebruikers in Active Directory mee aanmaak.
Deze gebruikers zet ik in groepen op basis van de input uit de CSV. Dus er zijn bijvoorbeeld 3 groepen in AD.
Groep A
Groep B
Groep C
Als in de CSV UserA lid moet worden van Groep A en Groep C, geen probleem, daar gebruik ik de Add-AdGroupMember voor.
Echter nu wil ik dat als de gebruiker lid is van Groep A maar in de CSV staat dat hij lid moet worden van Groep B en C, Groep A staat niet meer in de CSV, dat hij deze gebruiker uit Groep A verwijdert.
Ik kom er niet helemaal uit hoe ik dit goed kan doen. Is er iemand die me in de juiste richting kan wijzen?
Ik heb een import script (CSV) waar ik gebruikers in Active Directory mee aanmaak.
Deze gebruikers zet ik in groepen op basis van de input uit de CSV. Dus er zijn bijvoorbeeld 3 groepen in AD.
Groep A
Groep B
Groep C
Als in de CSV UserA lid moet worden van Groep A en Groep C, geen probleem, daar gebruik ik de Add-AdGroupMember voor.
Echter nu wil ik dat als de gebruiker lid is van Groep A maar in de CSV staat dat hij lid moet worden van Groep B en C, Groep A staat niet meer in de CSV, dat hij deze gebruiker uit Groep A verwijdert.
Ik kom er niet helemaal uit hoe ik dit goed kan doen. Is er iemand die me in de juiste richting kan wijzen?
Je maakt dus niet alleen nieuwe users aan, maar past ook bestaande users aan op basis van informatie in een csv?
Dan zou ik gewoon beginnen met het verwijderen van alle groepen op het userobject, hoef je daarna alleen nog maar groepen toe te voegen.
Dan zou ik gewoon beginnen met het verwijderen van alle groepen op het userobject, hoef je daarna alleen nog maar groepen toe te voegen.
MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B
Idem. Ik heb vorige week een script geschreven waarbij distribution groups gevuld worden met de populatie van bepaalde OUs. Daar zat een intelligent systeem met compare-object achter, maar uiteindelijk heb ik dan ook besloten om eenvoudigweg alle gebruikers uit de groep te gooien en ze er dan allemaal opnieuw in te steken. Sneller, minder code en exacte resultaat.Question Mark schreef op vrijdag 3 maart 2017 @ 12:29:
Je maakt dus niet alleen nieuwe users aan, maar past ook bestaande users aan op basis van informatie in een csv?
Dan zou ik gewoon beginnen met het verwijderen van alle groepen op het userobject, hoef je daarna alleen nog maar groepen toe te voegen.
Klopt.Question Mark schreef op vrijdag 3 maart 2017 @ 12:29:
Je maakt dus niet alleen nieuwe users aan, maar past ook bestaande users aan op basis van informatie in een csv?
Uitdaging is dat er nog andere groepen zijn die eigenlijk niet weg moeten. Kan deze ook opnieuw toevoegen, maar was benieuwd of er niet nog een andere oplossing was. Ik zat zelf te denken om een soort vergelijking te maken tussen welke groepen in AD bestaan, welke er in de CSV staan en de degene die niet 2x voorkomen te verwijderen. Maar dat is makkelijker gezegd dan gedaan momenteel.Dan zou ik gewoon beginnen met het verwijderen van alle groepen op het userobject, hoef je daarna alleen nog maar groepen toe te voegen.
Dan gooi je standaard de drie groepen weg waar het om gaat, in plaats van alle groepen.MADG0BLIN schreef op vrijdag 3 maart 2017 @ 13:10:
[...]
Uitdaging is dat er nog andere groepen zijn die eigenlijk niet weg moeten.
MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B
Het is erg simpel hoor.MADG0BLIN schreef op vrijdag 3 maart 2017 @ 13:10:
[...]
Klopt.
[...]
Uitdaging is dat er nog andere groepen zijn die eigenlijk niet weg moeten. Kan deze ook opnieuw toevoegen, maar was benieuwd of er niet nog een andere oplossing was. Ik zat zelf te denken om een soort vergelijking te maken tussen welke groepen in AD bestaan, welke er in de CSV staan en de degene die niet 2x voorkomen te verwijderen. Maar dat is makkelijker gezegd dan gedaan momenteel.
PowerShell:
1
2
3
4
5
6
7
8
9
10
| $UserGroups = 'groepA','groepB','groepC','groepD' $CSVGroups = 'groepA','groepC' foreach ($Group in $UserGroups) { if ($CSVGroups -notcontains $Group) { Write-Host "Removing $Group from user since it's not listed in the CSV" } } |
Resultaat :
Dit is een simpel voorbeeld waarbij je precies bereikt wat jij wilt hebben (je hebt de huidige groepen van de user in een array staan, deze vergelijk je dmv de NotContains operator in een foreach loop).Removing groepB from user since it's not listed in the CSV
Removing groepD from user since it's not listed in the CSV
Dit is zeg maar de logica achter hetgeen wat jij wilt doen. Op deze manier hoef je dus niet alle groepen te verwijderen maar alleen degenen die niet in jouw CSV staan
[ Voor 13% gewijzigd door Killah_Priest op 03-03-2017 13:49 ]
Zijn er hier al mensen die met CouchDB en Puppet werken, wij gebruiken het ook, maar ik heb er zelf nog niet mee gewerkt. Ben benieuwd of er goede online tutorials zijn over Puppet en CouchDB en PowerShell/Windows
Weet iemand of er een mogelijkheid is in de Windows task bar een Powershell prompt te krijgen? Zoeken hiernaar wordt nogal vervuild door resultaten van mensen die om onverklaarbare reden problemen hebben om een PoSh-icoon in hun task bar te pinnen
Ik wil de prompt zelf in de taskbar, zoals een Cortana search bar. Reden: af en toe blijven games hangen en alles dat ik open, behalve de taskbar zelf, zit dan verstop achter het gecrashte spel. Dan wil ik snel iets doen zoals "Get-Process civ* | Stop-Process" (in t geval van Civilization VI). Nu doe ik dat blind (ik zie immers het venster zelf niet waarin ik typ), maar iets meer visuele feedback zou handig zijn natuurlijk.
Heb je al wel is naar PromptPal gekeken:YellowOnline schreef op woensdag 19 april 2017 @ 17:33:
Weet iemand of er een mogelijkheid is in de Windows task bar een Powershell prompt te krijgen? Zoeken hiernaar wordt nogal vervuild door resultaten van mensen die om onverklaarbare reden problemen hebben om een PoSh-icoon in hun task bar te pinnenIk wil de prompt zelf in de taskbar, zoals een Cortana search bar. Reden: af en toe blijven games hangen en alles dat ik open, behalve de taskbar zelf, zit dan verstop achter het gecrashte spel. Dan wil ik snel iets doen zoals "Get-Process civ* | Stop-Process" (in t geval van Civilization VI). Nu doe ik dat blind (ik zie immers het venster zelf niet waarin ik typ), maar iets meer visuele feedback zou handig zijn natuurlijk.
http://www.promptpal.com/product_info.shtml#taskbar)
Daarmee kun je i.i.g de command prompt toevoegen,en vanuit daaruit is heel easy om Posh te starten (gewoon powershell intikken). Is dat een optie?
Doet niet wat je wil. Ik heb getest en je kan alleen folders/iconen in de taskbar zetten. Je kunt wel de adress bar toevoegen en vanuit daar iets als volgt powershell.exe -command get-content (of het commando wat je wilt draaien)
http://windowsitpro.com/n...command-line-your-taskbar
[ Voor 12% gewijzigd door Turdie op 19-04-2017 18:29 ]
Ik heb even gezocht hoe dit in elkaar zou moeten zitten (omdat dit mij wel leuk lijkt om zelf te coden) maar ik zie dat er redelijk wat werk in zit om even snel te doen in C# (om dit in Powershell te bouwen is helemaal een gedoe, als het überhaupt mogelijk is ivm registreren van bepaalde zaken in Windows). Ik zal vanavond nog wel even rustig kijken of ik er tijd in kan / wil steken.YellowOnline schreef op woensdag 19 april 2017 @ 17:33:
Weet iemand of er een mogelijkheid is in de Windows task bar een Powershell prompt te krijgen? Zoeken hiernaar wordt nogal vervuild door resultaten van mensen die om onverklaarbare reden problemen hebben om een PoSh-icoon in hun task bar te pinnenIk wil de prompt zelf in de taskbar, zoals een Cortana search bar. Reden: af en toe blijven games hangen en alles dat ik open, behalve de taskbar zelf, zit dan verstop achter het gecrashte spel. Dan wil ik snel iets doen zoals "Get-Process civ* | Stop-Process" (in t geval van Civilization VI). Nu doe ik dat blind (ik zie immers het venster zelf niet waarin ik typ), maar iets meer visuele feedback zou handig zijn natuurlijk.
Werkt de "preview pane" van een openstaand venster wel wanneer je dit probleem hebt? De ThumbnailToolbar (zoals Windows Media Player) schijnt makkelijker te zijn en dan is het wellicht mogelijk om dit volledig in Powershell te bouwen (wat ik altijd het leukst vind bij dit soort "oplossingen")
Edit : na even te zoeken naar de documentatie van de ThumbnailToolbar kom ik tot de conclusie dat het weer typisch MSDN is : incomplete en ontbrekende documentatie (als sysadmin loop je hier al regelmatig tegenaan, bij het developen is dit 10x zo erg)
[ Voor 8% gewijzigd door Killah_Priest op 19-04-2017 18:51 ]
MSDN is vooral een geval "overdaad schaadt".Killah_Priest schreef op woensdag 19 april 2017 @ 18:41:
[...]
Ik heb even gezocht hoe dit in elkaar zou moeten zitten (omdat dit mij wel leuk lijkt om zelf te coden) maar ik zie dat er redelijk wat werk in zit om even snel te doen in C# (om dit in Powershell te bouwen is helemaal een gedoe, als het überhaupt mogelijk is ivm registreren van bepaalde zaken in Windows). Ik zal vanavond nog wel even rustig kijken of ik er tijd in kan / wil steken.
Werkt de "preview pane" van een openstaand venster wel wanneer je dit probleem hebt? De ThumbnailToolbar (zoals Windows Media Player) schijnt makkelijker te zijn en dan is het wellicht mogelijk om dit volledig in Powershell te bouwen (wat ik altijd het leukst vind bij dit soort "oplossingen")
Edit : na even te zoeken naar de documentatie van de ThumbnailToolbar kom ik tot de conclusie dat het weer typisch MSDN is : incomplete en ontbrekende documentatie (als sysadmin loop je hier al regelmatig tegenaan, bij het developen is dit 10x zo erg)
Dat artikel is van mijn 21e verjaardag en ik word er nu 37. Kan je nagaan hoe oud het isshadowman12 schreef op woensdag 19 april 2017 @ 17:47:
[...]
Heb je al wel is naar PromptPal gekeken:
http://www.promptpal.com/product_info.shtml#taskbar)
Daarmee kun je i.i.g de command prompt toevoegen,en vanuit daaruit is heel easy om Posh te starten (gewoon powershell intikken). Is dat een optie?
Doet niet wat je wil. Ik heb getest en je kan alleen folders/iconen in de taskbar zetten. Je kunt wel de adress bar toevoegen en vanuit daar iets als volgt powershell.exe -command get-content (of het commando wat je wilt draaien)
http://windowsitpro.com/n...command-line-your-taskbar
Het zegt uiteindelijk enkel dat je een address bar moet toevoegen. Positief is: 16 jaar later bestaat die optie nog steeds. Negatief: het maakt inderdaad wat je typt zichtbaar, maar wordt dan omslachtig omdat het eigenlijk in het beste geval een cmd.exe is. Noem mij moeilijk, maar van "powershell.exe -command {Get-Process civ* | Stop-Process}" zonder feedback (aangezien het een PoSh venster open) word ik niet veel gelukkiger
Net een paar uur verkloot aan waarom set-acl niet werkt. Vind je eindelijk dit:
M.a.w. als je get-acl gebruikt probeert set-acl altijd de owner te zetten. Ook al heb je die niet aangepast. Wat niet kan als je zelf geen owner bent...
http://stackoverflow.com/...t-ownership-of-the-objectUnfortunately Get-Acl is missing some features. It always reads the full security descriptor even if you just want to modify the DACL. That’s why Set-ACL also wants to write the owner even if you have not changed it. Using the GetAccessControl method allows you to specify what part of the security descriptor you want to read.
Replace the Get-Acl call with
$acl = (Get-Item $path).GetAccessControl('Access')
M.a.w. als je get-acl gebruikt probeert set-acl altijd de owner te zetten. Ook al heb je die niet aangepast. Wat niet kan als je zelf geen owner bent...



De ACL cmdlets zijn in mijn ogen een gedrocht, je hebt er bar weinig aan. Je zou verwachten dat het een eenvoudige manier is om ACL's uit te lezen en aan te passen maar volgens mij heeft het betreffende productteam echt de minimale inspanning geleverd mbt die cmdlets. De kwaliteit van verschillende cmdlets verschilt helaas behoorlijk ook al komen ze van MS zelf.Craven schreef op vrijdag 19 mei 2017 @ 07:49:
Net een paar uur verkloot aan waarom set-acl niet werkt. Vind je eindelijk dit:
[...]
http://stackoverflow.com/...t-ownership-of-the-object
M.a.w. als je get-acl gebruikt probeert set-acl altijd de owner te zetten. Ook al heb je die niet aangepast. Wat niet kan als je zelf geen owner bent...
![]()
![]()
Een hele rij microsoft certificeringen.
Ze zijn echt dramatisch ja...
NoPropagateInherit in deze regel zorgt ervoor dat je "This folder, subfolders and files" krijgt
InheritOnly is "Subfolders and files only"
None is volgens mij "Files only"
Waar is de logica in dat??? Like what?
PowerShell:
1
| $Ace = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS AppPool\DefaultAppPool", 'Modify','ContainerInherit,ObjectInherit', 'NoPropagateInherit', 'Allow') |
NoPropagateInherit in deze regel zorgt ervoor dat je "This folder, subfolders and files" krijgt
InheritOnly is "Subfolders and files only"
None is volgens mij "Files only"
Waar is de logica in dat??? Like what?

pfff, ik heb in het verleden ook vaak genoeg lopen stoeien met Get en Set-ACL.
Uiteindelijk kom je er altijd wel uit, maar het is gewoon zonde van de tijd die je erin moet steken.
Uiteindelijk kom je er altijd wel uit, maar het is gewoon zonde van de tijd die je erin moet steken.
Het leuke is. In icacls is het een one-liner... Daar was ik in 20 minuten uit, terwijl ik het nog nooit had gebruikt. Zoveel bijzonders wil ik namelijk niet, ik wil gewoon 1 regel toevoegen aan de ntfs permissies op basis van een machine integrated account. Maar als ik dan een script heb op basis van cmdlets, .net framework wat netjes is opgebouwd met functions mooie error handling en logging dan ga ik er liever niet ineens een executable tussen duwen, dat voelt gewoon fout...Killah_Priest schreef op vrijdag 19 mei 2017 @ 13:10:
pfff, ik heb in het verleden ook vaak genoeg lopen stoeien met Get en Set-ACL.
Uiteindelijk kom je er altijd wel uit, maar het is gewoon zonde van de tijd die je erin moet steken.
Vraagje, heeft iemand een tip hoe het volgende op te lossen.
Ik heb een powershell script om een aantal handelingen uit te voeren op het moment dat de user inlogt, dit ga ik later toepassen als loginscript of eventueel met pdqdeploy, doet er verder niet toe.
Het probleem is het script moet bepaalde handelingen alleen uitvoeren wanneer de gebruiker member is van bepaalde AD groups.
Maar op een gewone gebruikers computer kan je geen get-aduser gebruiken om membership te checken omdat uiteraard de remote admin tools en powershell activedirectory module niet is geïnstalleerd op de werkstations.
Ik heb een powershell script om een aantal handelingen uit te voeren op het moment dat de user inlogt, dit ga ik later toepassen als loginscript of eventueel met pdqdeploy, doet er verder niet toe.
Het probleem is het script moet bepaalde handelingen alleen uitvoeren wanneer de gebruiker member is van bepaalde AD groups.
Maar op een gewone gebruikers computer kan je geen get-aduser gebruiken om membership te checken omdat uiteraard de remote admin tools en powershell activedirectory module niet is geïnstalleerd op de werkstations.
lees groepen uit de lokale security token van de user:
$token = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$token = [System.Security.Principal.WindowsIdentity]::GetCurrent()
Je zou eventueel ook nog adsisearcher kunnen gebruiken.
Ik ga het toch even vragen. Welke handelingen wil je uit laten voeren?Thijs B schreef op donderdag 22 juni 2017 @ 21:53:
Vraagje, heeft iemand een tip hoe het volgende op te lossen.
Ik heb een powershell script om een aantal handelingen uit te voeren op het moment dat de user inlogt, dit ga ik later toepassen als loginscript of eventueel met pdqdeploy, doet er verder niet toe.
Veel acties (op basis van groupmembership) kun je ook met Group Policy Preferences laten uitvoeren. Vaak net wat beheersbaarder (en beter overdraagbaar) dan een Powershell loginscript.
MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B
Leuk, een PowerShell topic
Gebruik het best vaak in mijn dagelijkse werkzaamheden @ helpdesk.
Mailbox aanmaken e.d. gaat stukken sneller dan via de trage Exchange console
Ben geen die-hard programmeur, maar met voorbeelden van internet kom ik vaak best een eind.
Gebruik het best vaak in mijn dagelijkse werkzaamheden @ helpdesk.
Mailbox aanmaken e.d. gaat stukken sneller dan via de trage Exchange console
Ben geen die-hard programmeur, maar met voorbeelden van internet kom ik vaak best een eind.
Dat is ook wel het prettige van powershell boven bijvoorbeeld de gouwe ouwe batch files. Je kunt ook snel iets bouwen wat werkt.
Gebruikt iemand powershell ook in de thuis situatie eigen en waar wordt het dan voor gebruikt?
Gebruikt iemand powershell ook in de thuis situatie eigen en waar wordt het dan voor gebruikt?
Thijs B schreef op donderdag 22 juni 2017 @ 21:53:
Vraagje, heeft iemand een tip hoe het volgende op te lossen.
Ik heb een powershell script om een aantal handelingen uit te voeren op het moment dat de user inlogt, dit ga ik later toepassen als loginscript of eventueel met pdqdeploy, doet er verder niet toe.
Het probleem is het script moet bepaalde handelingen alleen uitvoeren wanneer de gebruiker member is van bepaalde AD groups.
Maar op een gewone gebruikers computer kan je geen get-aduser gebruiken om membership te checken omdat uiteraard de remote admin tools en powershell activedirectory module niet is geïnstalleerd op de werkstations.
Met ^^.Question Mark schreef op vrijdag 23 juni 2017 @ 08:48:
[...]
Ik ga het toch even vragen. Welke handelingen wil je uit laten voeren?
Veel acties (op basis van groupmembership) kun je ook met Group Policy Preferences laten uitvoeren. Vaak net wat beheersbaarder (en beter overdraagbaar) dan een Powershell loginscript.
Login scripts wil je het liefste vermijden. Microsoft is compleet gestopt met promoten en ziet ze ook het liefst verdwijnen. Mettertijd zullen ze het minder makkelijk maken verwacht ik.
PowerShell is in dit soort gevallen een uiterste maatregel als alle andere opties uitgeput zijn.
Ja dat weet ik wel, als het kan gebruik ik Group Policy Preferences, maar daar kan je lang niet alles mee.Question Mark schreef op vrijdag 23 juni 2017 @ 08:48:
[...]
Ik ga het toch even vragen. Welke handelingen wil je uit laten voeren?
Veel acties (op basis van groupmembership) kun je ook met Group Policy Preferences laten uitvoeren. Vaak net wat beheersbaarder (en beter overdraagbaar) dan een Powershell loginscript.
Ik heb een tool die ik per werkstation moet inregelen afhankelijk van in welke ad groep de user hangt en is ook afhankelijk van op welke computer de user op dat moment aanmeld.
Het script wordt gestart vanuit deployment tool pdqdeploy met adminrechten, tot zover allemaal geen probleem.
Echter get-aduser kan ik niet gebruiken zonder RSAT tools.
En deze handige functie IsMember [url] http://activedirectoryfaq...ship-in-active-directory/[\url] kan ik ook niet toepassen omdat het script niet onder de locale user account draait.
Via System.DirectoryServices.AccountManagement.UserPrincipal kun je dmv de static method GetGroups() ook zien van welke groepen de logged on user lid is. Wel moet je System.DirectoryServices.AccountManagement eerst via add-type toevoegen.
Tnx voor de tip, kon het niet laten ff uit te proberenpunisher007 schreef op vrijdag 23 juni 2017 @ 08:22:
Je zou eventueel ook nog adsisearcher kunnen gebruiken.
adsisearcher is wat ik nodig heb, kan je AD query doen zonder afhankelijk te zijn van RSAT tools en zelfs geen admin rechten voor nodig top!
Maandag even verder puzzelen om dat in een powershell functie te zetten.
Of je gebruikt Invoke-Command om je informatie op te halen bij een server.Thijs B schreef op zaterdag 24 juni 2017 @ 12:02:
[...]
Tnx voor de tip, kon het niet laten ff uit te proberen
adsisearcher is wat ik nodig heb, kan je AD query doen zonder afhankelijk te zijn van RSAT tools en zelfs geen admin rechten voor nodig top!
Maandag even verder puzzelen om dat in een powershell functie te zetten.
Bijvoorbeeld: $Groups = Invoke-Command -Computer DC01 -Scriptblock {Get-ADUser.....}
Vervolgens kan je dan weer werken met de variabel $Groups.
Ja dat is wel beetje te omslachtigro3lie schreef op zaterdag 24 juni 2017 @ 13:17:
[...]
Of je gebruikt Invoke-Command om je informatie op te halen bij een server.
Bijvoorbeeld: $Groups = Invoke-Command -Computer DC01 -Scriptblock {Get-ADUser.....}
Vervolgens kan je dan weer werken met de variabel $Groups.
Na ff prutsen heb ik onderstaande, dat werkt simpelweg op elke machine en elke powershell versie..
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
| #example ADSISEARCH-IsMemberof -SamAccountName "j.jansen" -Group "office" function ADSISEARCH-IsMemberof { PARAM ( [Parameter(Mandatory=$true,Position=0)] $SamAccountName, [Parameter(Mandatory=$true,Position=1)] $Group ) $Mygroup = $Group $ADgroups = ([ADSISEARCHER]"samaccountname=$($SamAccountName)").Findone().Properties.memberof foreach ($group in $ADgroups){ if ($group -like "CN=" + "$Mygroup" +",OU=*") { Write-verbose ("ADSI-IsMemberof " + $group + "is True") Return $true }#endif }#endforeach Return $False }#endfunction |
Een remote script aftrappen op een DC klinkt als een ongelovelijk slecht plan. Ik mis de creativiteit om te bedenken hoe je het kunt misbruiken maar het kan nooit een goed idee zijn.ro3lie schreef op zaterdag 24 juni 2017 @ 13:17:
[...]
Of je gebruikt Invoke-Command om je informatie op te halen bij een server.
Bijvoorbeeld: $Groups = Invoke-Command -Computer DC01 -Scriptblock {Get-ADUser.....}
Invoke-Command op een remote host = PS Remoting dus in een default setup admin rechten nodig op de server.ro3lie schreef op zaterdag 24 juni 2017 @ 13:17:
[...]
Of je gebruikt Invoke-Command om je informatie op te halen bij een server.
Bijvoorbeeld: $Groups = Invoke-Command -Computer DC01 -Scriptblock {Get-ADUser.....}
Vervolgens kan je dan weer werken met de variabel $Groups.
Lijkt mij niet echt secure...
Of naar een algemene server met de ADDS PowerShell modules ;-).downtime schreef op zaterdag 24 juni 2017 @ 15:10:
[...]
Een remote script aftrappen op een DC klinkt als een ongelovelijk slecht plan. Ik mis de creativiteit om te bedenken hoe je het kunt misbruiken maar het kan nooit een goed idee zijn.
Je kan natuurlijk ook een account aanmaken en hier rechten op aanpassen tot het nodige.Killah_Priest schreef op zaterdag 24 juni 2017 @ 19:23:
[...]
Invoke-Command op een remote host = PS Remoting dus in een default setup admin rechten nodig op de server.
Lijkt mij niet echt secure...
Maargoed het was maar een suggestie
Hi all,
Iemand een idee hoe onderstaand op te lossen is?
Via een server deze line uitvoeren;
Heeft als eindresultaat dat elke server de tijd (-StarttDate) overneemt van deze server ipv hun eigen lokale 02.00am. En dat is lastig als je een globale infrastructuur hebt.
Ik dacht het op te lossen om de command dan maar lokaal op een node in de cluster uit te voeren;
Maar daar komen de variables niet door.
Iemand een idee?
Iemand een idee hoe onderstaand op te lossen is?
Via een server deze line uitvoeren;
PowerShell:
1
| Add-CauClusterRole -ClusterName $ClusterName -VirtualComputerObjectName $CAUName -DaysOfWeek Saturday -WeeksOfMonth 4 -StartDate 02:00 -MaxFailedNodes 1 -MaxRetriesPerNode 2 -RequireAllNodesOnline -RebootTimeoutMinutes 30 -StopAfter 120 -force |
Heeft als eindresultaat dat elke server de tijd (-StarttDate) overneemt van deze server ipv hun eigen lokale 02.00am. En dat is lastig als je een globale infrastructuur hebt.
Ik dacht het op te lossen om de command dan maar lokaal op een node in de cluster uit te voeren;
PowerShell:
1
| invoke-command -computername $ANode {Add-CauClusterRole -ClusterName $ClusterName -VirtualComputerObjectName $CAUName -DaysOfWeek Saturday -WeeksOfMonth 4 -StartDate 02:00 -MaxFailedNodes 1 -MaxRetriesPerNode 2 -RequireAllNodesOnline -RebootTimeoutMinutes 30 -StopAfter 120 -force} |
Maar daar komen de variables niet door.

Iemand een idee?
Godfather Bodybuilding topic reeks
Yes! Thanks!
PowerShell:
1
| invoke-command -computername $ANode -argumentlist $ClusterName {Set-CauClusterRole -ClusterName $args[0] -DaysOfWeek Sunday -WeeksOfMonth 4 -StartDate 02:00 -MaxFailedNodes 1 -MaxRetriesPerNode 2 -RequireAllNodesOnline -RebootTimeoutMinutes 30 -StopAfter 02:00:00 -force} |
Godfather Bodybuilding topic reeks
Kan iemand mij in de goede richting helpen? Ik heb een script gemaakt waarmee ik een melding kan genereren als een computer langer dan x dagen aan staat. Dit werkt allemaal goed.
Nu wil ik alleen het script deployen naar alle computers in het domein. Dit kan ik doen met een GPO, geen probleem. Nu wil ik alleen niet alle computers voorzien van het script i.c.m. taakplanner.
Nu kan ik zeggen, ik maak verschillende GPO's voor elk 1. 1 voor computers, 1 voor laptops en 1 voor niet. Nu wil ik de GPO's dus eigenlijk bundelen naar 1. Alleen hoe ga ik dan mensen excluden?
Ik heb al gekeken of ik in het powershell script kan zeggen van " jij bent lid van groep die dus stop". Maar dat krijg ik alleen voor elkaar op server niveau aangezien op de werksations niet de ad module in geinstalleerd.
Hebben jullie misschien een idee hoe ik dit zou kunnen doen?
Script deployen icm met taakplanner vind ik ook niet 100% lekker icm verschillende groepen. Als ik bij iemand het scripts wil verwijderen moet ik eerst een andere GPO gaan aanmaken om hem te verwijderen.
Nu wil ik alleen het script deployen naar alle computers in het domein. Dit kan ik doen met een GPO, geen probleem. Nu wil ik alleen niet alle computers voorzien van het script i.c.m. taakplanner.
Nu kan ik zeggen, ik maak verschillende GPO's voor elk 1. 1 voor computers, 1 voor laptops en 1 voor niet. Nu wil ik de GPO's dus eigenlijk bundelen naar 1. Alleen hoe ga ik dan mensen excluden?
Ik heb al gekeken of ik in het powershell script kan zeggen van " jij bent lid van groep die dus stop". Maar dat krijg ik alleen voor elkaar op server niveau aangezien op de werksations niet de ad module in geinstalleerd.
Hebben jullie misschien een idee hoe ik dit zou kunnen doen?
Script deployen icm met taakplanner vind ik ook niet 100% lekker icm verschillende groepen. Als ik bij iemand het scripts wil verwijderen moet ik eerst een andere GPO gaan aanmaken om hem te verwijderen.
😲
het script hoef je toch niet te deployen, dat zet je gewoon op een share. De scheduled task kun je makkelijk targeten met GPP's. De script kun je eventueel ook gewoon overal naar deployen.
Er zijn ook nog manieren om AD aan te spreken dan de module. Moet je even terug lezen in dit topic. Post was van @Killah_Priest dacht ik.
Deze bedoel ik: Killah_Priest in "Het grote Powershell topic"
Of deze: Thijs B in "Het grote Powershell topic"
Er zijn ook nog manieren om AD aan te spreken dan de module. Moet je even terug lezen in dit topic. Post was van @Killah_Priest dacht ik.
Deze bedoel ik: Killah_Priest in "Het grote Powershell topic"
Of deze: Thijs B in "Het grote Powershell topic"
[ Voor 20% gewijzigd door Craven op 20-09-2017 12:20 ]
Ik zou het met Item-Level-Targeting oppakken. Dan kan je gewoon een security-groep maken voor Users en/of Computers.mswp schreef op woensdag 20 september 2017 @ 11:56:
Kan iemand mij in de goede richting helpen? Ik heb een script gemaakt waarmee ik een melding kan genereren als een computer langer dan x dagen aan staat. Dit werkt allemaal goed.
Nu wil ik alleen het script deployen naar alle computers in het domein. Dit kan ik doen met een GPO, geen probleem. Nu wil ik alleen niet alle computers voorzien van het script i.c.m. taakplanner.
Nu kan ik zeggen, ik maak verschillende GPO's voor elk 1. 1 voor computers, 1 voor laptops en 1 voor niet. Nu wil ik de GPO's dus eigenlijk bundelen naar 1. Alleen hoe ga ik dan mensen excluden?
Ik heb al gekeken of ik in het powershell script kan zeggen van " jij bent lid van groep die dus stop". Maar dat krijg ik alleen voor elkaar op server niveau aangezien op de werksations niet de ad module in geinstalleerd.
Hebben jullie misschien een idee hoe ik dit zou kunnen doen?
Script deployen icm met taakplanner vind ik ook niet 100% lekker icm verschillende groepen. Als ik bij iemand het scripts wil verwijderen moet ik eerst een andere GPO gaan aanmaken om hem te verwijderen.
@Craven & @Appel Ik zie nu pas dat ik niet meer gereageerd heb op jullie berichten, wat slecht van mij, mijn excuses. Ik heb het inderdaad uiteindelijk via Level-targeting voor elkaar gekregen.
Ander vraagje, Ik heb een script gemaakt die ik ook periodiek wil laten uitvoeren. Nu werkt het script wel helemaal goed alleen krijg ik hem niet aan de gang als ik hem uitvoer via bijvoorbeeld CMD. Als ik hem in ISE open dan werkt hij helemaal goed.
Hij lijkt te vallen over het volgende:
$datum= Get-Date
$jaar= $datum.year
$maand= $datum.month
$dag= $datum.day
Deze zorgen voor de input van een UNC path.
$directory1= "\\server\log\$jaar\$maand\local\Document"
$directory2= "\\server\log2\$jaar\$maand\local\document"
Als ik ga kijken om welke regels hij zeurt laat hij netjes zien dat hij vanuit een ander commando netjes het path laat zien. Het enigste wat hij dan zegt is dat hij \\server\log\\\local\document en \\server\log2\\\local\document niet kan vinden.
doe ik het in ISE laat hij het volgende zien:
\\server\log\2017\11\local\Document
\\server\log2\2017\11\local\document
Ik heb al gekeken of het soms aan de executionpolicy ligt maar daar lijkt het niet aan te liggen. Het gekken is dat ik het wel werkte op mijn laptop (Windows 10.), ik kreeg het nu niet voor elkaar in een Virtuele Windows 10 en een Server 2012.
Ander vraagje, Ik heb een script gemaakt die ik ook periodiek wil laten uitvoeren. Nu werkt het script wel helemaal goed alleen krijg ik hem niet aan de gang als ik hem uitvoer via bijvoorbeeld CMD. Als ik hem in ISE open dan werkt hij helemaal goed.
Hij lijkt te vallen over het volgende:
$datum= Get-Date
$jaar= $datum.year
$maand= $datum.month
$dag= $datum.day
Deze zorgen voor de input van een UNC path.
$directory1= "\\server\log\$jaar\$maand\local\Document"
$directory2= "\\server\log2\$jaar\$maand\local\document"
Als ik ga kijken om welke regels hij zeurt laat hij netjes zien dat hij vanuit een ander commando netjes het path laat zien. Het enigste wat hij dan zegt is dat hij \\server\log\\\local\document en \\server\log2\\\local\document niet kan vinden.
doe ik het in ISE laat hij het volgende zien:
\\server\log\2017\11\local\Document
\\server\log2\2017\11\local\document
Ik heb al gekeken of het soms aan de executionpolicy ligt maar daar lijkt het niet aan te liggen. Het gekken is dat ik het wel werkte op mijn laptop (Windows 10.), ik kreeg het nu niet voor elkaar in een Virtuele Windows 10 en een Server 2012.
Get-ChildItem : Cannot find path '\\server\log\\\local\document' because it does not exist.
At c:\temp\script.ps1:43 char:15
+ $allemappen1= Get-ChildItem -Path $directory1 | Where-Object {$_.PSIs ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (\\server\log\\\local\document:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Get-ChildItem : Cannot find path '\\server\log\\\local\document' because it does not exist.
At c:\temp\script.ps1:44 char:15
+ $allemappen2= Get-ChildItem -Path $directory2 | Where-Object {$_.PSIs ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (\\server\log2\\\local\document:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
[ Voor 26% gewijzigd door mswp op 22-11-2017 20:36 ]
😲
Dus als je het script via cmd.exe aftrapt (via powershell.exe -file neem ik aan?) dan staan er 3 "\" achter elkaar waardoor het vervolg onderuit gaat. Via de ISE loopt alles netjes door omdat je dan een enkele "\" hebt?
Jup, gek eh?Craven schreef op woensdag 22 november 2017 @ 16:41:
Dus als je het script via cmd.exe aftrapt (via powershell.exe -file neem ik aan?) dan staan er 3 "\" achter elkaar waardoor het vervolg onderuit gaat. Via de ISE loopt alles netjes door omdat je dan een enkele "\" hebt?
via CMD:
powershell.exe -executionPolicy unrestricted -File c:\temp\script.ps1
Als ik op de startknop van ISE druk gaat het goed.
😲
Rechten issue misschien?mswp schreef op woensdag 22 november 2017 @ 16:52:
[...]
Jup, gek eh?
via CMD:
powershell.exe -executionPolicy unrestricted -File c:\temp\script.ps1
Als ik op de startknop van ISE druk gaat het goed.
Of als je cmd onder een local account uitvoert kan ik voorstellen dat een netwerkpad niet kan worden gevonden.
edit: zie nu pas de 3 \\\.
Kun je je code eens posten?
[ Voor 6% gewijzigd door mufana op 22-11-2017 18:58 ]
Die \\\ komt omdat de variabelen leeg zijn? Of iig niet ingevuld worden op die plek.mufana schreef op woensdag 22 november 2017 @ 18:50:
[...]
Rechten issue misschien?
Of als je cmd onder een local account uitvoert kan ik voorstellen dat een netwerkpad niet kan worden gevonden.
edit: zie nu pas de 3 \\\.
Kun je je code eens posten?
Any errors in spelling, tact, or fact are transmission errors.
Je kunt al test natuurlijk wel even na het definieren van de variabelen een write-host zetten die de inhoud van de variabele weergeeft (of hem naar file laten outputten) zodat je kunt zien of het probleem zit in het correct vullen van de variabelen of het parsen van het path. Dan weet je in ieder geval waar je moet zoeken
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
@mufana @ralpje @Oogje Ik heb het, ik had de variabelen voor de maand onder de variabelen staan van de directory. Hij maakte dus eerste die van de directory aan en daarna pas die van het jaar en de maand.
Gek dan ISE dit wel goed doet en bij op de andere manieren niet.
Ik weet tenminste waar het aan ligt, volgorde van script een beetje aanpassen.
Bedankt voor het op weg helpen!
Gek dan ISE dit wel goed doet en bij op de andere manieren niet.
Ik weet tenminste waar het aan ligt, volgorde van script een beetje aanpassen.
Bedankt voor het op weg helpen!
😲
De ISE onthoudt de variabelen. Dus als je eenmaal een regeltje code hebt uitgevoerd dan zit die variabele er dus in.
Als je bezig bent in de ISE altijd even een nieuwe instance starten en dan nog een keer je script testen. Of overstappen naar VS Code. Die doet dat niet volgens mij.
Als je bezig bent in de ISE altijd even een nieuwe instance starten en dan nog een keer je script testen. Of overstappen naar VS Code. Die doet dat niet volgens mij.
Wat ook helpt is Set-StrictMode gebruiken. Dan had je netjes een foutmelding gekregen dat die variabelen nog geen waarde hadden.
En inderdaad scripts altijd in ISE en vanaf de PowerShell command line testen en daarbij ook een paar keer ISE (of de command line) herstarten om alle variabelen uit die sessie weg te gooien.
En inderdaad scripts altijd in ISE en vanaf de PowerShell command line testen en daarbij ook een paar keer ISE (of de command line) herstarten om alle variabelen uit die sessie weg te gooien.
Ik ben sinds kort over op VS code en ik vind t heerlijk werken. En t pakket waarschuwt ook nog netjes als je foutjes hebt.Craven schreef op woensdag 22 november 2017 @ 20:46:
De ISE onthoudt de variabelen. Dus als je eenmaal een regeltje code hebt uitgevoerd dan zit die variabele er dus in.
Als je bezig bent in de ISE altijd even een nieuwe instance starten en dan nog een keer je script testen. Of overstappen naar VS Code. Die doet dat niet volgens mij.
Any errors in spelling, tact, or fact are transmission errors.
Er is een hele leuke maand cursus!mswp schreef op woensdag 22 november 2017 @ 22:18:
@Craven @downtime
Duidelijk, dat verklaart het. Dankjullie wel, weer iets geleerd.
Ik ga PowerShell nog leuk vinden, jammer dat het voor mij zoveel tijd kost. Iemand enig idee of er leuke 1 daags cursussen zijn?
https://www.manning.com/b...ing-in-a-month-of-lunches
Kan dit boek van harte aanraden. Tof geschreven door twee 'voor mij helden'.
Verder zijn er echt ontzettend veel blogs van allerlei mensen die hele toffe dingen doen met PowerShell.
Ik heb de URL's even niet zo beschikbaar maar zoek even in google op:
- Jessica Deen
- Chrissy LeMaire
- Matthew Hodgkins
- Prateek Singh
- Warren Frame (Rambling Cookie Monster)
- François Xavier Cat
- Mike F Robbins
- Boe Prox
Nouja, er zijn er nog veel meer. Maar alles begint bij het boek. Gewoon kopen en lekker mee aan de slag gaan en vooral veel plezier hebben.
En kom gezellig eens langs bij de Dutch PowerShell User Group. Ik weet uit betrouwbare bron dat er achter de schermen alweer druk gewerkt wordt aan het organiseren van een nieuwe 'beginners' dag. Ook een 'echte' deep-level dag komt eraan, maar dat zal ergens Q2 2018 worden denk ik.
[ Voor 5% gewijzigd door ralpje op 23-11-2017 09:32 ]
Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer
Ik zou ook wel weer willen komen maar heb er eigenlijk geen goed excuus voor... Tegenwoordig veels te druk bezig met alles behalve powershell...ralpje schreef op donderdag 23 november 2017 @ 09:32:
En kom gezellig eens langs bij de Dutch PowerShell User Group. Ik weet uit betrouwbare bron dat er achter de schermen alweer druk gewerkt wordt aan het organiseren van een nieuwe 'beginners' dag. Ook een 'echte' deep-level dag komt eraan, maar dat zal ergens Q2 2018 worden denk ik.
Hoe is de stof die behandeld werd? Heb tijdje terug het boek Windows Powershell step by step door Ed Wilson aangeschaft, toen mee begonnen maar nooit afgemaakt. Powershell vind ik ontzettend leuk en leerzaam maar continue het boek volgen lijden mij alleen maar van de concentratie.mufana schreef op woensdag 22 november 2017 @ 23:54:
[...]
Er is een hele leuke maand cursus!
https://www.manning.com/b...ing-in-a-month-of-lunches
Kan dit boek van harte aanraden. Tof geschreven door twee 'voor mij helden'.
Verder zijn er echt ontzettend veel blogs van allerlei mensen die hele toffe dingen doen met PowerShell.
Ik heb de URL's even niet zo beschikbaar maar zoek even in google op:
- Jessica Deen
- Chrissy LeMaire
- Matthew Hodgkins
- Prateek Singh
- Warren Frame (Rambling Cookie Monster)
- François Xavier Cat
- Mike F Robbins
- Boe Prox
Nouja, er zijn er nog veel meer. Maar alles begint bij het boek. Gewoon kopen en lekker mee aan de slag gaan en vooral veel plezier hebben.
Hoelang zou je er ongeveer over doen als je elke dag een stukje doorneem?
@ralpje interessant, ik zet hem op mijn lijstje.
😲
Het Learn Powershell in 30 lunches boek is echt een aanrader, alle basiszaken en ook een aantal van de wat ingewikkelde zaken komen aan bod.mswp schreef op donderdag 23 november 2017 @ 12:56:
[...]
Hoe is de stof die behandeld werd? Heb tijdje terug het boek Windows Powershell step by step door Ed Wilson aangeschaft, toen mee begonnen maar nooit afgemaakt. Powershell vind ik ontzettend leuk en leerzaam maar continue het boek volgen lijden mij alleen maar van de concentratie.
Hoelang zou je er ongeveer over doen als je elke dag een stukje doorneem?
@ralpje interessant, ik zet hem op mijn lijstje.
Ik was zelf al redelijk ver met Powershell voordat ik aan dat boek begon maar toch heb ik er nog genoeg van opgestoken.
(C# aanleren is ook een aanrader om je Powershell skills te verbeteren)
Ik ga het boek voor sinterklaas vragen
Iemand ervaring met Onedrive i.c.m. Powershell? En dan bedoel ik de client kant, de kant van het automatisch instellen voor de gebruikers.
Iemand ervaring met Onedrive i.c.m. Powershell? En dan bedoel ik de client kant, de kant van het automatisch instellen voor de gebruikers.
😲