147
9
PowerShell en VBScript
9.1
PowerShell
Windows PowerShell™ is een nieuw op taken gebaseerde shell- en scripttaal voor de opdrachtregel die speciaal ontworpen is voor systeembeheer en gebaseerd is op Microsoft .NET Framework. Met de ingebouwde Windows PowerShell-opdrachten, ook wel cmdlets genoemd, kan je de computers in een netwerk beheren vanaf de opdrachtregel. Ook biedt Windows PowerShell een uitgebreide parser voor expressies en een volledig ontwikkelde scripttaal. PowerShell biedt ook ondersteuning voor bestaande scripts en opdrachtregelprogramma's.
9.1.1
Windows PowerShell Integrated Scripting Environment (ISE) De Powershell die je terugvindt in de taakbalk is een ‘com m and line interface shell’. Zinvol om korte com m ando’s uit te voeren, m aar niet direct geschikt om m eerdere opdrachten na elkaar uit te voeren en eventueel te bewaren. Veel zinvoller is het om instructies in te geven in de W indows PowerShell Integrated Scripting Environm ent (ISE). Dit is een grafische hosttoepassing om opdrachten uit te voeren en scripts te schrijven, te bewerken, uit te voeren, te testen en de fouten in die scripts op te lossen in een om geving die Unicode ondersteunt en waarin de syntaxis m et kleuren wordt weergegeven. Deze toepassing m oet geïnstalleerd worden.
<
Installeer ISE
<
Start de ‘Server Manager’
<
Klik op ‘Features’
<
Klik op ‘Add Features’
< Selecteer: Windows Powershell Integrated ..
<
Een servergestuurd netwerk (Windows 2008 R2)
‘Klik op Next’
PowerShell en VBScript, hst. 9
148
<
Klik op ‘Install’
<
vervolgens op ‘Close’
<
Sluit de ‘Server Manager’
<
Open ‘Accessoires’, Windows PowerShell
<
Voeg een snelkoppeling toe aan het ‘Start Menu’ Gebruik best de 64-bit versie!
<
Start Windows PowerShell ISE
<
Tik in:
(Get-ChildItem C:\Windows).Count
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
149
9.1.1.1
Script aanmaken (MapKopiëren)
<
<
Kopieer de map ‘MapTV’ van de server (netlogon) naar alle clients (C:\)
Plaats de map ‘MapTV’ in de map’ NetLogon’ (\\windows7server\netlogon)
W issen resultaatvenster
<
Starten program m a
Geef in:
# Kopiëren van mappen en bestanden #
# $bron = “\\windows7server\netlogon\MapTV” $bestemming = “C:\” copy-item -path $bron -destination $bestemming -recurse <
Bewaar het programma (MapKopiëren.ps1)
<
Start het programma
Je krijgt volgende foutm elding:
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
150 Een argum ent om PowerShell te gebruiken en geen VBScipt is veiligheid. VBScript wordt over het algem een om schreven als zeer onveilig en gevaarlijk. In PowerShell is dit heel sim pel opgelost: scripts zijn gewoonweg verboden... Dit wordt geregeld door een policy, nl. de ‘Execution Policy’ <
Tik in: ‘Get-ExecutionPolicy’ Resultaat: Restricted
Om toch PowerShell-scripts uit te voeren m oet dit aangepast worden. De m ogelijkheden:
9.1.1.2
•
AllSigned Scripts (zelfgem aakte scripts of gedownloade) worden m aar uitgevoerd op voorwaarde dat het script afkom stig is van een ‘vertrouwde uitgever’ (Trusted Publisher). Een zelfgeschreven script toevoegen aan deze groep gebeurt door een eigen certificaat aan te m aken
•
RemoteSigned Voer alle zelfgeschreven scripts uit en gedownloade scripts die afkom stig zijn van een vertrouwde uitgever
•
Unrestricted Alle scripts worden uitgevoerd. Voordat gedownloade en niet ondergetekende scripts worden uitgevoerd wordt een bevestiging gevraagd
<
Tik in: ‘Set-ExecutionPolicy RemoteSigned’
Aanmaken ‘Group Policy’ Deze ‘Policy’ m oet uitgevoerd worden op een OU m et com puters als inhoud. Com puters in een dom ein worden standaard in de m ap ‘Com puters’ geplaatst (geen OU!) <
Maak een OU aan per lokaal en plaats daarin de computers uit dat lokaal < Kopieer het programma naar: Netlogon < Open ‘Group Policy Management’ < Maak een nieuw ‘Group Policy Object:’ MapKopiëren
<
Klik op ‘OK’
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
151 < Klik rechts op ‘MapKopiëren’ < Klik op Edit < Ga naar: • Computer Configuration • Policies • Windows Settings • Scripts (Startup/Shutdown)
< Dubbelklik op ‘StartUp’ < Verander van tabblad!
<
Klik op ‘Add’
<
Geef in:
\\windows7server\netlogon\MapKopiëren.ps1
<
Een servergestuurd netwerk (Windows 2008 R2)
Klik op ‘OK’
PowerShell en VBScript, hst. 9
152
<
Koppel de GPO aan een OU met computers als inhoud en .... GPUpdate /force niet vergeten
Het resultaat op de client. Door de ingestelde rechten is het onm ogelijk dat een gewone gebruiker de m ap verwijdert.
9.1.2
Een map koppelen aan een stationsletter voor een groep Met ‘Group Preferences’ is het m ogelijk om een m ap te koppelen aan een OU. Dit is waarschijnlijk de bedoeling niet om dat m en een ‘VakMap’ wil die gekoppeld is aan een leerkracht voor een groep leerlingen. Zo’n ‘VakMap’ is interessant om dat de leerkracht leesen schrijfrechten kan hebben op de m ap en de groep leerlingen enkel leesrechten. Het is dan ook voldoende dat de leerkracht een bestand in de m ap plaatst om dit bestand onm iddellijk te distribueren naar alle leerlingen. Dit is eveneens m ogelijk via een elektronisch leerplatform , m aar dan m oeten alle leerlingen wel inloggen en het bestand downloaden. Een probleem als dit bestand vrij groot is en de Internetbandbreedte beperkt is. Anderzijds is het om gekeerde niet m ogelijk. Leerlingen kunnen geen bestand ‘posten’ in deze m ap m et enkel en alleen exclusieve schrijfrechten. In principe is het via geavanceerde beveiligingsrechten wel m ogelijk om dit in te stellen, m aar m et een grote groep (één klas) loopt dit hopeloos vast.
Werkwijze: •
Maak een groep m et alle leerlingen van het eerste jaar (1HA, 1HB) en de leraar Frans (An)
•
Maak een m ap op de server (MapLeer) , m et daarin de m ap MapEerstes.
•
Deel de m ap ‘MapEerstes’ m et leesrechten voor de groep ‘Eerstes’ en lees- en schrijfrechten voor An
•
Plaats het script ‘MapDrive.ps1' in de m ap ‘Netlogon’
•
Maak een groepsbeleid
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
153 ! Aanmaken groep <
Klik rechts op ‘groepen’
<
Selecteer ‘New’
<
Geef in als naam: ‘Eerstes’
<
Dubbelklik op ‘Eerstes’
<
Ga naar het tabblad ‘Members’
<
Ga naar ‘Advanced...’ Het script controleert geen ‘genestelde’ groepen. M.a.w. de groep ‘Eerstes’ laten bestaan uit de groep ‘1HA’ en ‘1HB’ is foutief!
<
Klik op ‘ Columns...’
<
Voeg toe ’Logon Name’
<
Klik op ’Find Now’
<
Selecteer de eerste tot de laatste naam die begint met ‘1H...’
<
Vergeet niet om ook ‘An’ tot de groep toe te voegen
Deze m ethode kun je natuurlijk alleen m aar gebruiken als de login-naam begint m et iets dat verwijst naar de groep die je wil sam enstellen. Is dit niet het geval en wil je werken m et bestaande groepen dan m oet het script aangepast worden (zie verder): if($memberOf -contains $group) wordt dan: if($memberOf -contains '1HA'-or $memberOf -contains '1HB' -or $memberof -contains 'Leraars')
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
154 ! Aanmaken gedeelde map <
Maak op de data-partitie de m ap ‘MapLeer’
<
Maak daarin de m ap ‘MapEerstes’
<
Klik rechts op ’MapEerstes’
<
Klik op ‘Share with, Specific people...’
<
Geef in: Eerstes An
<
Verander ‘Permission Level’ voor An naar ‘Read/Write’
<
Klik op ‘Share’
! Het script
6
Instructie nodig om boodschap te kunnen afdrukken (Form s)
8
Begin van de tekst van de boodschap
11
Koppeling m et W Script voor koppelen stationsletter aan een gedeelde m ap
16
Krachtige instructie om van een gebruiker de verschillende groepslidm aatschappen te bepalen Lijn 15, 18 en 19 zijn toegevoegd om de ‘-replace’- functie toe te lichten en m ogen verwijderd worden
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
155 Dit gedeelte dien je zoveel keren te kopieren als er m appen zijn die je wenst te koppelen. Vergeet niet om elke keer een andere stationsletter te kiezen!
23
De naam van de groep waarvoor de m ap m oet gekoppeld worden.
24
Selectie of de gebruiker die is ingelogd ook deel uitm aakt van de groep
26
Te gebruiken stationsletter
30
Nagaan of de stationsletter niet in gebruik is. Zo ja, dan wordt de bestaande koppeling verwijderd
33
De koppeling wordt uitgevoerd
79
De spatie op het einde van ‘$boodschap wordt verwijderd
81
Als er geen m appen gekoppeld worden dan wordt de tekst ‘geen’ weergegeven
! Group Policy <
Maak een nieuw ‘Group Policy Object’ (MapDrive)
<
Klik rechts, Edit
<
Ga naar: User Configuration Policies W indows Settings Scripts (Logon/Logoff)
<
Dubbelklik op ‘Logon’
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
156 <
Ga naar het tabblad: PowerShell Scripts’
<
Klik op ‘Add’
<
Geef in bij ‘Script Nam e:’
\\windows7server\netlogon\MapDrive.ps1
<
De GPO moet gekoppeld worden aan de OU leerlingen en leraars. Dit kan perfect, maar je kan ook kiezen voor één niveau hoger en de GPO koppelen aan het domein
<
Vergeet niet .... jawel!
<
Klik op ‘OK’
<
Klik op ‘OK’
! Resultaat: De gebruiker krijgt volgende boodschap te zien:
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
157
9.2
VBScript
VBScipt is eveneens een tekstdocument met de extensie .vbs. Alhoewel het perfect mogelijk is om scripts te schrijven in kladblok, is dit niet direct aangewezen omdat bij een eventuele foutmelding steeds verwezen wordt naar een lijnnummer. In tegenstelling tot PowerShell bevat Windows geen tool om VBScript-programma’s te editeren. Er is wel een zeer handige tool op de markt, VbsEdit van ‘AderSoft’. De laatste versie bevat ook een mogelijkheid om van het script een uitvoerbaar programma te maken (.exe). Hierdoor vervallen veel argumenten om VBScript niet te gebruiken. Het bestand is dan niet meer leesbaar en aanpasbaar.
Opmerkingen: • Je hebt de keuze tussen CScript en WScript (zie verder) • Je kan omzetten naar een 32- of 64-bit applicatie
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
158
9.2.1
Herstellen wachtwoord
Een veel voorkomend probleem (zeker na een vakantieperiode) is dat een gebruiker zijn wachtwoord vergeten is. In de meeste gevallen moet dit ook onmiddellijk kunnen opgelost worden, want anders kan de desbetreffende gebruiker niet verder. Deze taak overlaten aan de systeembeheerder is niet zinvol, hij/zij moet dan continue bereikbaar zijn en ook bij de identificatie van de gebruiker zijn er problemen. Is de aanvrager wel echt de gebruiker waarvan het wachtwoord moet hersteld worden? We laten deze taak dan ook over aan de begeleidende leraar ... Werkwijze: • Plaats de leraar (of de groep van leerkrachten) in de groep ‘Account Operators’ • Deel een map, met enkel leesrechten voor die gebruiker of groep • Plaats in die map het programma HerstelWachtwoord.vbs • Voer het programma uit
Zorg ervoor dat dit program m a eventueel gekopieerd wordt naar de persoonlijke m ap ‘Mijn Docum enten’ van de leerkracht. W anneer dit program m a niet regelm atig gebruikt wordt, zal m en de locatie vergeten en dit terugvinden op de server is niet zo eenvoudig.
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
159
9.2.1.1
Account Operators
< Open de console, ‘Active Directory Users and Computers’ < Open de map ‘Builtin’ < Open de groep ‘Account Operators’
9.2.1.2
<
Klik op het tabblad ‘Members’
<
Voeg de groep ‘leraars’ toe
<
Klik op ‘OK’
Gedeelde map < Maak op de server (data-partitie) de map ‘HerstelWachtwoord’ < Plaats in deze map het programma ‘HerstelWachtwoord.vbs’ < Deel deze map met ‘Full Control’-rechten voor de Administrator < Deel deze map met ‘Read’-rechten voor de groep leraars
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
160
9.2.1.3
Rem Rem Rem Rem
HerstelWachtwoord.vbs
Accountontgrendelen Nieuw wachtwoord instellen Luc Decuyper 2003-02-19
Dim objDir Dim objDomein Dim DomainName Rem Domein bepalen Set objDir = GetObject("LDAP://RootDSE") Set objDomein = GetObject( "LDAP://" & objDir.Get("defaultNamingContext")) DomainName = objDomein.name DomainName = mid(DomainName,4)
Rem Ingave account om te bewerken UserName = InputBox("Geef de loginnaam van de account: ")
Rem Account deblokkeren Set UserObj = GetObject("WinNT://"& DomainName &"/"& UserName &"") If UserObj.IsAccountLocked = -1 then UserObj.IsAccountLocked = 0 UserObj.SetInfo Fout = False Else Fout = True End if If Fout Then Wscript.Echo "Account was niet geblokkeerd." Else Wscript.Echo "De account is opnieuw actief!" End If
Rem Nieuw wachtwoord instellen Set objDomein = GetObject("WinNT://" & DomainName) Set objGebruiker = objDomein.GetObject("user",UserName) objGebruiker.setPassword "Test123" objGebruiker.setinfo wscript.echo "Het wachtwoord staat terug op 'Test123'"
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
161 Rem Verplicht wijzigen aanzetten UserFlags UserName, DomainName,1, false, true, false,false Rem Routine Flags Sub UserFlags(strUser,strDomain,strPassexpires,strNochange,strNoexpire,strDisab le,strLocked)
Dim User Dim flags Set User = Getobject("WinNT://" & strDomain & "/" & strUser & ",user") Flags = User.Get("UserFlags") User.put "PasswordExpired",strPassexpires User.Accountdisabled = strDisable if strNochange = "true" then User.put "UserFlags", Flags OR &H00040 End if If strNoexpire = "true" then User.put "Userflags", flags OR &H10000 end if User.IsAccountLocked = strLocked User.setinfo Set User = nothing End Sub
Opmerkingen: • Het programma werd geschreven voor Windows Server 2000. De scripttaal is ondertussen uitgebreid, dus kan het best zijn dat dit programma korter en krachtiger kan, maar het werkt alvast. Vermoedelijk kan dit in PowerShell veel korter. In de bijlage is een klein programma toegevoegd die het wachtwoord van de gebruiker reset. Er moet nog gezocht worden naar een methode om de loginnaam van de gebruiker in te geven en een mogelijkheid om dit te laten uitvoeren door de groep ‘Leraars’ • Er is geen controle of de ingegeven naam wel bestaat. Ook als in de ‘Inputbox’ op ‘Annuleren’ wordt geklikt komt er een foutmelding.
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
162
9.2.1.4
Controle
• Log in op de client als leraar (An b.v.) • Open Windows Verkenner • Geef in de adresbalk het volgende in: \\windows7server De lijst met de gedeelde mappen verschijnt • Open de map ‘HerstelWachtwoord’ en start het programma • Geef de gebruikersnaam in (vb. 1HA.Tim)
Het program m a antwoordt m et de volgende m ededelingen:
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
163
9.3
Rechten op mappen of bestanden
Een belangrijk onderdeel naar beveiliging toe is het correct instellen van de rechten van gebruikers op mappen of bestanden bij NTFS. Hiervoor kunnen twee programma’s gebruikt worden, nl. cacls.exe en xcacls.vbs. • Het programma cacls.exe is terug te vinden in de ‘System32-directory’ vanaf NT4. Dit programma gebruiken we om rechten in te stellen op de clients • xcacls.vbs (bestaat ook onder de vorm van een .exe) is een onderdeel van de ‘Resoucre Kit’ vanaf Windows 2000. Met dit programma zijn er meer mogelijkheden dan met cacls. We gebruiken dit programma om de rechten in te stellen van de leerlingenmappen op de server. Opmerking: Vanaf de versie 2008 is er een nieuw programma ’icacls’. Hiermee is nog onvoldoende geëxperimenteerd.
9.3.1
Mappen
De mappen van de gebruikers (in DocLeer) worden omgeleid naar de server. Gebruiken we mapomleiding (zie 8.2.2) dan wordt de gebruiker in principe eigenaar van zijn map ‘Mijn documenten’ op de server en worden bovenliggende rechten niet overgenomen. Bij het aanmaken van de GPO hebben we deze ‘Grant’-rechten aangepast (verwijderd) waardoor iedereen nu in deze mappen kan lezen, schrijven, verwijderen ... ... dit wijzigen is best zinvol ...
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
164
9.3.2
Mogelijke foutmelding
W ordt er vergeten om de ‘Grant’-rechten te verwijderen bij m apom leiding en wil m en als adm inistrator toch toegang tot deze m ap dan zal deze m elding verschijnen:
Dit kan vrij eenvoudig opgelost worden door het eigenaarsschap opnieuw over te nem en. De foutm elding kom t daarna niet m eer voor, ook niet als er nieuwe gebruikers worden toegevoegd. <
Klik op de gedeelde map (DocLeer) (in het voorbeeld:DocLkr)
<
Klik op Security, Advanced, Owner
<
Plaats een vinkje bij: ‘Replace owner on subcontainers and objects’
Er kom t een waarschuwing: < Klik op ‘Yes’
9.3.3
Gebruik van xcacls.vbs
De laatste versie van xcacls.vbs is te downloaden via het Internet. Het programma wordt uitgepakt via ‘Xcacls_Installer.exe’. Deze versie is iets recenter dan xcacls.exe dat deel uitmaakt van de ‘Resource Kit’(zie ook: http://support.microsoft.com/kb/825751). Er zijn twee ‘scriptengines’, WScript en CScript. Standaard wordt wscript gebruikt, maar xcacls.vbs werkt beter met cscript. Verander daarom de standaardinstelling naar cscript: In te geven via de ‘Command prompt’ : cscript.exe /h:cscript
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
165 Te gebruiken syntax: xcacls E:\Docleer\1HA.Karim /G :F :M /F
Verklaring: Aan de map ‘E:\Docleer\1HA.Karim’ wordt aan de volgende gebruiker (naam1) ‘Full Control’ rechten toegekend (:F) en aan de gebruiker naam2 ‘Modify’-rechten /G = Grant /F = wordt gebruikt in combinatie met mappen. De rechten op alle onderliggende bestanden en mappen worden aangepast. Om bestanden in onderliggende mappen ook aan te passen moet in principe ook /T (of /T /S) gebruikt worden. Na controle blijkt dit evenwel niet nodig te zijn. = <de ‘NetBios-naam’ van het domein>/Administrator (vb.: school/Adm inistrator) = <de ‘NetBios-naam’ van het domein>/ (voorbeeld: school/1HA.Karim )
9.3.3.1
Aanmaken rekenblad
De rechten op de mappen kunnen maar aangepast worden nadat alle gebruikers zich hebben aangemeld. Deze namen gaan we eerst in een tekstbestand plaatsen en daarna invoeren in een rekenblad. Om deze namen te bekomen zijn er twee mogelijkheden: •
Gezien de namen van de mappen overeen komen met de loginnamen kan een script gebruikt worden (LoginNamen.vbs) om deze namen in een tekstbestand te plaatsen.
•
Een andere (eenvoudigere) methode is de namen van de mappen uitlijsten (dir) zonder bijkomende gegevens (/b) en doorsturen (>) naar een tekstbestand Syntax: DIR /B
>
C:\Namen.txt
(in te voeren via de ‘Com m and Prom pt’ op dezelfde plaats van de uit te lijsten m appen)
Deze methode biedt bovendien het voordeel dat de namen in ‘MS-DOS’-schrijfwijze worden weergeven zodat het resultaat rechtstreeks in een tekstbestand kan geplaatst worden voor uitvoering. Bewaren via MS-Word (zie 6.4.1.2) is dan niet nodig.
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
166
<
Open het rekenblad ‘LijstXcacls.xls’
xcacls, gevolgd door het ‘path’ van de m ap waarvan de rechten m oet veranderd worden A2 Let op het aanhalingsteken!
B2
Grant ‘Full control’ aan de adm inistrator
C2
De ‘NetBios’ -naam van het dom ein
D...
De aangem aakte instructie
< < < <
9.4
Kopieer de inhoud van kolom F naar een tekstbestand (aanmaken via kladblok) Voeg als laatste instructie ‘Pause’ toe Bewaar en verander de extensie (.txt) naar .cmd Voer het bestand uit (dubbelklikken)
Aanpassen rechten software
Alle software die ontwikkeld wordt voor Windows XP moet in principe voldoen aan een aantal afspraken zoals: • • • •
de installatie moet gebeuren in de map ‘\Program Files\ ‘ ‘programma verwijderen’ moet voorzien zijn alle individuele instellingen moeten in de persoonlijke map van de gebruiker terecht komen .....
Vulgariserend wordt weleens gezegd ‘het moet een netwerkversie zijn’, maar een aantal pakketten die een zgn. netwerkversie zijn beantwoorden niet aan bovenstaande eisen (o.a. het boekhoudpakket ProAcc), maar zijn wel installeerbaar via het netwerk. Talrijke andere pakketten (vooral didactische) zoals Bob, ‘De Computer en Wij’, Fvisem, Azertytyp,... installeren zichzelf gewoon in de root van de systeemschijf en werken maar als de gebruiker schrijfrechten heeft op de installatiemap en/of sommige bestanden.
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
167 Om zo’n programma’s toch te kunnen gebruiken kunnen we deze schrijfrechten geven aan de groep gebruikers van dit programma. Dit voorkomt de noodzaak om schrijfrechten te moeten toekennen aan de volledige schijf.
Dit is wel een oplossing, m aar het voorkom t niet dat een gebruiker het bestand of de m ap kan ‘verknoeien’. Gebeurt dit in zijn eigen persoonlijke m ap dan zijn de gevolgen voor de gebruiker zelf, gebeurt het hier dan zal het program m a hoogst waarschijnlijk niet m eer werken. Bij een aantal program m a’s (Bob, De Com puter en W ij, ...) is het nodig dat de gegevens individueel bewaard worden en een gebruiker een volgende keer m et deze gegevens kan verder werken. Dit kan niet zom aar in het program m a zelf, want een volgende gebruiker krijgt dan deze gegevens te zien.... In zo’n geval wordt het echt m oeilijk. W el kunnen deze program m a’s in de m eeste gevallen hun data bewaren op een ander station (is m eestal voorzien voor het diskette-station, m aar een andere stationsletter is ook m ogelijk). Plaats de (basis)gegevens dan ook in de m ap ‘Mijn docum enten’ en zorg ervoor dat bij het aanm elden van de gebruiker er een script gestart wordt dat de koppeling m aakt tussen deze gegevens en een stationsletter (zie MapDrive). .... probeer het gebruik van dergelijke programma’s te vermijden ...
9.4.1
Voorbeeld: installatie ProAcc
Om de mogelijke werking van zo’n script te illusteren bekijken we de installatie van het boekhoudpakket ProAcc. Werkwijze: •
Installeer het pakket via de aanwezige .msi
•
Kopieer enkele bestanden die tijdens de installatie niet ingesteld werden
•
Geef de groep gebruikers (ProAcc) schrijfrechten
<
Kopieer de software naar de map ‘NetLogon’
<
Maak een groepsbeleid voor een OU die de computers bevat waarop de software moet komen. <
Klik ‘Rechts’ op ‘Software installation’ en kies ‘New’ Niet ‘Properties’ !
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
168 Zorg ervoor dat je het correcte pad opgeeft waar de software zich bevindt! W el: \\\NetLogon\... Niet: C:\.....
Het .m si-pakket bevat de nodige instellingen voor installatie, m aar...
<
Klik op ‘Deployment, Advanced’
<
Plaats een vinkje bij: ‘Ignore language when deploying this package’
Doe je dit niet dan zal de installatie niet slagen als je een Nederlandstalig pakket installeert vanaf een Engelstalige server.
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
169 Problemen: •
Na de installatie ontbreken er twee bestanden, ‘serial.txt’ en ‘ProAccc.ini’ Het ‘ .ini-bestand’ m oet zo ingesteld worden dat bij het starten van het program m a er gevraagd wordt naar het gegevensbestand (.df1) in de m ap ‘Mijn docum enten’ (zie handleiding ProAcc)
•
De gebruiker m oet schrijfrechten hebben op ‘ProAcc.lbr’ en’ ProAcc.oif’ • Hiervoor gebruiken we cacls m et ‘Grant’-rechten :C (schrijven), voor de (beveiligings)groep GrpProAcc. (Dit is een groep die alle gebruikers bevat die m et ProAcc m oeten werken).
Het volgend script biedt hiervoor een oplossing: 'Kopiëren serienummer en 'rechten map ProAcc 'Luc Decuyper '2006-03-09 Option Explicit Dim ObjFso, oShell Dim bron, doel
Set ObjFso=WScript.CreateObject("Scripting.FileSystemObject") Bron = "\\cno50\Netlogon\serial.txt" Doel = "C:\ProAcc\" objFSO.Copyfile bron, doel
Bron = "\\cno50\Netlogon\ProAcc.ini" Doel = "C:\ProAcc\" objFSO.Copyfile bron, doel
'-------------------------------------------------------------------'Rechten aanpassen twee bestanden Set oShell = CreateObject ("Wscript.Shell") oShell.run "Cacls C:\ProAcc\ProAcc.lbr /E /G GrpProAcc:C" oShell.run "Cacls C:\ProAcc\ProAcc.oif /E /G GrpProAcc:C"
MsgBox ("De aanpassingen zijn uitgevoerd")
•
Om dit script te kunnen uitvoeren zijn er ‘adm inistrator’-rechten nodig. M.a.w. dit is terug een groepsbeleid dat via ‘Com puter Configuration’ m oet uitgevoerd worden.
•
‘oShell.run’ start een extern program m a (.exe)
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
170
9.5
Printers aansluiten
Een printer installeren in het netwerk is niet zo eenvoudig. Basisprobleem is dat een printer een gebruikersconfiguratie is en niet een computerconfiguratie. •
Wordt er geen verplicht profiel gebruikt, dan krijgt een nieuwe gebruiker de printerinstellingen mee die in de Default User’ staan. Deze instelling wordt bewaard in zijn profiel. Werd de printer geïnstalleerd voordat de gebruikers zich de eerste keer hebben aangemeld, dan is er geen probleem, in het ander geval wel, want de printer ontbreekt dan in hun profiel en de printer zal extra moeten toegevoegd worden. Hiervoor bestaan ook scripts, maar deze veranderen rechtstreeks registerinstellingen. Dit is gevaarlijk en werken soms niet. Bovendien, wat als de printer defect is en vervangen wordt door een ander type?
•
Wordt er wel een verplicht profiel gebruikt dan is het probleem nog groter. Een printer is lokaalgebonden en kan dus niet in het verplicht profiel opgenomen worden dat geldt voor alle gebruikers/computers in het gebouw. Een profiel per lokaal? Een gebruiker kan slechts één profiel hebben en als de gebruiker in meerde lokalen een computer moet gebruiken kan het best gebeuren dat er wordt afgedrukt in het verkeerde lokaal...
De oplossing is vrij eenvoudig, maar netwerkintensief: •
Installeer op een com puter alle printers
•
Deel deze printers.
(in dit voorbeeld gebeurt dit op de ISA-server)
Gebruik het volgend script om zo’n printer aan een gebruiker toe te voegen bij het opstarten: 'Printers per lokaal ' Luc Decuyper '2006-06-02 Dim WshNetwork,PrinterPath, oPrinters Set WshNetWork = WScript.CreateObject("WScript.Network") Select Case Ucase(Left(WshNetwork.ComputerName,6)) Case "LOK103" PrinterPath = "\\IsaServer\LOK103" WshNetWork.AddWindowsPrinterConnection PrinterPath WshNetWork.SetDefaultPrinter PrinterPath Wscript.Echo("Printer werd geïnstalleerd") Case "LOK104" PrinterPath = "\\IsaServer\LOK104" WshNetWork.AddWindowsPrinterConnection PrinterPath WshNetWork.SetDefaultPrinter PrinterPath Wscript.Echo("Printer werd geïnstalleerd") ......... End Select
Bespreking:
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9
171 •
Na het aanmelden wordt de naam van de computer gebruikt om te bepalen in welk lokaal de gebruiker zich bevindt
•
In een ‘Case’-structuur wordt het voorgestelde ‘PrinterPath’ toegevoegd aan de printers van de gebruikers
•
Deze printer wordt ingesteld als standaardprinter (SetDefaultPrinterPrinterPath)
•
Met het volgend script toe te voegen voor de selectie wordt er een lus gemaakt waarbij eerst een bestaande printer wordt weergegeven en dan verwijderd. Dit gebeurt zoveel keer als er printers zijn (oPrinters). '---------------------------------------------Set oPrinters = WshNetWork.EnumPrinterConnections For i = 0 to oPrinters.count - 1 step 2 wscript.echo OPrinters.item (i) &vtab & oPrinters.item (i + 1) WshNetwork.RemovePrinterConnection PrinterPath next
Opmerkingen: •
Deze methode vereenvoudigt zeer sterk het beheer van printers. Het printerbeheer van oudere Windowsversies (Windows XP, Windows Server 2003) is niet zo degelijk als het printerbeheer van de versie Windows Server 2008 (R2). Gebruik best dit besturingssysteem om de gedeelde printers op te installeren.
•
In principe moet dit script uitgevoerd worden bij het aanmelden. Dit gebeurt meestal met heel veel gebruikers gelijktijdig zodat het netwerk sommige taken niet doorgeeft. Dit is zeer eenvoudig op te lossen door het programma op de lokale ‘C:\’-schijf te plaatsen en in de groep ‘Opstarten’ (Start, Alle programma’s, Opstarten) een snelkoppeling naar dit programma te maken.
•
Dit programma werkt maar als de printers aanstaan ...
Een servergestuurd netwerk (Windows 2008 R2)
PowerShell en VBScript, hst. 9