Het grote Powershell topic

Pagina: 1 ... 7 ... 10 Laatste
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
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.
Je PoSh tool porten naar C# ligt voor de hand vind ik zelf. Hopelijk zijn het geen Java developers bij je.

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
YellowOnline 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.
Nee we hebben echte developers :) Daar ben ik niet zo bang voor.

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.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
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?

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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?
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)

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
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)
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.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
YellowOnline 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.
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 dus
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.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
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.
Hoezo geen Add-Type? Ik heb net een DLL met Add-Type geladen in W10 IoT! ;)

Afbeeldingslocatie: https://tweakers.net/ext/f/Qj36Nq4lifGWypmo35H5YjhM/full.png

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 ]


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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.

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

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.

😲


Acties:
  • 0 Henk 'm!

  • TeGek
  • Registratie: Oktober 2007
  • Laatst online: 02-07 16:36

TeGek

Engineer in hart en nieren.

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.
Waarom niet get-printer? :)

PoSh Fan? Automation? RMM? blog - op zoek naar een nieuwe job? kijk dan hier.


Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Ook dan krijg ik alleen de lokale printers

😲


Acties:
  • +1 Henk 'm!

  • TeGek
  • Registratie: Oktober 2007
  • Laatst online: 02-07 16:36

TeGek

Engineer in hart en nieren.

mswp schreef op maandag 19 december 2016 @ 21:16:
[...]


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.


Acties:
  • +1 Henk 'm!

  • ralpje
  • Registratie: November 2003
  • Laatst online: 14:06

ralpje

Deugpopje

Workaround: een pssession opzetten naar die andere machine en vanuit die sessie het commando uitvoeren.

Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer


Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

ralpje schreef op maandag 19 december 2016 @ 21:24:
Workaround: een pssession opzetten naar die andere machine en vanuit die sessie het commando uitvoeren.
Ik ben beginnend met Ps, deze optie nog niet bekeken. Ga ik doen, dankjewel!

😲


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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.

Acties:
  • 0 Henk 'm!

  • ralpje
  • Registratie: November 2003
  • Laatst online: 14:06

ralpje

Deugpopje

Goed punt, dat kan inderdaad nog wel een issue zijn.

Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer


Acties:
  • 0 Henk 'm!

  • rdtechie
  • Registratie: Januari 2003
  • Laatst online: 13-02-2023
mswp schreef op dinsdag 20 december 2016 @ 07:10:
[...]


Ik ben beginnend met Ps, deze optie nog niet bekeken. Ga ik doen, dankjewel!
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.

Hier een voorbeeldje:

C#:
1
 Invoke-Command -ComputerName server01 -ScriptBlock { Get-Printer } 

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
rdtechie schreef op vrijdag 30 december 2016 @ 23:32:
[...]


Sommige cmdlets hebben wel een -computername parameter, maar deze werkt niet altijd naar behoren.
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)

Acties:
  • 0 Henk 'm!

  • rdtechie
  • Registratie: Januari 2003
  • Laatst online: 13-02-2023
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)
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.

Acties:
  • 0 Henk 'm!

  • Ewoudb
  • Registratie: November 2006
  • Laatst online: 13:39
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 :D

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
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 :D
Ga je hem handmatig aftrappen of vanuit een scheduled task oid?

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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 :D
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.
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#)

Acties:
  • 0 Henk 'm!

  • Ewoudb
  • Registratie: November 2006
  • Laatst online: 13:39
Craven schreef op vrijdag 6 januari 2017 @ 07:37:
[...]

Ga je hem handmatig aftrappen of vanuit een scheduled task oid?
Handmatig, gezien ik wil controleren of alles goed gaat.

Acties:
  • +1 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
Ewoudb schreef op vrijdag 6 januari 2017 @ 13:01:
[...]


Handmatig, gezien ik wil controleren of alles goed gaat.
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 :+

Acties:
  • 0 Henk 'm!

  • rdtechie
  • Registratie: Januari 2003
  • Laatst online: 13-02-2023
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 :D
Cool! Wil je je script delen met ons?

Acties:
  • 0 Henk 'm!

  • Ewoudb
  • Registratie: November 2006
  • Laatst online: 13:39
Craven 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 worden allemaal weggeschreven in een logfile, daar heb ik aan gedacht :P

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
De acties, maar wat doe je met de output van de acties?

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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.

[ Voor 22% gewijzigd door Killah_Priest op 10-01-2017 15:03 ]


Acties:
  • 0 Henk 'm!

  • Ewoudb
  • Registratie: November 2006
  • Laatst online: 13:39
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.

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 ]


Acties:
  • 0 Henk 'm!

  • HKLM_
  • Registratie: Februari 2009
  • Laatst online: 14:04
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.

Cloud ☁️


Acties:
  • 0 Henk 'm!

  • maussert
  • Registratie: September 2012
  • Laatst online: 13:58
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.

[ Voor 38% gewijzigd door maussert op 07-02-2017 20:52 ]


Acties:
  • 0 Henk 'm!

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
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 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.
Post het script eens.

Acties:
  • 0 Henk 'm!

  • HKLM_
  • Registratie: Februari 2009
  • Laatst online: 14:04
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&#8221; -Body &#8220;This is a daily report of server uptime&#8221;


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 ☁️


Acties:
  • +2 Henk 'm!

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
Downloader_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&#8221; -Body &#8220;This is a daily report of server uptime&#8221;


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.
Wat dacht je van zoiets? Even snel iets gebouwd op mijn MacBook, dus niet kunnen testen :P

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 ]


Acties:
  • 0 Henk 'm!

  • HKLM_
  • Registratie: Februari 2009
  • Laatst online: 14:04
Squ1zZy schreef op dinsdag 7 februari 2017 @ 21:28:
[...]


Wat dacht je van zoiets? Even snel iets gebouwd op mijn MacBook, dus niet kunnen testen :P

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 :)
Held _/-\o_ lijkt mijn (script) nergens op haha. Ga het morgen eens uitpluizen en testen :9

Cloud ☁️


Acties:
  • +1 Henk 'm!

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
Downloader_NL schreef op dinsdag 7 februari 2017 @ 21:33:
[...]


Held _/-\o_ lijkt mijn (script) nergens op haha. Ga het morgen eens uitpluizen en testen :9
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.

Acties:
  • 0 Henk 'm!

  • HKLM_
  • Registratie: Februari 2009
  • Laatst online: 14:04
Squ1zZy 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.
Topper _/-\o_ _/-\o_

Cloud ☁️


Acties:
  • +1 Henk 'm!

  • ralpje
  • Registratie: November 2003
  • Laatst online: 14:06

ralpje

Deugpopje

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


Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:15
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.

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 17-09 21:35

Jazzy

Moderator SSC/PB

Moooooh!

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?
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?

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Jazzy 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?
Misschien moeten we ruilen zodat ik enkele uren aan een PoSh-script voor jou spendeer en jij enkele uren aan mijn Exchange-from-hell-omgeving :9

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.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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 :9

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)

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 17-09 21:35

Jazzy

Moderator SSC/PB

Moooooh!

Kun je een voorbeeldje geven van hoe dat er in PS dan uit zou zien?

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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)

Acties:
  • 0 Henk 'm!

  • Kaalus
  • Registratie: Januari 2010
  • Niet online
Killah_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)
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 host :)

Acties:
  • +2 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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

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 ]


Acties:
  • 0 Henk 'm!

  • MADG0BLIN
  • Registratie: Juni 2001
  • Laatst online: 12:04
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?

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Nu online

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

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.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
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.
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.

Acties:
  • 0 Henk 'm!

  • MADG0BLIN
  • Registratie: Juni 2001
  • Laatst online: 12:04
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?
Klopt.
Dan zou ik gewoon beginnen met het verwijderen van alle groepen op het userobject, hoef je daarna alleen nog maar groepen toe te voegen.
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. ;)

Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Nu online

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

MADG0BLIN schreef op vrijdag 3 maart 2017 @ 13:10:
[...]
Uitdaging is dat er nog andere groepen zijn die eigenlijk niet weg moeten.
Dan gooi je standaard de drie groepen weg waar het om gaat, in plaats van alle groepen.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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. ;)
Het is erg simpel hoor.
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 :
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 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).

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 ]


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
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

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
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 :p 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.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
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 pinnen :p 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:
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 ]


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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 pinnen :p 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.
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)

[ Voor 8% gewijzigd door Killah_Priest op 19-04-2017 18:51 ]


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
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)
MSDN is vooral een geval "overdaad schaadt".
shadowman12 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
Dat artikel is van mijn 21e verjaardag en ik word er nu 37. Kan je nagaan hoe oud het is :+

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 :)

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
Net een paar uur verkloot aan waarom set-acl niet werkt. Vind je eindelijk dit:
Unfortunately 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')
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...

8)7 8)7 8)7

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 17-09 08:51

@r!k

It is I, Leclerq

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...

8)7 8)7 8)7
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.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
Ze zijn echt dramatisch ja...

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? :X

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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.

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
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.
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...

Acties:
  • 0 Henk 'm!

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
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.

Acties:
  • +1 Henk 'm!

  • Semt-x
  • Registratie: September 2002
  • Laatst online: 10:46
lees groepen uit de lokale security token van de user:
$token = [System.Security.Principal.WindowsIdentity]::GetCurrent()

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 16-09 10:15
Je zou eventueel ook nog adsisearcher kunnen gebruiken.

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Nu online

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

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.
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.

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 14:06
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 :P

Ben geen die-hard programmeur, maar met voorbeelden van internet kom ik vaak best een eind.

Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 11:33
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?

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
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.
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.
Met ^^.

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.

Acties:
  • 0 Henk 'm!

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
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.
Ja dat weet ik wel, als het kan gebruik ik Group Policy Preferences, maar daar kan je lang niet alles mee.

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.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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.

Acties:
  • 0 Henk 'm!

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
punisher007 schreef op vrijdag 23 juni 2017 @ 08:22:
Je zou eventueel ook nog adsisearcher kunnen gebruiken.
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.

Acties:
  • 0 Henk 'm!

  • ro3lie
  • Registratie: April 2009
  • Laatst online: 13:58
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.
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.

Acties:
  • 0 Henk 'm!

  • Thijs B
  • Registratie: Augustus 1999
  • Niet online
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.
Ja dat is wel beetje te omslachtig :)

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

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

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.....}
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.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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.
Invoke-Command op een remote host = PS Remoting dus in een default setup admin rechten nodig op de server.

Lijkt mij niet echt secure...

Acties:
  • 0 Henk 'm!

  • ro3lie
  • Registratie: April 2009
  • Laatst online: 13:58
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.
Of naar een algemene server met de ADDS PowerShell modules ;-).
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...
Je kan natuurlijk ook een account aanmaken en hier rechten op aanpassen tot het nodige.

Maargoed het was maar een suggestie :+

Acties:
  • 0 Henk 'm!

  • MrJ
  • Registratie: Mei 2001
  • Laatst online: 26-08 21:02

MrJ

Train, eat, sleep. Repeat.

Hi all,

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


Acties:
  • 0 Henk 'm!

  • new_guy
  • Registratie: Oktober 2009
  • Laatst online: 10:51

Acties:
  • +1 Henk 'm!

  • MrJ
  • Registratie: Mei 2001
  • Laatst online: 26-08 21:02

MrJ

Train, eat, sleep. Repeat.

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


  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

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
  • Registratie: Februari 2007
  • Laatst online: 14:07
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"

[ Voor 20% gewijzigd door Craven op 20-09-2017 12:20 ]


  • Appel
  • Registratie: November 2007
  • Laatst online: 21-08 16:07
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.
Ik zou het met Item-Level-Targeting oppakken. Dan kan je gewoon een security-groep maken voor Users en/of Computers.

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

@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.


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 ]

😲


Acties:
  • +1 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
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?

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

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?
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.

😲


Acties:
  • +1 Henk 'm!

  • mufana
  • Registratie: Mei 2009
  • Laatst online: 05-06-2023
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.
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?

[ Voor 6% gewijzigd door mufana op 22-11-2017 18:58 ]


Acties:
  • +2 Henk 'm!

  • Oogje
  • Registratie: Oktober 2003
  • Niet online
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?
Die \\\ komt omdat de variabelen leeg zijn? Of iig niet ingevuld worden op die plek.

Any errors in spelling, tact, or fact are transmission errors.


Acties:
  • +1 Henk 'm!

  • ralpje
  • Registratie: November 2003
  • Laatst online: 14:06

ralpje

Deugpopje

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


Acties:
  • +1 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

@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!

😲


Acties:
  • +1 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
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.

Acties:
  • +1 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

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.

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

@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?

[ Voor 100% gewijzigd door mswp op 22-11-2017 22:19 ]

😲


Acties:
  • 0 Henk 'm!

  • Oogje
  • Registratie: Oktober 2003
  • Niet online
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.
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.

Any errors in spelling, tact, or fact are transmission errors.


Acties:
  • +1 Henk 'm!

  • mufana
  • Registratie: Mei 2009
  • Laatst online: 05-06-2023
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?
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.

  • ralpje
  • Registratie: November 2003
  • Laatst online: 14:06

ralpje

Deugpopje

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


  • Craven
  • Registratie: Februari 2007
  • Laatst online: 14:07
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.
Ik zou ook wel weer willen komen maar heb er eigenlijk geen goed excuus voor... Tegenwoordig veels te druk bezig met alles behalve powershell...

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

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.
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.

😲


Acties:
  • +1 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 08:37
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.
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.
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)

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

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.

😲

Pagina: 1 ... 7 ... 10 Laatste