Het grote Powershell topic

Pagina: 1 2 ... 10 Laatste
Acties:

Onderwerpen


Acties:
  • +4 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Mede-auteur:
  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

Het grote Powershell topic

Wat?
Powershell is een scripting taal die standaard aanwezig is in alle Windows versies vanaf Windows 7 en Windows Server 2008R2. Voor eerdere versies (post-2000) is het als applicatie te downloaden, zowel in 32- als 64-bit versie.

De mensen uit de Unix wereld hadden steeds medelijden met Windows administrators omdat zij bash hebben en wij het met batch moesten doen. Daar kwam verandering in met WSH in Windows 98 dat .JS en .VBS ondersteunde (en uitgebreid kon worden naar andere talen), maar ideaal was het toch nog niet.

Enter Powershell: op de nieuwere versies van Windows is dit de basis van alles. Windows, en alle applicaties, draaien op Powershell en niet vica versa. Meer zelfs: van vele applicaties is de functionaliteit niet ten volle beschikbaar via de GUI en moet men sowieso Powershell gebruiken (zie oa. Exchange en de verschillende System Center producten).

Het voordeel van Powershell ten opzichte van VBS, de vorige standaard in Windows scripting, is dat het de positieve elementen overgenomen heeft (Object-Oriented, gebaseerd op .NET) maar de taal zelf intuïtiever gemaakt heeft en commando's - cmdlets geheten - voorziet bij elk product die er voor zorgen dat men veel compactere doch leesbaardere code kan schrijven dan voorheen. Vergelijk zelf:


Visual Basic .NET:
1
2
3
4
Dim nextSec
Set nextSec = CreateObject("WbemScripting.SWbemDateTime")
nextSec.SetVarDate(DateAdd("s", 1, currentTime))
strNext = "'" & nextSec.Value & "'"


PowerShell:
1
$strNext = "`'$([management.managementDateTimeConverter]::ToDmtfDateTime(($currentTime.AddSeconds(1))))`'"



Historiek van PoSh
Powershell is eigenlijk ontstaan in 2003 onder de naam Monad. Het is echter niet bijzonder gekend geweest aangezien het een soort alpha-versie was van wat later Powershell zou worden. Dat kwam er 3 jaar later.

Versie 1.0 werd uitgebracht in 2006 en is beschikbaar voor Windows XP SP2, Windows Server 2003, Windows Vista en zit als een optionele feature in Windows Server 2008.

Versie 2.0 is geïntegreerd in Windows 7 en Windows Server 2008 R2. Het is beschikbaar als een aparte installatie voor Windows XP met Service Pack 3, Windows Server 2003 met Service Pack 2 en Windows Vista met Service Pack 1.

Versie 3.0 is geïntegreerd in Windows 8 en Windows Server 2012. Het is beschikbaar als een aparte installatie voor Windows 7 met Service Pack 1, voor Windows Server 2008 met Service Pack 1 en voor Windows Server 2008 R2 met Service Pack 1 hier. Belangrijke opmerking evenwel:
IMPORTANT: Windows Management Framework 3.0 is not currently compatible with the following applications:
  • System Center 2012 Configuration Manager. For more information, see KB 2796086.
  • System Center Virtual Machine Manager. For more information, see KB 2795043.
  • Microsoft Exchange Server 2007 and Microsoft Exchange Server 2010. For more information, see Windows Management Framework 3.0 on Exchange 2007 and Exchange 2010.
  • Microsoft SharePoint 2010. For more information, see Windows PowerShell 3.0 and SharePoint 2010.
  • Windows Small Business Server 2008 and Windows Small Business Server 2011. For more information, see Windows Management Framework 3.0 applicability on Windows Small Business Server 2008/2011 Standard.
Systems that are running the above server applications should not run Windows Management Framework 3.0 at this time. WMF 3.0 is otherwise supported on Windows 7 SP1, Windows Server 2008 R2 SP1, and Windows Server 2008 SP2.
Versie 4.0 zal zitten in de releases van Windows 8.1 en Windows Server 2012 R2. Ongetwijfeld zal het ook apart te downloaden zijn.

Het verschil tussen de versies is voornamelijk het aantal cmdlets, al zat er tussen 1.0 en 2.0 ook een groot verschil in de error handling (in 1.0 moest alles nog met ErrorTrapping, in 2.0 is Try-Catch toegevoegd)



Cmdlets, WTF zijn dat?
Cmdlets is een verkleinvorm van commando dat in de Powershell-context gebruikt wordt voor, tja, commando's. Elk commando heeft een specifieke naamgeving: 'verb-noun' (werkwoord streepje zelfstandig naamwoord).

Enkele voorbeelden: Start-Service, Get-ExecutionPolicy, ...

Dit systeem maakt het gemakkelijk om cmdlets te raden. Hoe zou je een service stoppen of een ExecutionPolicy wijzigen? Je kan het raden op basis van de voorbeelden - dat is de intuïtiviteit waar ik het eerder over had.

Er zijn meer dan 2000 cmdlets, exclusief de cmdlets die met bepaalde producten meekomen (ActiveDirectory, BitLocker, Exchange, SCDPM, SCOM, SCCM, SCO, SCVMM, SCSM, SQL, ...), dus het is maar goed ook dat het systeem zo logisch opgebouwd is - maar natuurlijk is dat niet voldoende om de taal ten volle te benutten. Daarvoor bestaat de cmdlet Get-Command.

Met Get-Command kan je op zoek gaan naar het commando dat je nodig hebt. Je wil bijvoorbeeld wat doen met een process, maar je weet het commando niet. Weet dat Get-Command twee belangrijke parameters heeft: -Verb en -Noun. Door deze lijn vinden we alle cmdlets die met processen te maken hebben

PowerShell:
1
Get-Command -Noun Process


code:
1
2
3
4
5
6
7
CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Cmdlet          Debug-Process                                      Microsoft.PowerShell.Management
Cmdlet          Get-Process                                        Microsoft.PowerShell.Management
Cmdlet          Start-Process                                      Microsoft.PowerShell.Management
Cmdlet          Stop-Process                                       Microsoft.PowerShell.Management
Cmdlet          Wait-Process                                       Microsoft.PowerShell.Management


Voor elke cmdlet is er een tevens help-commando beschikbaar. Enige idee hoe dat heet? Rara: Get-Help.

Met het volgende vraag je de de help voor Start-Service:

PowerShell:
1
Get-Help Start-Service


Je hebt hier drie belangrijke parameters die je kan gebruiken: -Full, -Detailed, -Examples. Afhankelijk van je keuze krijg je meer of minder informatie terug. De parameternamen zijn zelfverklarend vermoeden we. Er is trouwens ook nog een -Online parameter, maar we laten het aan jou over te raden waar die voor dient.

Als je de cmdlets Get-Help en Get-Command kent kan je eigenlijk beginnen met Powershell. Om echte scripts te schrijven komt er natuurlijk nog meer bij te kijken: variabelen, parameters, functions, statements, enz. Deze thread dient echter niet als inleidende cursus Powershell, wel als teaser.



Voor de Unix mensen
In vele bedrijven gebeurt het wel dat een Unix-server overgezet wordt naar Windows tot onvrede van de Unixmensen, zeker als die mensen zelf geen generische Unixmensen zijn maar verantwoordelijken voor een bepaald product en bijgevolg moeten verhuizen van een Unixomgeving naar een Windowsomgeving.

Geen nood: ik heb enkele interne trainingen gegeven aan zulke mensen en tot mijn eigen verwondering was er zelfs bij de meest hardcore Unix-adepten enig enthousiasme over Powershell. In deze context is "enig enthousiasme" spectaculair - normaal gezien stopt men met luisteren zodra het woord Windows valt.

Powershell is namelijk beter dan bash moesten ze schoorvoetend toegeven. Het is object-georiënteerd (al zijn er blijkbaar manieren om bash ook OO te maken) en eenvoudiger. Stel dat Exchange zou draaien op linux en je moet alle services stoppen. In Powershell ziet dat er als volgt uit:


PowerShell:
1
Get-Service *Exchange* | Stop-Service


In bash (de meest gebruikte shell in Unix. In andere shells is het mogelijk makkelijker):
Bash:
1
ps uax | grep exchange | awk '{print $2}' | xargs kill


Als we de factor 'gewoonte' buiten beschouwing laten moeten men toch bekennen dat de PoSh-manier eenvoudiger, eleganter én efficiënter is.

Daar stop het evenwel niet voor de Unix-admins: het team achter PoSh is zo vriendelijk geweest om voor de meest courante Unix-commando's een alias te maken. Een voorbeeld: we willen de inhoud van een map zien. Dat kunnen we doen met de volgende commando's:
  • gci
  • dir
  • ls
Zowel de batch als de bash versie werken in PoSh! Deze drie aliassen - de eerste verklaart zichzelf nu - zijn van de cmdlet Get-ChildItem. Dit systeem met aliassen is redelijk uitgebreid, waardoor iemand die uit de Unix-wereld komt (of nog uit de DOS-wereld) vrij snel zijn weg kan vinden. Als een alias niet bestaat kan je hem altijd zelf maken trouwens. Er is een cmdlet Select-String waar out-of-the-box (vreemd genoeg) geen alias grep voor bestaat. Dat is dan meteen een van de eerste dingen die menig Unixer zal aliassen.

Toch nog een kleine doch belangrijke opmerking over die aliassen: de parameters die het aanvaardt zijn die van Powershell, niet van Unix (of DOS). Voor de meeste taken is dat geen probleem, maar voor exotischere dingen kan dat wel eens fout lopen.



OK, klinkt aardig. Hoe leer ik het nu?
Al doende uiteraard! Maar wat extra hulp is altijd handig :)

Vroeger was er online de geweldige Mastering PowerShell in your Lunch Break, maar die webpagina is offline gehaald omdat ze er een boek van wilden maken. Misschien vind je er wel nog ergens een kopij van terug op het internet.


Keith Hill heeft op zijn blog een interessante reeks als introductie:
Wie liever boeken heeft bevelen we zelf van harte JONES, Don, HICKS, Jeffrey; Windows Powershell: TFM; SAPIEN Press, 2007 aan. Binnenkort komt er misschien een nieuwe versie uit voor 3.0 aangezien dit boek nog 2.0 is (maar de verschillen zijn klein).



IDEs
Notepad is in principe al voldoende, maar Notepad++ heeft syntax highlighting voor PoSh. Standaard zit in Windows de Powershell ISE ingebakken, maar wie wat meer wil kan terecht bij PowerGUI
voor een freeware IDE. Als het wat geld mag kosten raadt YellowOnline Powershell Studio van Sapien aan. Wie een recente versie van Visual Studio heeft kan daarmee natuurlijk ook aan de slag.


Bedoeling van deze thread
In deze thread kan je zowel algemeen babbelen over PoSh als je problemen aanbrengen. Het combineren van PoSh en .NET met Office, WMI, SQL en dergelijke kan soms te ingewikkeld worden om alleen op te zoeken.

Het is in dit topic vooral niet de bedoeling om een flameware te hebben tussen Bash-ers en PoSh-ers.

[ Voor 13% gewijzigd door YellowOnline op 28-08-2017 11:28 . Reden: Intussen is er al lang een PoSh-lexer ]


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Leuk topic!

Je kunt ook wel grappige dingen doen met PowerShell zoals bijvoorbeeld, je computer laten spreken:

PowerShell:
1
(new-object -com SAPI.SpVoice).speak(PowerShell rocks!)

[ Voor 7% gewijzigd door Turdie op 27-09-2013 19:04 ]


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
shadowman12 schreef op vrijdag 27 september 2013 @ 19:01:
Leuk topic!

Je kunt ook wel grappige dingen doen met PowerShell zoals bijvoorbeeld, je computer laten spreken:

PowerShell:
1
(new-object -com SAPI.SpVoice).speak(PowerShell rocks!)
Of muziek maken :)

Title TK: There's music in the shell

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Ja, daar waren ook twee blogpost van op Hey!Scripting Guy blog (wellicht handig om dat blog ook in de TS te vermelden, heeft veel goede blogposts over PowerShell).

Weekend Scripter: Create a Visual Piano with Windows PowerShell
Weekend Scripter: Use Hash Table with PowerShell to Create a Simple Piano

Trouwens dat boek over Mastering PowerShell in your Lunch is er:
Learn Windows PowerShell in a Month of Lunches

[ Voor 9% gewijzigd door Turdie op 27-09-2013 19:42 ]


Verwijderd

Leuk topic, als sysadmin wil ik beginnen powershell leren.
Ik ben niet de beste programmeur maar heb in mijn opleiding toch verscheidene programmeertalen geleerd.
Iemand die dit boek kan aanraden: http://www.amazon.com/Win...words=powershell+cookbook

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Verwijderd schreef op zaterdag 28 september 2013 @ 12:06:
Leuk topic, als sysadmin wil ik beginnen powershell leren.
Ik ben niet de beste programmeur maar heb in mijn opleiding toch verscheidene programmeertalen geleerd.
Iemand die dit boek kan aanraden: http://www.amazon.com/Win...words=powershell+cookbook
De boeken van O'Reilly zijn altijd wel goed. Als autheur heb ik liever Don Jones dan Lee Holmes, maar die laatste z'n boek is wel meer up to date dan Powershell 2.0 TFM. Het is wachten op een nieuwe versie van dat boek - het oude wordt ook niet meer gedrukt.

Als je trouwens echt van 0 wil beginnen, onderstaande was toen het nog een webpagina was - ik heb het daar van geleerd ^^ - echt de moeite:
shadowman12 schreef op vrijdag 27 september 2013 @ 19:10:
[...]
Trouwens dat boek over Mastering PowerShell in your Lunch is er:
Learn Windows PowerShell in a Month of Lunches
Maar als je programmeerervaring hebt en het recentste wil, ga dan maar voor het boek dat je zelf voorstelt.

  • korsten
  • Registratie: September 2003
  • Laatst online: 14-09 18:35
Ik ben als systeembeheerder erg blij met Powershell, ik heb meerdere scripts zelf geschreven waaronder een script voor het aanmaken van gebruikers in mij AD, met mailbox, lync en diverse settings. Erg makkelijk en leuk.
Ik heb geen boek gebruikt maar als ik iets wil weten hoe het kan zoek ik gewoon op internet, er is genoeg leuks te vinden.

  • geenstijl
  • Registratie: Juli 2005
  • Niet online
Misschien zijn onderstaande links naar Microsoft Virtual Academy ook handig :)

http://www.microsoftvirtu...powershell-3-0-jump-start
http://www.microsoftvirtu...powershell-3-0-jump-start

  • ppl
  • Registratie: Juni 2001
  • Niet online

ppl

Het Exchange voorbeeld is een bar slecht voorbeeld. Er zijn diverse *nix systemen zoals Solaris, FreeBSD, OS X, Red Hat, CentOS, Arch Linux, etc. die een service commando kennen. Dan is het een kwestie van "service <actie> <naam van service>' en klaar. Verder is het van belang om service en proces niet met elkaar te verwarren op *nix platformen.

Het is ook niet erg handig om iets als "Als we de factor 'gewoonte' buiten beschouwing laten moeten men toch bekennen dat de PoSh-manier eenvoudiger, eleganter én efficiënter is." in de topic start te hebben staan wanneer men niet wil dat er een flamewar ontstaat tussen bash/powershell mensen. Hou het gewoon neutraal en laat alleen de verschillen zien zonder een waardeoordeel eraan te koppelen.

Voor de rest: zo gek is de keuze voor powershell niet. Als je iets als shellscripting als bij de *nix systemen wil hebben voor Windows kun je eigenlijk niet buiten powershell om. Wat ik me alleen afvraag is in hoeverre ik powershell kan toepassen in bijv. algemene *nix scripts (denk aan een script die je voor meerdere operating systems zou willen gebruiken). Iemand een idee/ervaring hiermee?

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Misschien zijn niet alle onderdelen 100% goed omschreven, en die zullen we dan ook wel aanpassen. Het gehele topic is ook niet bedoeld om een "bash" topic van te maken. "Dit werkt beter in Linux/Unix, dan in powershell" maar meer een topic om vragen over powershell en leuke dingen die je gevonden hebt kunt doen met powershell kunt doen.

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Ik vind PowerShell Remoting ook erg gaaf, dat je PowerShell functies/commando's op meerdere systemen kan uitvoeren. Hier een groot artikel over Implicit Remoting:

Remoting the Implicit Way


Ja, waren twee gave Jumpstarts van MVA, ik zat daarvoor ook in het Q&A Panel, was erg leuk om alle vragen van IT-ers wereldwijd te zien langskomen :)

[ Voor 93% gewijzigd door Turdie op 28-09-2013 21:00 ]


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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
ppl schreef op zaterdag 28 september 2013 @ 19:19:
[...]

Wat ik me alleen afvraag is in hoeverre ik powershell kan toepassen in bijv. algemene *nix scripts (denk aan een script die je voor meerdere operating systems zou willen gebruiken). Iemand een idee/ervaring hiermee?
Kan je beter omschrijven wat je precies bedoelt? Dwz. welk doel je wil bereiken?

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Heb er zelf geen ervaring mee, maar denk dat je dan moet kijken naar oplossingen zoals puppet of chef.

[ Voor 86% gewijzigd door punisher007 op 28-09-2013 22:44 ]

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • ppl
  • Registratie: Juni 2001
  • Niet online

ppl

ge-flopt schreef op zaterdag 28 september 2013 @ 19:43:
Het gehele topic is ook niet bedoeld om een "bash" topic van te maken.
Dat hoeft ook niet maar het is voor de *nix mensen wel handig om even een vergelijk te hebben zoals in de topic start ook geprobeerd wordt.
"Dit werkt beter in Linux/Unix, dan in powershell" maar meer een topic om vragen over powershell en leuke dingen die je gevonden hebt kunt doen met powershell kunt doen.
En juist daarom past de zin die ik noemde ook niet in de topic start of elders in het topic.
YellowOnline schreef op zaterdag 28 september 2013 @ 22:35:
Kan je beter omschrijven wat je precies bedoelt? Dwz. welk doel je wil bereiken?
Niet iets specifieks maar je zou kunnen denken aan het checken van updates en daarna rebooten om maar eens wat te noemen. Andersom is misschien ook wel interessant. Je kunt nu met Powershell en PowerCLI een VMware ESXi doos beheren. Zou je dit ook kunnen doen met een Linux server middels dat Powershell? Met andere woorden: is Powershell beperkt tot alleen Windows of kun je er wat meer mee?

Wat punisher007 aandraagt is hoe je het ook zou kunnen doen maar iets als Chef en Puppet vereisen een complete server die je er voor moet optuigen en is ook wat meer beperkt tot het configureren van een machine (client, server); niet zo zeer om bepaalde aspecten te beheren en/of te monitoren.

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

ppl schreef op zondag 29 september 2013 @ 00:20:
Je kunt nu met Powershell en PowerCLI een VMware ESXi doos beheren. Zou je dit ook kunnen doen met een Linux server middels dat Powershell? Met andere woorden: is Powershell beperkt tot alleen Windows of kun je er wat meer mee?
In principe zou het wel mogelijk moeten zijn om een PowerShell kloon te maken die op Mono draait maar ik denk dat je je in behoorlijke bochten moet gaan wringen om met één PowerShell script zowel Windows als UNIX te beheren. De OS'en zijn gewoon te verschillend zelfs als je op beide platformen PowerShell zou kunnen draaien.

Overigens zou je ook aan Perl of Python kunnen denken als je perse een platformonafhankelijke scripttaal wilt.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
ppl schreef op zondag 29 september 2013 @ 00:20:
[...]
Niet iets specifieks maar je zou kunnen denken aan het checken van updates en daarna rebooten om maar eens wat te noemen. Andersom is misschien ook wel interessant. Je kunt nu met Powershell en PowerCLI een VMware ESXi doos beheren. Zou je dit ook kunnen doen met een Linux server middels dat Powershell? Met andere woorden: is Powershell beperkt tot alleen Windows of kun je er wat meer mee?
Op *nix kun je niks met PowerShell. PowerShell praat namelijk tegen .NET aan, en dat heb je niet op *nix systemen.Met PowerShell kun je volgens mij wel tegen WinRM scripten (een Microsoft implementatie van de WS-Management standaard), en wellicht kun je daarmee ook wat op *nix systemen (geen ervaring mee)

PowerShell is niet alleen beperkt tot Windows, ook andere Microsoft producten kun je er mee beheren (SharePoint, Exchange, System Center, Lync,App-V,Office 365, Azure)

[ Voor 10% gewijzigd door Turdie op 29-09-2013 02:12 ]


Acties:
  • 0 Henk 'm!

  • korsten
  • Registratie: September 2003
  • Laatst online: 14-09 18:35
Misschien dat je met powershell en SSH iets zou kunnen maar dat zou mogelijk wel zijn beprekingen kennen. Ik heb het in ieder geval nog niet geprobeerd.

Acties:
  • 0 Henk 'm!

  • Andre_J
  • Registratie: September 2005
  • Laatst online: 20:36
Powershell is enorm krachtig.
Ons loginscript is compleet powershell, printer/drive mapping, start menu, outlook handtekening.
USB-storage control voor W7, update checker, vmware snapshots checker.
User migratie, noem maar op, al vele dingen mee gemaakt en nog niet klaar :)

Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Ook een idee voor het beheer van Linux via Powershell: Webmin. Ok het is niet de meest makkelijke methode, maar omdat je met Powershell gewoon pagina's kunt openen en bewerken (forms) kun je dus simpel beheer doen. Wil je wat complexere dingen zul je toch denk ik Powershell een connectie moeten laten maken via SSH.

Acties:
  • 0 Henk 'm!

  • killercow84
  • Registratie: Juli 2008
  • Laatst online: 13-09 08:15
Om met powershell iets te doen op een *nix bak kun je het makkelijkst putty gebruiken.
Hiermee stuur je gewoon het bash (via SSH) commando wat je wilt uitvoeren naar desbetreffende server.
Zelf gebruik ik het om de Netapps te beheren.

Acties:
  • 0 Henk 'm!

  • korsten
  • Registratie: September 2003
  • Laatst online: 14-09 18:35
wat trouwens ook nog een leuke is is dit blog:
http://blogs.technet.com/b/heyscriptingguy/

@the_nowhereman
Kan je een tipje van de sluier oplichten van je loginscritp betreffende de outlook handtekening.

Acties:
  • 0 Henk 'm!

  • Oogje
  • Registratie: Oktober 2003
  • Niet online
Mooi topic, begin me steeds meer te verdiepen in Powershell en heb al een eigen "bijbeltje" ondertussen met een aantal handige scripts die ik in elkaar gedraaid heb met behulp van internet.
Ik blijf het topic volgen :)

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


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
the_nowhereman schreef op zondag 29 september 2013 @ 20:52:
Powershell is enorm krachtig.
Ons loginscript is compleet powershell, printer/drive mapping, start menu, outlook handtekening.
USB-storage control voor W7, update checker, vmware snapshots checker.
User migratie, noem maar op, al vele dingen mee gemaakt en nog niet klaar :)
Spijtig genoeg zijn heel wat dingen moeilijk uit te vissen. Wat sample code van mij van minder courante dingen.

Dit is wat ik gebruik om onze harde schijven in orde te zetten:

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
Function Initialize-Disks ()
    {
    $Drives = Get-WmiObject Win32_DiskDrive
    $ScriptDisk = $Null
    $ScriptBlock = $Null
    ForEach ($Disk in $Drives)
        {
        If ($Disk.Partitions -EQ "0")
            {
            $DiskSize = "{0:N2}" -f $($Disk.Size/1073741824) 
            $DriveNumber = $Disk.DeviceID -Replace '[\\\\\.\\physicaldrive]',''
            $ScriptBlock = @"
select disk $DriveNumber
online disk noerr
attributes disk clear readonly noerr
create partition primary noerr
format quick
"@
            }
    $DriveNumber = $Null
    $ScriptDisk += $ScriptBlock + "`n"
        }
    $ScriptDisk | DiskPart | Out-Null   
    }


User quota instellen

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Function Setup-QuotaManagement()
    {
    Add-WindowsFeature FS-Resource-Manager | Out-Null
    
    $QuotaManagerTemplate = New-Object -ComObject Fsrm.FsrmQuotaTemplateManager
    $5GB = $QuotaManagerTemplate.CreateTemplate()
    $5GB.Name = "5 GB Limit"
    $5GB.QuotaLimit = 5 * 1073741824
    $5GB.Commit()
    
    $500MB = $QuotaManagerTemplate.CreateTemplate()
    $500MB.Name = "50 MB Limit"
    $500MB.QuotaLimit = 50 * 1048576
    $500MB.Commit()
    
    $QuotaManager = New-Object -ComObject Fsrm.FsrmQuotaManager
    $QuotaHome = $QuotaManager.CreateAutoApplyQuota("5 GB Limit","E:\Home")
    $QuotaHome.Commit()
    
    $QuotaPrivate = $QuotaManager.CreateAutoApplyQuota("50 MB Limit","H:\Private")
    $QuotaPrivate.Commit()
    }


Oh, en ACL is a bitch (constanten ontbreken).

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
Function Create-Folders ()
    {
    Try
        {
        [IO.Directory]::CreateDirectory($FolderHome) | Out-Null
        }
    Catch
        {
$Error[0]
        }
    
    Try
        {
        NET SHARE ""Home$"=$FolderHome" "/GRANT:Everyone,FULL" "/Unlimited" "/Cache:Manual" | Out-Null
        }
    Catch
        {
        $Error[0]
        }
    
    $ACLHome = Get-Acl $FolderHome
    If ($ACLHome.AreAccessRulesProtected) 
        {
        $ACLHome.Access | % {$ACLHome.PurgeAccessRules($_.IdentityReference)}
        }
    Else 
        {
        $IsProtected = $true 
        $PreserveInheritance = $false
        $ACLHome.SetAccessRuleProtection($IsProtected, $PreserveInheritance) 
        }
    $ACLHomeAccessRule1 = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone", "$rightRead, $rightCreateDirectories, $rightAppendData", $flagNone, $propNone, $typeAllow)
    $ACLHomeAccessRule2 = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators",$rightFullControl, "$flagContainerInherit, $flagObjectInherit", $propNone, $typeAllow)
    $ACLHomeAccessRule3 = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\SYSTEM",$rightFullControl, "$flagContainerInherit, $flagObjectInherit", $propNone, $typeAllow)
    $ACLHomeAccessRule4 = New-Object System.Security.AccessControl.FileSystemAccessRule("CREATOR OWNER",$rightFullControl, "$flagContainerInherit, $flagObjectInherit", $propNone, $typeAllow)
    $ACLHomeAccessRule5 = New-Object System.Security.AccessControl.FileSystemAccessRule("DlEenOfAndereGroepUserRedirection_W",$rightFullControl, "$flagContainerInherit, $flagObjectInherit", $propNone, $typeAllow)
    $ACLHome.AddAccessRule($ACLHomeAccessRule1)
    $ACLHome.AddAccessRule($ACLHomeAccessRule2)
    $ACLHome.AddAccessRule($ACLHomeAccessRule3)
    $ACLHome.AddAccessRule($ACLHomeAccessRule4)
    $ACLHome.AddAccessRule($ACLHomeAccessRule5)
    Set-Acl -ACLObject $ACLHome -Path $FolderHome
}

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Dit is ook wel een mooie met heel veel info over PowerShell:

Windows PowerShell Survival Guide




En ik kwam dit script tegen (gemaakt door PowerShell MVP Jeff Wouters) om de ACL op een folder te achterhalen:
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
function Get-NTFSPermissions {
    <#
    .SYNOPSIS
    Gets the NTFS rights set on a folder.
    .DESCRIPTION
    Gets the NTFS rights set on a folder and outputs the groups and users (recursive) in those groups.
    The output can be redirected to a CSV or manipulated by using PowerShell cmdlets.
    .PARAMETER ShareName
    This parameter takes the name of the share you want to get the NTFS rights from as input.
    .PARAMETER DomainName
    This parameter takes the NETBIOS name of your domain as input.
    .PARAMETER GroupsOnly
    This parameter is not mandatory and allows you to output only the shares, groups
    and their respective rights.
    .EXAMPLE
    Get-FolderRights -ShareName '\\server.lan\share$\folder' -DomainName 'AD'
 
    This example takes the name and path of the share as input, aswell as the NETBIOS name of the domain.
    .EXAMPLE
    Get-FolderRights -ShareName '\\server.lan\share$\folder' -DomainName 'AD' | Convertto-CSV | Out-file NTFSRights.csv
 
    This example takes the name and path of the share as input, aswell as the
    NETBios name of the domain.     Next the output is converted to CSV and written to a CSV file.
    .EXAMPLE
    Get-FolderRights -ShareName '\\server.lan\share$\folder' -DomainName 'AD' -GroupsOnly $true
 
    This example takes the name and path of the share as input, aswell as the NETBIOS name of the domain.
    Because the -GroupsOnly parameter is used, only rights for the groups are
    gathered and not the users inside the groups.
    .NOTES
    AUTHOR    :  Jeff Wouters
    COMPANY   :  Methos
    #>
    #Requires &#8211;Modules ActiveDirectory
    [cmdletbinding()]
    param (
        [parameter(mandatory=$true,position=0)]$ShareName,
        [parameter(mandatory=$true,position=1)]$DomainName,
        [parameter(mandatory=$false)]$GroupsOnly=$false
    )
    $Output = @()
    foreach ($Share in $ShareName) {
        $ACLs = Get-Acl -Path $Share
        foreach ($ACL in $ACLs) {
            foreach ($AccessRight in $ACL.Access) {
                $ObjectGroup = New-Object -TypeName PSObject
                $ObjectGroup | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'DirectoryPath' &#8211;Value $Share
                $ObjectGroup | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'Identity' &#8211;Value $AccessRight.IdentityReference
                $ObjectGroup | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'SystemRights' &#8211;Value $AccessRight.FileSystemRights
                $ObjectGroup | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'SystemRightsType' &#8211;Value $AccessRight.AccessControlType
                $ObjectGroup | Add-Member -MemberType NoteProperty -Name 'IsInherited' -Value $AccessRight.IsInherited
                $ObjectGroup | Add-Member -MemberType NoteProperty -Name 'InheritanceFlags' -Value $AccessRight.InheritanceFlags
                $ObjectGroup | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'RulesProtected' &#8211;Value $ACL.AreAccessRulesProtected
                if ($GroupsOnly -eq $true) {
                    $ObjectGroup
                } else {
                    $Groups = $ObjectGroup | Select-Object -ExpandProperty 'Identity'
                    foreach ($Group in $Groups) {
                        if ($Group -like "$DomainName\*") {
                            $grp = $Group.tostring()
                            $gp = $grp.replace("$DomainName\",'')
                            $Users = Get-ADGroupMember -Recursive -Identity $gp
                            foreach ($User in $Users) {
                                $ObjectUser = New-Object -TypeName PSObject
                                $ObjectUser | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'DirectoryPath' &#8211;Value $Share
                                $ObjectUser | Add-Member -MemberType NoteProperty -Name 'Group' -Value $gp
                                $ObjectUser | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'SystemRights' &#8211;Value $ObjectGroup.SystemRights
                                $ObjectUser | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'SystemRightsType' &#8211;Value $ObjectGroup.SystemRightsType
                                $ObjectUser | Add-Member -MemberType NoteProperty -Name 'IsInherited' -Value $ObjectGroup.IsInherited
                                $ObjectUser | Add-Member -MemberType NoteProperty -Name 'InheritanceFlags' -Value $ObjectGroup.InheritanceFlags
                                $ObjectUser | Add-Member &#8211;MemberType NoteProperty &#8211;Name 'RulesProtected' &#8211;Value $ObjectGroup.RulesProtected
                                $Usr = $User | Select-Object -expandproperty 'samaccountname'
                                $ObjectUser | Add-Member -MemberType NoteProperty -Name 'UserName' -Value $Usr
                                $ObjectUser
                            }
                        }
                    }
                }
            }
        }
    }
}

[ Voor 129% gewijzigd door Turdie op 01-10-2013 15:51 ]


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Ik ben bezig om een rapportage te maken bij een nieuw opgeleverd cluster. Hierbij komt de volgende vraag naar boven die ik probeer om te zetten in powershell.

Weet iemand een manier om te controleren of je met RDP daadwerkelijk kunt inloggen?
Je kunt met de volgende commando testen of de poort open staat:
PowerShell:
1
New-Object System.Net.Sockets.TCPClient -ArgumentList SERVER,3389
Maar wij willen testen of we met onze accounts in kunnen loggen. Reden van de vraag is dat onze ESP nog wel eens vergeet om ons de rechten te geven om in te kunnen loggen. Met bovenstaande test kun je zien of de poort open staat en niet of je daadwerkelijk kunt inloggen.

Natuurlijk als er een andere manier is om te testen of iemand ik zou kunnen loggen via RDP (zonder gebruik te maken van RDP) is dat ook geen probleem.

Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
shadowman12 schreef op dinsdag 01 oktober 2013 @ 15:44:
Dit is ook wel een mooie met heel veel info over PowerShell:

Windows PowerShell Survival Guide




En ik kwam dit script tegen (gemaakt door PowerShell MVP Jeff Wouters) om de ACL op een folder te achterhalen:
Gebruik de C# lexer voor leesbaarheid. Oh, en er is iets met de encoding fout gegaan.
Mis ik iets of is dat gewoon Get-Acl herwerkt naar een custom object? :? Gewoon Get-Acl doet nl. net hetzelfde als dat script, alleen ziet de output er wat anders uit. Heb het niet getest door de encoding issues, maar op het eerste zicht weet ik niet wat de meerwaarde is. ACLs achterhalen is immers geen issue (...zolang je rechten hebt om de ACL op te vragen :+). Het wijzigen van ze, wat ik mijn code hoger illustreer, is stukken omslachtiger.

Edit: OK, heb intussen zijn originele post gezien. Syntax highlighting doet veel :) Het is zoals ik dacht inderdaad niet meer dan een custom object dat hij maakt. Dat object is een net overzicht om te exporteren naar CSV of zo. Om ACLs te achterhalen binnen de context van een breder script (dan enkel een export van permissies) is het evenwel overbodige code.
ge-flopt schreef op dinsdag 01 oktober 2013 @ 16:32:
Ik ben bezig om een rapportage te maken bij een nieuw opgeleverd cluster. Hierbij komt de volgende vraag naar boven die ik probeer om te zetten in powershell.

Weet iemand een manier om te controleren of je met RDP daadwerkelijk kunt inloggen?
Je kunt met de volgende commando testen of de poort open staat:
PowerShell:
1
New-Object System.Net.Sockets.TCPClient -ArgumentList SERVER,3389
Maar wij willen testen of we met onze accounts in kunnen loggen. Reden van de vraag is dat onze ESP nog wel eens vergeet om ons de rechten te geven om in te kunnen loggen. Met bovenstaande test kun je zien of de poort open staat en niet of je daadwerkelijk kunt inloggen.

Natuurlijk als er een andere manier is om te testen of iemand ik zou kunnen loggen via RDP (zonder gebruik te maken van RDP) is dat ook geen probleem.
Ik denk dat dit wel doet wat je wil. Try it out.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function Check-RDPAvailability ($Computer)
    {
    #By YellowOnline for ge-flopt, 01/10/2013
    $ServerQuery = (Get-WMIObject Win32_TerminalServiceSetting -Authentication PacketPrivacy -Impersonation Impersonate -Computer $Computer -Namespace ROOT\CIMV2\TerminalServices -ErrorAction SilentlyContinue).AllowTsConnections
    If ($ServerQuery -EQ 1)
        {
        Write-Host "RDP is enabled" -ForegroundColor Green
        }
    ElseIf  ($ServerQuery -EQ 0)
        {
        Write-Host "RDP is disabled" -ForegroundColor Yellow
        }
    Else
        {
        Write-Host "$($Error[0])" -ForegroundColor Red
        }
    }


Edit: De Else dient om eventuele ACCES_DENIED of RPC_UNAVAILABLE op te vangen. Met Try/Catch zal dat niet lukken bij Get-WMIObject. Je zou echt al old-school met Trap moeten werken, maar dit vond ik eleganter.

Oh, en de $ServerQuery deed ik niet in de Else/ElseIf/Else constructie om performanceredenen. Die extra variabele merk je niet terwijl je 2 keer dezelfde query doen wél zou merken.

[ Voor 36% gewijzigd door YellowOnline op 01-10-2013 17:15 ]


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Controleert dit niet alleen of een RDP sessie mogelijk is? Ik wil eigenlijk weten of ik (of mijn collega's) een RDP sessie kunnen opzetten en of we daadwerkelijk kunnen inloggen.

Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
ge-flopt schreef op dinsdag 01 oktober 2013 @ 18:55:
Controleert dit niet alleen of een RDP sessie mogelijk is? Ik wil eigenlijk weten of ik (of mijn collega's) een RDP sessie kunnen opzetten en of we daadwerkelijk kunnen inloggen.
Probeer het eens op een server waar je niet op kan inloggen en zie wat het script returned. Ik kan het moeilijk reproduceren omdat ik zelf sowieso geen toegang heb tot de Citrix servers (waar dit scenario courant is).

Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Ok, thx ik ga het morgen wel even testen.

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
In mijn ogen controleert dit alleen of RDP is enabled op de server, niet of je account voldoende rechten heeft en daadwerkelijk rdp verbinding kan opzetten.

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • SteeringWheel
  • Registratie: Augustus 2004
  • Laatst online: 22-05 16:46
punisher007 schreef op dinsdag 01 oktober 2013 @ 21:00:
In mijn ogen controleert dit alleen of RDP is enabled op de server, niet of je account voldoende rechten heeft en daadwerkelijk rdp verbinding kan opzetten.
Lijkt me ook. Hiermee kun je een rdp sessie op zetten MSDN: Remote Desktop ActiveX control (Windows). Bv Terminals gebruikt het http://terminals.codeplex...nections/RDPConnection.cs.

A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
punisher007 schreef op dinsdag 01 oktober 2013 @ 21:00:
In mijn ogen controleert dit alleen of RDP is enabled op de server, niet of je account voldoende rechten heeft en daadwerkelijk rdp verbinding kan opzetten.
Ik gebruik authenticatie, wat al heel wat meer is dan een poort controleren zoals in het eerste voorstel.

C#:
1
New-Object System.Net.Sockets.TCPClient -ArgumentList $Computer,3389


Premisse is dat de credentials om access te krijgen tot WMI om AllowTSConnections op te vragen ook geweigerd worden als RDP niet gaat, ondanks dat RDP toegestaan is.

Maar zoals gezegd: ik heb het niet kunnen reproduceren dus hij zal het zelf even moeten testen.
Ouch, die code staat vol schrijffouten. My eyes, my eyes! In ieder geval, als mijn code niet werkt dan staat daar inderdaad wel wat code in die geport kan worden van C# naar PoSh.

[ Voor 29% gewijzigd door YellowOnline op 01-10-2013 22:11 ]


Acties:
  • 0 Henk 'm!

  • SteeringWheel
  • Registratie: Augustus 2004
  • Laatst online: 22-05 16:46
YellowOnline schreef op dinsdag 01 oktober 2013 @ 22:05:

Ouch, die code staat vol schrijffouten. My eyes, my eyes! In ieder geval, als mijn code niet werkt dan staat daar inderdaad wel wat code in die geport kan worden van C# naar PoSh.
Maar wel een fijne opensource connection manager :)

Die activex control is wel veel werk. Jouw code icm het checken van de juiste permissies (Adhv groeplidmaatschap e.d.) lijkt me een stuk minder werk met netto hetzelfde resultaat. Moet er wel Wmi toegang mogelijk zijn uiteraard.

A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Ik denk dat ik daar inderdaad maar op ga controleren. Ik heb al gecontroleerd dat onze groep in local administrators zit en dat poort 3389 open staat, dat moet (in theorie) denk ik voldoende zijn om een RDP connectie op te zetten. THX in ieder geval.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
ge-flopt schreef op dinsdag 01 oktober 2013 @ 23:27:
Ik denk dat ik daar inderdaad maar op ga controleren. Ik heb al gecontroleerd dat onze groep in local administrators zit en dat poort 3389 open staat, dat moet (in theorie) denk ik voldoende zijn om een RDP connectie op te zetten. THX in ieder geval.
Je hoeft per se in de Local Admins groep te zitten om een Remote Desktop verbinding op te mogen bouwen. De "Remote Desktop Users' kan ook :) (behalve op domain controllers). Dus wellicht dien je daar ook rekening mee te houden in je script ;)

[ Voor 9% gewijzigd door Turdie op 01-10-2013 23:42 ]


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
ge-flopt schreef op dinsdag 01 oktober 2013 @ 19:01:
Ok, thx ik ga het morgen wel even testen.
Heb je 't nu geprobeerd?

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Als je die rechten hebt om lokaal dingen op de server uit te lezen, dan zou ik inderdaad uitlezen:
1) Groepslidmaatschappen
2) Of RDP is enabled.
3) Of je vanaf de gewenste lokatie poort 3389 kan bereiken.

Eventueel nog firewall en routes afhankelijk van je omgeving.

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
En we blijven wachten op een reactie van ge-flopt :)

Acties:
  • 0 Henk 'm!

  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 05-09 10:03
Hebben jullie ervaring met de Windows 2012 cmdlets om AD-objecten te beheren (voornamelijk groepen en gebruikers)? Ik heb (nog steeds) te weinig tijd gehad hier mee te spelen.

In 2008 en eerder gebruik ik de cmdlets van quest . Deze zijn zeer mooi (al zitten er wat bugs in), maar ik zou graag native cmdlets zien welke t zelfde kunnen. Is dit in Windows 2012 (R2) al het geval, of moet ik toch de quest cmdlets blijven gebruiken?

Wilde altijd al iets over computers weten


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
SirDarkAngel schreef op donderdag 03 oktober 2013 @ 14:09:
Hebben jullie ervaring met de Windows 2012 cmdlets om AD-objecten te beheren (voornamelijk groepen en gebruikers)? Ik heb (nog steeds) te weinig tijd gehad hier mee te spelen.

In 2008 en eerder gebruik ik de cmdlets van quest . Deze zijn zeer mooi (al zitten er wat bugs in), maar ik zou graag native cmdlets zien welke t zelfde kunnen. Is dit in Windows 2012 (R2) al het geval, of moet ik toch de quest cmdlets blijven gebruiken?
Ik heb nooit de Quest cmdlets gebruikt, noch in 2008R2, noch in 2012. Heb nog maar sinds gisterenavond m'n eerste 2012R2 (PoSh 4) overigens. Wat kunnen de native cmdlets van PoSh 2.0, eventueel aangevuld met modules zoals ActiveDirectory, OpsMgr, Exchange etc., niet dat Quest wel kan? Voor PoSh 1.0 kan ik me dat wel voorstellen, maar sinds PoSh 2.0...?

Edit: ik zie nu pas dat je linkt naar AD-cmdlets. Ik heb tot nu toe toch nog niet echt iets tegengekomen dat ik niet native in PoSh kan doen met de ActiveDirectory-module.

[ Voor 8% gewijzigd door YellowOnline op 03-10-2013 18:09 ]


Acties:
  • 0 Henk 'm!

  • Oogje
  • Registratie: Oktober 2003
  • Niet online
YellowOnline schreef op donderdag 03 oktober 2013 @ 14:44:


Edit: ik zie nu pas dat je linkt naar AD-cmdlets. Ik heb tot nu toe toch nog niet echt iets tegengekomen dat ik niet native in AD kan doen met de ActiveDirectory-module.
Klopt, vanaf 2008R2 is de AD-module een heerlijke aanvulling op PS.

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


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
YellowOnline schreef op donderdag 03 oktober 2013 @ 12:50:
En we blijven wachten op een reactie van ge-flopt :)
Sorry... :P Ik ben nog verder aan het zoeken geweest en het is bijna niet mogelijk om inderdaad een RDP sessie daadwerkelijk op te zetten. We hebben het nu opgelost door te kijken of de RDP open staat en of we volgens de server zouden mogen inloggen. Het is niet anders dus doen we het nu maar zo.

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Alles kan vast wel via de ActiveDirectory module, maar met de Quest AD tools zijn bepaalde dingen veeeeel makkelijker omdat ze al ingebouwd zijn. Bekijk de beschikbare parameters maar eens van de Quest cmdlets.

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
punisher007 schreef op donderdag 03 oktober 2013 @ 18:15:
Alles kan vast wel via de ActiveDirectory module, maar met de Quest AD tools zijn bepaalde dingen veeeeel makkelijker omdat ze al ingebouwd zijn. Bekijk de beschikbare parameters maar eens van de Quest cmdlets.
Wil ik wel geloven, maar ik heb graag wel eens een voorbeeld. Je verliest trouwens een hoop portability als je begint met third-party cmdlets.

Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Vandaag lekker in de weer geweest met WMI in combinatie met PoSh. Fijn is het uitlezen van cluster resources. Alleen het terug herleiden van harddisk resources naar drive letters geeft wel wat uitdagingen.

Waarom ik niet de Cluster provider gebruik die in windows zat? Vrij simpel windows 2008 cluster provider had 2 probleempjes: Hij las de windows 2003 cluster resources niet in, dit kon hij simpel weg niet. probleem 2 was dat hij wel het cluster kon vinden met "get-cluster" (commando is even uit mijn hoofd), maar met de rest van de commando's kreeg ik een foutmelding die (als ik zocht op google) ik slecht 8 hits terug kreeg.

Maar met WMI lukt het ook goed, het is alleen even zoeken naar de goede classes.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Ik zag vandaag een interessante blogpost voor bij komen hoe je websites via REST/JSON kunt uitlezen met PowerShell:

http://blogs.technet.com/...d-for-the-rest-of-us.aspx

Acties:
  • 0 Henk 'm!

  • RedCellNL
  • Registratie: September 2003
  • Laatst online: 11-04-2024
Ik probeer een service aan te maken met PowerShell welke eerste door de command prompt werd aangemaakt door middel van:

sc create NAAM1 binPath= "C:\TDFSD.sys" Type= kernel start= auto DisplayName= "NAAM1"

En nu heb ik: New-Service -Name NAAM1 -BinaryPathName "C:\TDFSD.sys" -DisplayName NAAM1

Echter kent New-Service geen optie om Type Kernel te selecteren.

Iemand enig idee hoe ik via PowerShell toch een kernel service kan aanmaken?

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Ik heb net even snel gekeken, maar ik zie zo snel ook geen optie om de Type mee te geven. Maar is er een bepaalde reden waarom je het in PowerShell wil doen ? PowerShell kan ook gewoon met bestaande cmd line tools overweg.

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • RedCellNL
  • Registratie: September 2003
  • Laatst online: 11-04-2024
Alleen vanuit standaardisatie.

Maar toch apart dat er dus met SC meer kan dan met New-Service.

Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Voorlopig althans. Er zijn nog parameters die SC heeft en New-Service niet. Vergelijk:

code:
1
sc [ServerName] config [ServiceName] [type= {own|share|kernel|filesys|rec|adapt|interact type= {own|share}}] [start= {boot|system|auto|demand|disabled}] [error= {normal|severe|critical|ignore}] [binpath= BinaryPathName] [group= LoadOrderGroup] [tag= {yes|no}] [depend= dependencies] [obj= {AccountName|ObjectName}] [displayname= DisplayName] [password= Password]


code:
1
New-Service [-Name] <string> [-BinaryPathName] <string> [-Credential <PSCredential>] [-DependsOn <string>] [-Description <string>] [-DisplayName <string>] [-StartupType {Automatic | Manual | Disabled}] [-Confirm] [-WhatIf] [<CommonParameters>]

Acties:
  • 0 Henk 'm!

  • gillegun
  • Registratie: Maart 2010
  • Laatst online: 01-02 20:07
Iemand die mij kan helpen met een powershell script (ja het is een opdracht voor school, maar ik geraak er niet meer aan uit)

Modbreakje: knip. Zie F_J_K in "Het grote Powershell topic"

[ Voor 29% gewijzigd door F_J_K op 31-10-2013 15:02 ]


Acties:
  • 0 Henk 'm!

  • SteeringWheel
  • Registratie: Augustus 2004
  • Laatst online: 22-05 16:46
Als je nou eens begint duidelijk je probleem uit te leggen dan kan je gewoon in dit topic geholpen worden.

A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

gillegun schreef op donderdag 31 oktober 2013 @ 14:38:
Iemand die mij kan helpen met een powershell script (ja het is een opdracht voor school, maar ik geraak er niet meer aan uit) gelieve te pm'en
GoT is niet bedoeld voor het zoeken van prive-les. Je bent natuurlijk welkom om concrete vragen te stellen over een specifiek iets waar je vastloopt kan je (vergezeld van huidige ontwerp / code, foutmeldingen, etc).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Het is donderdagmiddag, ik ben moe, en morgen is een feestdag. Wie helpt me uit de nood om mijn code af te werken? :)

Dit is productiecode die perfect werkt:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
If ((($DataArray | Where-Object {($_.Name -EQ $Server.Name) -And ($_.Drive -EQ $Server.Drive)})) -EQ $Null)
    {
    $Machine = New-Object System.Object
    $Machine | Add-Member -MemberType NoteProperty -Name Name -Value $Server.Name
    $Machine | Add-Member -MemberType NoteProperty -Name Drive -Value $Server.Drive
    $Machine | Add-Member -MemberType NoteProperty -Name Volume -Value $Server.Volume
    $Machine | Add-Member -MemberType NoteProperty -Name DiskSize -Value $Server.DiskSizeGB
    $Machine | Add-Member -MemberType NoteProperty -Name $Month -Value $Server.UsedSpaceGB
    $DataArray += $Machine
    }
Else
    {
    $DataArray | Where-Object {($_.Name -EQ $Server.Name) -And ($_.Drive -EQ $Server.Drive)} | Add-Member -MemberType NoteProperty -Name $Month -Value $Server.UsedSpaceGB
    }


Nu moet ik iets kleins toevoegen en ik vind niet hoe, nl. in mijn Else clause moet de NoteProperty DiskSize geüpdatet worden. Als ik het doe met Add-Member blablabla -Force om de huidige waarde te overschrijven, dan verandert de volgorde van de objecten in de array - en die volgorde is van groot belang voor de rest van m'n script. Ik heb niet veel speelruimte: het moet in die Else gebeuren.

Een beetje meer context: het script (waar dit een snippet van is) geeft een overzicht in Excel van alle servers met bepaalde schijven en hun grootte; en per maand hoeveel ruimte er in gebruik is.

Er is een kolom waarin de vrije schijfruimte als percentage weergegeven wordt en vandaag zag ik daar een negatief getal opduiken. Reden: een scenario waar ik geen rekening mee had gehouden. De DiskSize wordt vastgelegd de eerste keer dat een server ontdekt wordt. Als later die disksize geresized wordt dan blijft de waarde van DikSize op zijn oorspronkelijke waarde, aangezien bij bestaande servers (de Else clause) enkel de data van de laatste maand toegevoegd wordt. Ik ben dus op zoek naar een mechanisme om elke maand de noteproperty DiskSize in de Else te updaten met $Server.DiskSizeGB.

Ideeën; ik hoor ze graag!

Acties:
  • 0 Henk 'm!

  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 05-09 10:03
Probeersel (Geen idee of het de oplossing is, maar hopelijk kan je er iets mee)

C#:
1
2
3
foreach ($Machine in ($DataArray | where {($_.Name -EQ $Server.Name) -And ($_.Drive -EQ $Server.Drive)})) { 
    $Machine.DiskSize = $Server.DiskSizeGB
}

[ Voor 172% gewijzigd door SirDarkAngel op 31-10-2013 16:40 ]

Wilde altijd al iets over computers weten


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
SirDarkAngel schreef op donderdag 31 oktober 2013 @ 16:21:
Probeersel (Geen idee of het de oplossing is, maar hopelijk kan je er iets mee)

C#:
1
2
3
foreach ($Machine in ($DataArray | where {($_.Name -EQ $Server.Name) -And ($_.Drive -EQ $Server.Drive)})) { 
    $Machine.DiskSize = $Server.DiskSizeGB
}
Als ik in die Else een ForEach steek dan gaat m'n performance er zwaar onderdoor gaan :/ Ik zoek eerder iets in de richting van

C#:
1
$DataArray | Where-Object {($_.Name -EQ $Server.Name) -And ($_.Drive -EQ $Server.Drive)} | $_.DiskSize = $Server.DiskSizeGB


... maar dit lijkt mij syntaxgewijs niet te gaan. Ben intussen thuis voor verlengd weekend, dus kan niet proberen voor maandag.

Acties:
  • 0 Henk 'm!

  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 05-09 10:03
YellowOnline schreef op donderdag 31 oktober 2013 @ 17:42:
[...]


Als ik in die Else een ForEach steek dan gaat m'n performance er zwaar onderdoor gaan :/ Ik zoek eerder iets in de richting van

C#:
1
$DataArray | Where-Object {($_.Name -EQ $Server.Name) -And ($_.Drive -EQ $Server.Drive)} | $_.DiskSize = $Server.DiskSizeGB


... maar dit lijkt mij syntaxgewijs niet te gaan. Ben intussen thuis voor verlengd weekend, dus kan niet proberen voor maandag.
Heb je de performance verlies daadwerkelijk gezien, of verwacht je dat? Ik denk namelijk niet dat je veel performance verlies hebt. Hij doet eerst de query:
C#:
1
  $DataArray | where {($_.Name -EQ $Server.Name) -And ($_.Drive -EQ $Server.Drive)} 


En voert op die query een foreach uit. In de praktijk betekend dit dat er een foreach wordt gedaan op 1 resultaat. (wanneer de data in je DataArray valide is en geen dubbele records kent). Jouw code doet eigenlijk hetzelfde. Je gebruik echter $_ nadat je code 2 keer is gepiped (Is dit een woord? ik bedoel dus "|"). Dit mag naar mijn weten niet en vandaar dat er een syntax error wordt gegenereerd. (Correct me if I'm wrong.) De foreach gebruik ik om er een variable aan de output van de where query te hangen, waardoor de code wel werkt.

Ik vermoed dat er mooiere manieren zijn, maar weet ze zelf niet te verzinnen. Geniet in ieder geval van je lange weekend!

Wilde altijd al iets over computers weten


Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Even een gok, maar kan je met "Select-Object" niet een nieuw object creeeren met de volgorde die je wenst?

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Ik denk dat je eens moet kijken naar ordered hash tables : http://www.computerperfor...wershell3-hash-tables.htm

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • SirDarkAngel
  • Registratie: April 2005
  • Laatst online: 05-09 10:03
elevator schreef op donderdag 31 oktober 2013 @ 21:25:
Even een gok, maar kan je met "Select-Object" niet een nieuw object creeeren met de volgorde die je wenst?
Een nieuw object creeeren is niet lastig. Het huidige object moet echter vervangen worden in de array en daar zit de moeilijkheid.
Hash tables werken alleen als je maar als je 1 waarde hebt zoals: Land/Hoofdstad, Team/Score, Leerling/beoordeling etc. Wanneer je meer waardes hebt zoals YellowOnline (Name,Drive,Volume,DiskSize,UsedSpace) is een hashtabel niet bruikbaar.

Wilde altijd al iets over computers weten


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
... en ordered hashtables zijn enkel PoSh V3 en V4. Onze servers voor 99% 2008R2 met V2. In principe kan WMF geïnstalleerd worden om 3 te hebben, maar dat is een grote update buiten mijn bevoegdheid en sowieso kan dat niet op de Exchange en de Sharepoint systemen.

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Waarom wil je trouwen updaten i.p.v. gewoon een nieuw report ?

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 11-09 10:01

@r!k

It is I, Leclerq

Waarom doe je add-member ipv je bestaande waarde te updaten? Ik ga er even van uit dat je else statement alleen effectief wordt als de server reeds bekend is. Of wil je alleen een veld toevoegen? Sowieso geeft het stuk script dat je hier hebt gezet mij niet voldoende informatie over wat precies de bedoeling is. Kun je daar iets over uitwijden?

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
punisher007 schreef op zaterdag 02 november 2013 @ 08:00:
Waarom wil je trouwen updaten i.p.v. gewoon een nieuw report ?
@r!k schreef op zaterdag 02 november 2013 @ 08:34:
Waarom doe je add-member ipv je bestaande waarde te updaten? Ik ga er even van uit dat je else statement alleen effectief wordt als de server reeds bekend is. Of wil je alleen een veld toevoegen? Sowieso geeft het stuk script dat je hier hebt gezet mij niet voldoende informatie over wat precies de bedoeling is. Kun je daar iets over uitwijden?
Ik heb de hele code niet bij de hand, maar ik kan het wel vertellen natuurlijk.

Het script draait als scheduled task elke eerste van de maand en verzamelt de info die je in de snippet ziet voor alle servers in het domein in een object. Dit wordt weggeschreven naar een CSV. met een naam zoals 201301.csv voor januari, 201302 voor februari etc.

De volgende maand wordt eerst eeb nieuwe CSV aangemaakt voor die maand en dan worden alle CSVs samengevoegd in één object :

NameDiskDiskSizeJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberAvailable
Server01E:3000201530608010010011011515050%

In het echt zijn dit natuurlijk verschillende regels per server en zijn er bijgevolg 1000en lijnen.

Dit object wordt rechtstreeks naar Excel geschreven als een arraylist. Dat duurt een seconde. Als de volgorde binnen het object niet klopt, dan klopt de Excel niet meer omdat ik dan de array niet in één keer naar Excel kan doorsturen maar elke property apart zou moeten doorsturen en voor zulke dingen is de Excel API heeeeeeeeeeeeel traag. Dat is een verschil in mijn omgeving tussen 1 seconde of 1 uur :)

Zoals gezegd werkt dit ook perfect, maar het probleem is dat het object geconstrueerd wordt door alle gegevens van januari te nemen (althans voor de bestaande servers) en dan de andere maanden toen te voegen. De naam en disk zijn statische informatie, maar de disksize was dat natuurlijk niet: soms worden (virtuele) schijven vergroot. Daarom dat ik een oplossing zoek om dit te updaten binnen die grote dataarray die van die CSVs gemaakt is, zonder aan de volgerde te torner.

Hopelijk is dit wat duidelijker, al wordt het geschreven zonder code bij de hand en op een zondagochtend wanneer ik niet wakker ben.

Overigens insert ik wanneer de Excel gecreeerd is nog kolommen met GB na ieder data veld (behalve het laatste) etc. De layout is beter dan de table die ik hier gemaakt heb :)

[ Voor 4% gewijzigd door YellowOnline op 02-11-2013 09:46 ]


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 11-09 10:01

@r!k

It is I, Leclerq

Misschien snap ik het nog vekeerd hoor maar is het dan niet makkelijker om je basis csv alvast te voorzien van de namen van de maanden zodat je verderop met het samenvoegen alleen de property van die maand hoeft aan te roepen en bij te werken?

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • ItMeAedri
  • Registratie: Maart 2009
  • Laatst online: 11-09 18:39
Daar is alweer een tweede uitgave van voor Powershell 3 :)
Learn Windows Powershell 3 in a Month of Lunches

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 00:09
shadowman12 schreef op zondag 29 september 2013 @ 02:08:
[...]
Op *nix kun je niks met PowerShell. PowerShell praat namelijk tegen .NET aan, en dat heb je niet op *nix systemen. [...]
Mja, je het mono en afgezien van windows only spul hebben ze alles zowat wel geïmplementeerd. Dan heb je ook nog Pash wat powershell voor *nix systemen is. Iets minder ver, maar voor basale dingen waarschijnlijk al wel bruikbaar. Zodra je echter wat leukere dingen wilt doen heb je er niets meer aan.

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Dit boek en ook de toolmaking variant zijn erg goed. Ik raad trouwens aan om deze te bestellen direct bij de uitgever Manning.com , deze heeft heel vaak een 50% korting:
http://www.manning.com/jones3/
http://www.manning.com/jones4/

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 04 november 2013 @ 12:16:
Misschien snap ik het nog vekeerd hoor maar is het dan niet makkelijker om je basis csv alvast te voorzien van de namen van de maanden zodat je verderop met het samenvoegen alleen de property van die maand hoeft aan te roepen en bij te werken?
Hmz, ik denk dat m'n uitleg niet duidelijk genoeg was. Er is geen basis CSV: de CSV van januari wordt als basis genomen voor alle velden en de maand januari. Vervolgens wordt steeds een maand toegevoegd. Ik wil de waarde van een de NoteProperty DiskSize die oorspronkelijk uit januari komt maandelijks kunnen aanpassen.

Heb er vandaag niet naar kunnen kijken, voornamelijk les gegeven. Woensdag kan ik pas weer zelf scripten. Drie dagen/week doe ik vooral kennisoverdracht omdat ik m'n ontslag ingediend heb en naar het buitenland verkas.

Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Iemand enig idee hoe ik een startingoffset van een disk kan achterhalen en deze simpel kan koppelen aan een disk/mountpoint?

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

ge-flopt schreef op donderdag 07 november 2013 @ 12:26:
Iemand enig idee hoe ik een startingoffset van een disk kan achterhalen en deze simpel kan koppelen aan een disk/mountpoint?
Ik zou verwachten met WMI: Met Win32_DiskDrive en Win32_DiskPartition zou je een eind moeten komen.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Klein raadseltje. wat doet dit PowerShell stukje
  (new-object -com wscript.shell).SendKeys([char]173) 

Acties:
  • 0 Henk 'm!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

¡ sturen naar het op dat moment actieve window.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
elevator schreef op donderdag 07 november 2013 @ 21:42:
¡ sturen naar het op dat moment actieve window.
Fout!

Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
shadowman12 schreef op donderdag 07 november 2013 @ 21:26:
Klein raadseltje. wat doet dit PowerShell stukje
  (new-object -com wscript.shell).SendKeys([char]173) 
Volume uitzetten, al is het meer WSH dan PoSh :p

Acties:
  • 0 Henk 'm!

  • deknegt
  • Registratie: Oktober 2011
  • Laatst online: 07-09 18:30
Ik heb een opdracht op school dat ik een Windows 2008 Server Core moet instellen, en ook al is dit basiskennis snap ik weinig van scripting en programmeren.

Ik moet een group OU aanmaken, en dit is wat ik nu heb.

code:
1
2
3
4
5
6
7
8
$strClass = "Group"
$intGroupType = 2
$StrName = "CN=MyNewGroup"
$objADSI = [ADSI]"LDAP://ou=Martijntest,dc=Martijn,dc=local"
$objGroup = $objADSI.create($strCLass, $StrName)
$objGroup.Put("sAMAccountName", "MyNewUser")
$ObjGroup.put("GroupType",$intGroupType)
$objUser.setInfo()


Maar als ik hem run in powershell krijg ik een error message. Ik heb een paar dingen geprobeert, maar niks dat het fixt en ook correct laat werken.

Error:
code:
1
2
3
4
5
6
You cannot call a method on a null-valued expression.
At C:\Users\Administrator\MartijnCreateGroup.ps1:8 char:17
+ $objUser.setInfo <<<< ()
    + CategoryInfo          : InvalidOperation: (setInfo:String) [], RuntimeEx
   ception
    + FullyQualifiedErrorId : InvokeMethodOnNull


Vast wel een makkie voor de echte pro's hier, dus hopelijk kunnen mensen mij uit de brand helpen zodat ik deze opdracht af kan krijgen voordat ik op me flikker krijg.

Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Waarom een LDAP query? Heb je een verbod om de server module te gebruiken?

Wat je error zelf betreft: euh, logisch aangezien je een method .SetInfo() aanroept op een object dat niet bestaat, nl. $objUser. Vanwaar komt die $objUser?

[ Voor 57% gewijzigd door YellowOnline op 11-11-2013 17:31 ]


Acties:
  • 0 Henk 'm!

  • deknegt
  • Registratie: Oktober 2011
  • Laatst online: 07-09 18:30
Ik moet alles in de server core via powershell doen. Ik heb er ook een Win7-Beheer station naast, maar daar mag ik alleen op kijken om te controleren, niet om aan te passen.

En de scripts heb ik gewoon van Itslearning gevist van het lesboek. Dus ik ga er van uit dat wat er in staat gewoon zo hoort.

edit:

Dit is het volledige voorbeeld script die geleverd word.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# ==============================================================================================
# 
# NAME: CreateGroup.Ps1
# 
# AUTHOR: Ed Wilson , microsoft
# DATE  : 2/2/2007
# 
# COMMENT: Creates a group called MyNewGroup
# 1. Creates a group account
#2. Uses the [ADSI] accelerator
#3. Uses the create and the setinfo methods
# ==============================================================================================

$strCLass = "Group"
$StrName = "CN=JRSGroup"
$intGroupType = 2
$objADSI = [ADSI]"LDAP://ou=JRSou,dc=poliform,dc=nl" 
$objGroup = $objADSI.create($strCLass, $StrName)
$ObjGroup.put("GroupType",$intGroupType)
$objGroup.setInfo()


Ik heb ook objuser naar objGroup verandert, maar de error blijft.

[ Voor 58% gewijzigd door deknegt op 11-11-2013 17:37 ]


Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Dat is geen antwoord op m'n vraag waar die objUser vandaan komt. In je voorbeeldcode staat die ook niet - die method wordt uitgevoerd op $objGroup. (was vergeten posten)

De error kan niet dezelfde zijn.Het moet nu toch $objGroup zijn die de error geeft. Vraag eens op wat er in zit na de regel:

C#:
1
$objGroup = $objADSI.create($strCLass, $StrName)


Daarbij: dit is code van 6 jaar oud. Intussen kan je, ook in een core installatie, dit gebruiken:

C#:
1
Import-Module ActiveDirectory


en doe dan gewoon

C#:
1
Get-Help New-ADGroup


Vanaf daar is het niet moeilijk. Verder ga ik - of iemand anders - je niet helpen, want huiswerk voor een ander doen we niet. Als wij het voor jou opknappen leer je er niets van.

[ Voor 18% gewijzigd door YellowOnline op 11-11-2013 17:51 ]


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
YellowOnline schreef op vrijdag 08 november 2013 @ 00:00:
[...]


Volume uitzetten, al is het meer WSH dan PoSh :p
Klopt!

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Kijk ook eens op Google, er zijn meer mogelijkheden om iets te bereiken: https://www.google.nl/#q=...erver+core+2008+create+ou

Voor het leerproces raad ik trouwens aan om Server 2012 (R2) te installeren. Active Direcory Administrative Center (ADAC) laat je namelijk de PowerShell code zien van acties die je doet in de GUI:
http://blogs.dirteam.com/...shell-history-viewer.aspx

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
YellowOnline schreef op maandag 11 november 2013 @ 17:49:
Dat is geen antwoord op m'n vraag waar die objUser vandaan komt. In je voorbeeldcode staat die ook niet - die method wordt uitgevoerd op $objGroup. (was vergeten posten)

De error kan niet dezelfde zijn.Het moet nu toch $objGroup zijn die de error geeft. Vraag eens op wat er in zit na de regel:

C#:
1
$objGroup = $objADSI.create($strCLass, $StrName)


Daarbij: dit is code van 6 jaar oud. Intussen kan je, ook in een core installatie, dit gebruiken:

C#:
1
Import-Module ActiveDirectory


en doe dan gewoon

C#:
1
Get-Help New-ADGroup


Vanaf daar is het niet moeilijk. Verder ga ik - of iemand anders - je niet helpen, want huiswerk voor een ander doen we niet. Als wij het voor jou opknappen leer je er niets van.
Of doe Get-Command -Module ActiveDirectory dan zie je welke AD cmdlets je allemaal beschikbaar hebt en kun je proberen te kijken wat je nodig hebt. Daarnaast is er enorm veel info op internet beschikbaar hoe je AD moet managen met PowerShell d.m.v de ActiveDirectory module die beschikbaar is vanaf 2008 R2.Op Server Core heb je ook wel een GUI beschikbaar als je wil, zoek maar eens naar de CoreConfig tool.

[ Voor 11% gewijzigd door Turdie op 11-11-2013 18:27 ]


Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
YellowOnline schreef op maandag 04 november 2013 @ 17:00:
[...]


Hmz, ik denk dat m'n uitleg niet duidelijk genoeg was. Er is geen basis CSV: de CSV van januari wordt als basis genomen voor alle velden en de maand januari. Vervolgens wordt steeds een maand toegevoegd. Ik wil de waarde van een de NoteProperty DiskSize die oorspronkelijk uit januari komt maandelijks kunnen aanpassen.

Heb er vandaag niet naar kunnen kijken, voornamelijk les gegeven. Woensdag kan ik pas weer zelf scripten. Drie dagen/week doe ik vooral kennisoverdracht omdat ik m'n ontslag ingediend heb en naar het buitenland verkas.
Hier nog een alternatief waarbij gebruik wordt gemaakt van een database:
http://blogs.technet.com/...city-planning-part-2.aspx

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • deknegt
  • Registratie: Oktober 2011
  • Laatst online: 07-09 18:30
YellowOnline schreef op maandag 11 november 2013 @ 17:49:
Dat is geen antwoord op m'n vraag waar die objUser vandaan komt. In je voorbeeldcode staat die ook niet - die method wordt uitgevoerd op $objGroup. (was vergeten posten)

De error kan niet dezelfde zijn.Het moet nu toch $objGroup zijn die de error geeft. Vraag eens op wat er in zit na de regel:

C#:
1
$objGroup = $objADSI.create($strCLass, $StrName)


Daarbij: dit is code van 6 jaar oud. Intussen kan je, ook in een core installatie, dit gebruiken:

C#:
1
Import-Module ActiveDirectory


en doe dan gewoon

C#:
1
Get-Help New-ADGroup


Vanaf daar is het niet moeilijk. Verder ga ik - of iemand anders - je niet helpen, want huiswerk voor een ander doen we niet. Als wij het voor jou opknappen leer je er niets van.
Nog bedankt voor de hulp. Ik ben er uiteindelijk uitgekomen en het bleek dat ik bij $objectgroup.Setinfo() de ''()'' moest weghalen. Nu werkt het naar behoren en kan ik verder.

Acties:
  • 0 Henk 'm!

  • Stoelpoot
  • Registratie: September 2012
  • Niet online
Hallo,

Op school hebben wij enkele virtuele verbindingen die we kunnen gebruiken als we een statisch IP instellen. Deze zijn gemaakt voor leesdoeleinden, maar hebben ook het voordeel dat ze vaak iets sneller werken (minder belasting) en meer poorten open hebben staan.

Helaas kan ik deze niet via DHCP bereiken, ik zou dus elke keer mijn netwerkinstellingen moeten wijzigen zodra ik op school kom (en het is niet overal in school te bereiken!)

Ik heb al rondgevraagd bij mijn leraren, maar bij de enige die een beetje Powershell kon schrijven viel de mond al open toen ik vroeg hoe ik de netwerkinstellingen moest veranderen :( Daarom kom ik dus even hier langs: Weten jullie een manier om in Powershell netwerkinstellingen te veranderen? Ik heb al rondgezocht op google, maar ik heb nog nooit echt met powershell gewerkt en kom er ook niet echt uit.

Acties:
  • 0 Henk 'm!

  • KennieNL
  • Registratie: Mei 2007
  • Laatst online: 22:16
Ik zou gewoon netsh daarvoor gebruiken :).
How to Use the NETSH Command to Change from Static IP Address to DHCP in Windows 2000 (oud artikel, maar commando's kloppen nog afaik).

Acties:
  • 0 Henk 'm!

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

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Snippets uit oud script van mij (error trapping en shell output verwijderd) die zoiets doen, ter inspiratie.

Ik gebruik overigens ook NETSH in mijn PoSh-script, omdat ik via WMI geen waardes kon zetten op een NIC zonder verbinding.

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
#Requires -version 2
<# 
==================================================================================================
Microsoft PowerShell Source File
NAME    :   Update-NetworkCard v2.0
AUTHORS :   YellowOnline
UPDATE  :   13/12/2012
==================================================================================================
#>

Function Add-NICConfig([string]$IP,[string]$Mask,[String]$Gateway,[string]$DNS)
    {
    $NICConfig = New-Object PSObject
    $NICConfig | Add-Member -Name IP -MemberType NoteProperty -Value $IP
    $NICConfig | Add-Member -Name Mask -MemberType NoteProperty -Value $Mask
    $NICConfig | Add-Member -Name Gateway -MemberType NoteProperty -Value $Gateway
    $NICConfig | Add-Member -Name DNS -MemberType NoteProperty -Value $DNS
    Return $NICConfig;
    }

Function Main-Procedure()
    {
    $OldNICExists = @(Get-WMIObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -EQ $OldNICName})
    $NewNICExists = @(Get-WMIObject -Class Win32_NetworkAdapter | Where-Object {$_.NetConnectionID -EQ $NewNICName})
    $colOldNICConfig = @()
    $colNIC = @(Get-WMIObject -Class "Win32_NetworkAdapterConfiguration" -ComputerName $ComputerName | Where-Object {$_.IpEnabled -Match "True"})
    ForEach ($objNIC in $colNIC) 
        {
        $colOldNICConfig += Add-NICConfig -IP $objNIC.IPAddress[0] -Mask $objNIC.IPSubnet[0] -Gateway $objNIC.DefaultIPGateway -DNS $objNIC.DNSServerSearchOrder
        }
    $colOldNICConfig | Select-Object IP, Mask, Gateway, DNS | Export-Clixml $OutputFile

    $OldIPConfig = $colOldNICConfig[0] | Select-Object IP, Mask, Gateway, DNS
    $OldNIC = @(Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -EQ $OldNICName})
    $OldNIC[0].Disable() | Out-Null
    $DNS1, $DNS2, $DNS3, $DNS4 = $OldIPConfig.DNS.Split(" ")    
    $SetIP   = "NETSH INTERFACE IP SET ADDRESS `"$NewNICName`" STATIC $($OldIPConfig.IP) $($OldIPConfig.Mask) $($OldIPConfig.Gateway)" 
    $SetDNS1 = "NETSH INTERFACE IP SET DNS `"$NewNICName`" STATIC $DNS1 VALIDATE=NO"
    $SetDNS2 = "NETSH INTERFACE IP ADD DNS `"$NewNICName`" $DNS2 VALIDATE=NO"
    $SetDNS3 = "NETSH INTERFACE IP ADD DNS `"$NewNICName`" $DNS3 VALIDATE=NO"
    $SetDNS4 = "NETSH INTERFACE IP ADD DNS `"$NewNICName`" $DNS4 VALIDATE=NO"
    }

Main-Procedure


Pas op, dit is zoals gezegd "ter inspiratie" en zeker geen kant-en-klaar script. Dit zijn fragmenten uit een script om over het hele domein alle virtuele NICs te wijzigen.

[ Voor 4% gewijzigd door YellowOnline op 09-12-2013 11:24 ]


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Iemand een mooie oplossing om meerdere UNC paden snel uit te lezen?

We zijn bezig om een stored procedure (SQL) om te bouwen (uitfaseren van cmdexec). We hebben verschillende backup shares waar wij de inhoud van willen weten. We lezen deze in, zetten de info in een tabel, zodat we verschillende queries erop los kunnen laten (check op retentie tijd, worden de backups op de goede locatie weggeschreven etc)

In de oude situatie liep een dir /s (inclusief de verwerking) ongeveer 20 minuten. Met een get-childitem doet powershell er 2 uur (!) over, alleen het inlezen al. Ik heb ook al gekeken en een dir /s aftrappen in powershell (dmv cmd /c) doet ook bijna 2 keer zo lang.

Iemand een goede manier om de backup shares snel in te lezen?

Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Was al op de hoogte dat get-childitem traag was. De oplossing in de 2e link is niet veel sneller. Het probleem zit hem erin dat hij veel files moet ophalen. Ik zal eens kijken of het moeglijk is dat ik de directory structuur kan ophalen (niet de files) en dan per directory naar de files kijk. Misschien dat dat wat sneller is.

Acties:
  • 0 Henk 'm!

  • Razwer
  • Registratie: December 2000
  • Laatst online: 08-08 11:11
is dir /s > out.txt en dan out.txt uitlezen met powershell dan niet een smerige workaround?

[ Voor 3% gewijzigd door Razwer op 26-03-2014 20:32 ]

Newton's 3rd law of motion. Amateur moraalridder.


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
ge-flopt schreef op woensdag 26 maart 2014 @ 12:51:
Was al op de hoogte dat get-childitem traag was. De oplossing in de 2e link is niet veel sneller. Het probleem zit hem erin dat hij veel files moet ophalen. Ik zal eens kijken of het moeglijk is dat ik de directory structuur kan ophalen (niet de files) en dan per directory naar de files kijk. Misschien dat dat wat sneller is.
PowerShell:
1
 Get-ChildItem | where {$_.PsIsContainer}

Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Uiteindelijk blijkt het dat het zoeken eigenlijk wel snel gaat. De vertraging zit hem in het wegschrijven naar de database.

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 12-09 16:29

Jazzy

Moderator SSC/PB

Moooooh!

Leuk, een PowerShell topic! Had ik nog helemaal niet gezien...

Op mijn blog schrijf ik ook regelmatig over PowerShell, meestal in combinatie met Exchange of Office 365. Voor wie het interessant vind: http://jetzemellema.blogspot.nl/

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:51
Leuk om weer eens een blog te lezen. Ik heb meteen 1 opmerking, jazzy. Je voorbeeld bij waarom POSH beter is dan SH, BASH, etc klopt niet. Als je ls |wc -l doet krijg je wel de goede aantallen terug.

Om je plaatje maar eens aan te halen: Je moet koeien met koeien vergelijken.

[ Voor 16% gewijzigd door ge-flopt op 27-03-2014 10:42 ]


Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 12-09 16:29

Jazzy

Moderator SSC/PB

Moooooh!

Die feedback heb ik al meer gekregen, terwijl ik dit voorbeeld al jaren gebruik in de praktijk. :) Eigenlijk gaat het daar ook niet om want de essentie is het verschil tussen tekst en objecten, maar als het verwarrend is dan moet ik even een ander voorbeeld zoeken.

Edit: Nu ik er nog even over nadenk, ik hou het gewoon zo want als dit vragen oproept dan is dat een mooie aanleiding om het nog een keer uit te leggen. Bij bash werk je met tekst op het scherm dus maakt het heel veel uit welke opmaak je hebt, bij PowerShell is dat niet relevant want je voert objecten door de pijplijn en geen tekst.

[ Voor 38% gewijzigd door Jazzy op 27-03-2014 10:50 ]

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Zijn er trouwens nog mensen die volgende week woensdag (2 april) bij de Dutch PowerShell User Group (DUPSUG) zijn ?
http://www.dupsug.com/

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 11-09 10:01

@r!k

It is I, Leclerq

punisher007 schreef op donderdag 27 maart 2014 @ 11:11:
Zijn er trouwens nog mensen die volgende week woensdag (2 april) bij de Dutch PowerShell User Group (DUPSUG) zijn ?
http://www.dupsug.com/
Yep. :)

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 15-09 15:27
punisher007 schreef op donderdag 27 maart 2014 @ 11:11:
Zijn er trouwens nog mensen die volgende week woensdag (2 april) bij de Dutch PowerShell User Group (DUPSUG) zijn ?
http://www.dupsug.com/
Cool wist niet dat die user group bestond :p
Jammer dat het al uitverkocht is, had wel interesse in de Powershell Workflows sessie.
Ben daar namelijk erg veel mee bezig de laatste tijd. :)

Computer says no


Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 15-09 05:36
Je kan proberen contact op te nemen met @JeffWouters https://twitter.com/JeffWouters
Wellicht dat je gewoon erbij kunt komen hoor :)

http://blog.bjornhouben.com

Pagina: 1 2 ... 10 Laatste