9 PowerShell en VBScriptusers.skynet.be/SessieVirussen/cno/Hst9.pdf · Windows PowerShell™ is een...
Transcript of 9 PowerShell en VBScriptusers.skynet.be/SessieVirussen/cno/Hst9.pdf · Windows PowerShell™ is een...
147
9 PowerShell en VBScript
9.1 PowerShell
Windows PowerShell™ is een nieuw op taken gebaseerde shell- en scripttaal voor de opdrachtre-gel 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 com-puters in een netwerk beheren vanaf de opdrachtregel. Ook biedt Windows PowerShell een uitge-breide parser voor expressies en een volledig ontwikkelde scripttaal. PowerShell biedt ook onder-steuning 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 ‘command line interface shell’. Zinvol omkorte commando’s uit te voeren, maar niet direct geschikt om meerdere opdrachten na elkaaruit te voeren en eventueel te bewaren.
Veel zinvoller is het om instructies in te geven in de W indows PowerShell Integrated ScriptingEnvironment (ISE). Dit is een grafische hosttoepassing om opdrachten uit te voeren en scriptste schrijven, te bewerken, uit te voeren, te testen en de fouten in die scripts op te lossen in eenomgeving die Unicode ondersteunt en waarin de syntaxis met kleuren wordt weergegeven.
Deze toepassing moet geïnstalleerd worden.
< Installeer ISE
< Start de ‘Server Manager’
< Klik op ‘Features’
< Klik op ‘Add Features’
< Selecteer:
Windows Powershell Integrated ..
< ‘Klik op Next’
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
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
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
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)
< Geef in:
# Kopiëren van mappen en bestanden# <uw naam># <huidige datum>
$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 foutmelding:
W issen
resultaatvenster
Starten
programma
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
150
Een argument om PowerShell te gebruiken en geen VBScipt is veiligheid. VBScript wordt overhet algemeen omschreven als zeer onveilig en gevaarlijk.
In PowerShell is dit heel simpel 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 moet dit aangepast worden. De mogelijkheden:
• AllSignedScripts (zelfgemaakte scripts of gedownloade) worden maar uitgevoerd op voorwaardedat het script afkomstig is van een ‘vertrouwde uitgever’ (Trusted Publisher). Een zelfge-schreven script toevoegen aan deze groep gebeurt door een eigen certificaat aan te ma-ken
• RemoteSignedVoer alle zelfgeschreven scripts uit en gedownloade scripts die afkomstig zijn van eenvertrouwde uitgever
• UnrestrictedAlle scripts worden uitgevoerd. Voordat gedownloade en niet ondergetekende scriptsworden uitgevoerd wordt een bevestiging gevraagd
< Tik in: ‘Set-ExecutionPolicy RemoteSigned’
9.1.1.2 Aanmaken ‘Group Policy’
Deze ‘Policy’ moet uitgevoerd worden op een OU met computers als inhoud. Computers ineen domein worden standaard in de map ‘Computers’ 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’
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
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
< Klik op ‘OK’
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
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 onmo-gelijk dat een gewone gebruiker de mapverwijdert.
9.1.2 Een map koppelen aan een stationsletter voor een groep
Met ‘Group Preferences’ is het mogelijk om een map te koppelen aan een OU.
Dit is waarschijnlijk de bedoeling niet omdat men een ‘VakMap’ wil die gekoppeld is aan eenleerkracht voor een groep leerlingen. Zo’n ‘VakMap’ is interessant omdat de leerkracht lees-en schrijfrechten kan hebben op de map en de groep leerlingen enkel leesrechten.
Het is dan ook voldoende dat de leerkracht een bestand in de map plaatst om dit bestand on-middellijk te distribueren naar alle leerlingen. Dit is eveneens mogelijk via een elektronischleerplatform, maar dan moeten alle leerlingen wel inloggen en het bestand downloaden. Eenprobleem als dit bestand vrij groot is en de Internetbandbreedte beperkt is.
Anderzijds is het omgekeerde niet mogelijk. Leerlingen kunnen geen bestand ‘posten’ in dezemap met enkel en alleen exclusieve schrijfrechten. In principe is het via geavanceerde be-veiligingsrechten wel mogelijk om dit in te stellen, maar met een grote groep (één klas) looptdit hopeloos vast.
Werkwijze:
• Maak een groep met alle leerlingen van het eerste jaar (1HA, 1HB) en de leraar Frans (An)
• Maak een map op de server (MapLeer) , met daarin de map MapEerstes.
• Deel de map ‘MapEerstes’ met leesrechten voor de groep ‘Eerstes’ en lees- en schrijfrechten voor An
• Plaats het script ‘MapDrive.ps1' in de map ‘Netlogon’
• Maak een groepsbeleid
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
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 be-staan 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 methode kun je natuurlijk alleen maar gebruiken als de login-naam begint met iets dat ver-wijst naar de groep die je wil samenstellen. Is dit niet het geval en wil je werken met bestaande groe-pen dan moet het script aangepast worden (zie verder):
if($memberOf -contains $group) wordt dan:
if($memberOf -contains '1HA'-or $memberOf -contains '1HB' -or $memberof -contains 'Leraars')
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
154
! Aanmaken gedeelde map
< Maak op de data-partitie de map ‘MapLeer’
< Maak daarin de map ‘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
8
11
Instructie nodig om boodschap te kunnen afdrukken (Forms)
Begin van de tekst van de boodschap
Koppeling met W Script voor koppelen stationsletter aan een gedeelde map
16 Krachtige instructie om van een gebruiker de verschillende groepslidmaatschappen te bepalen
Lijn 15, 18 en 19 zijn toegevoegd om de ‘-replace’- functie toe te lichten en mogen verwijderd worden
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
155
Dit gedeelte dien je zoveel keren te kopi-eren als er mappen zijn die je wenst tekoppelen.
Vergeet niet om elke keer eenandere stationsletter te kiezen!
23
24
26
30
33
De naam van de groep waarvoor de map moet gekoppeld worden.
Selectie of de gebruiker die is ingelogd ook deel uitmaakt van de groep
Te gebruiken stationsletter
Nagaan of de stationsletter niet in gebruik is. Zo ja, dan wordt de bestaande koppeling verwijderd
De koppeling wordt uitgevoerd
79
81
De spatie op het einde van ‘$boodschap wordt verwijderd
Als er geen mappen gekoppeld worden dan wordt de tekst ‘geen’ weergegeven
! Group Policy
< Maak een nieuw ‘Group Policy Object’ (MapDrive)
< Klik rechts, Edit
< Ga naar:User ConfigurationPoliciesW indows SettingsScripts (Logon/Logoff)
< Dubbelklik op ‘Logon’
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
156
< Ga naar het tabblad:PowerShell Scripts’
< Klik op ‘Add’
< Geef in bij ‘Script Name:’
\\windows7server\netlogon\MapDrive.ps1
< Klik op ‘OK’
< Klik op ‘OK’
< 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!
! Resultaat:
De gebruiker krijgt volgende boodschap te zien:
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
157
9.2 VBScript
VBScipt is eveneens een tekstdocument met de extensie .vbs. Alhoewel het perfect mogelijk is omscripts te schrijven in kladblok, is dit niet direct aangewezen omdat bij een eventuele foutmeldingsteeds verwezen wordt naar een lijnnummer. In tegenstelling tot PowerShell bevat Windows geentool om VBScript-programma’s te editeren.
Er is wel een zeer handige tool op de markt, VbsEdit van ‘AderSoft’. De laatste versie bevat ook eenmogelijkheid om van het script een uitvoerbaar programma te maken (.exe). Hierdoor vervallen veelargumenten 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
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
158
9.2.1 Herstellen wachtwoord
Een veel voorkomend probleem (zeker na een vakantieperiode) is dat een gebruiker zijn wacht-woord vergeten is. In de meeste gevallen moet dit ook onmiddellijk kunnen opgelost worden, wantanders kan de desbetreffende gebruiker niet verder. Deze taak overlaten aan de systeembeheer-der is niet zinvol, hij/zij moet dan continue bereikbaar zijn en ook bij de identificatie van de gebruikerzijn er problemen. Is de aanvrager wel echt de gebruiker waarvan het wachtwoord moet hersteldworden? 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 programma eventueel gekopieerd wordt naar de persoonlijke map ‘MijnDocumenten’ van de leerkracht. Wanneer dit programma niet regelmatig gebruikt wordt, zalmen de locatie vergeten en dit terugvinden op de server is niet zo eenvoudig.
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
159
9.2.1.1 Account Operators
< Open de console, ‘Active Directory Users and Computers’
< Open de map ‘Builtin’
< Open de groep ‘Account Operators’
< Klik op het tabblad ‘Members’
< Voeg de groep ‘leraars’ toe
< Klik op ‘OK’
9.2.1.2 Gedeelde map
< Maak op de server (data-partitie) de map
‘HerstelWachtwoord’
< Plaats in deze map het programma ‘Herstel-
Wachtwoord.vbs’
< Deel deze map met ‘Full Control’-rechten
voor de Administrator
< Deel deze map met ‘Read’-rechten voor de
groep leraars
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
160
9.2.1.3 HerstelWachtwoord.vbs
Rem AccountontgrendelenRem Nieuw wachtwoord instellenRem Luc DecuyperRem 2003-02-19
Dim objDirDim objDomeinDim DomainName
Rem Domein bepalen
Set objDir = GetObject("LDAP://RootDSE")Set objDomein = GetObject( "LDAP://" & objDir.Get("defaultNamingContext"))DomainName = objDomein.nameDomainName = mid(DomainName,4)
Rem Ingave account om te bewerkenUserName = InputBox("Geef de loginnaam van de account: ")
Rem Account deblokkerenSet UserObj = GetObject("WinNT://"& DomainName &"/"& UserName &"")If UserObj.IsAccountLocked = -1 then UserObj.IsAccountLocked = 0 UserObj.SetInfo Fout = FalseElse Fout = TrueEnd if If Fout Then Wscript.Echo "Account was niet geblokkeerd."Else Wscript.Echo "De account is opnieuw actief!"End If
Rem Nieuw wachtwoord instellenSet objDomein = GetObject("WinNT://" & DomainName)Set objGebruiker = objDomein.GetObject("user",UserName)
objGebruiker.setPassword "Test123"objGebruiker.setinfo
wscript.echo "Het wachtwoord staat terug op 'Test123'"
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
161
Rem Verplicht wijzigen aanzettenUserFlags UserName, DomainName,1, false, true, false,false
Rem Routine FlagsSub UserFlags(strUser,strDomain,strPassexpires,strNochange,strNoexpire,strDisable,strLocked)
Dim UserDim 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 &H00040End if
If strNoexpire = "true" thenUser.put "Userflags", flags OR &H10000end if
User.IsAccountLocked = strLocked
User.setinfo
Set User = nothing
End Sub
Opmerkingen:
• Het programma werd geschreven voor Windows Server 2000. De scripttaal is ondertussenuitgebreid, dus kan het best zijn dat dit programma korter en krachtiger kan, maar het werkt al-vast. Vermoedelijk kan dit in PowerShell veel korter. In de bijlage is een klein programma toege-voegd die het wachtwoord van de gebruiker reset. Er moet nog gezocht worden naar een metho-de om de loginnaam van de gebruiker in te geven en een mogelijkheid om dit te laten uitvoerendoor 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.
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
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 programma antwoordt met de volgende mededelingen:
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
163
9.3 Rechten op mappen of bestanden
Een belangrijk onderdeel naar beveiliging toe is het correct instellen van de rechten van gebruikersop 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 program-ma 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 gebrui-ken 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ëxperi-menteerd.
9.3.1 Mappen
De mappen van de gebruikers (in DocLeer) worden omgeleid naar de server. Gebruiken we ma-pomleiding (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) waardooriedereen nu in deze mappen kan lezen, schrijven, verwijderen ...
... dit wijzigen is best zinvol ...
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
164
9.3.2 Mogelijke foutmelding
W ordt er vergeten om de ‘Grant’-rechten te ver-wijderen bij mapomleiding en wil men als admini-strator toch toegang tot deze map dan zal dezemelding verschijnen:
Dit kan vrij eenvoudig opgelost worden door heteigenaarsschap opnieuw over te nemen. De fout-melding komt daarna niet meer voor, ook niet alser 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 komt 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 uitgepaktvia ‘Xcacls_Installer.exe’. Deze versie is iets recenter dan xcacls.exe dat deel uitmaakt van de ‘Re-source Kit’(zie ook: http://support.microsoft.com/kb/825751).
Er zijn twee ‘scriptengines’, WScript en CScript. Standaard wordt wscript gebruikt, maar xcacls.vbswerkt beter met cscript. Verander daarom de standaardinstelling naar cscript:
In te geven via de ‘Command prompt’ : cscript.exe /h:cscript
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
165
Te gebruiken syntax:
xcacls E:\Docleer\1HA.Karim /G <naam1>:F <naam 2>:M /F
Verklaring:
Aan de map ‘E:\Docleer\1HA.Karim’ wordt aan de volgende gebruiker (naam1) ‘Full Control’ rech-ten toegekend (:F) en aan de gebruiker naam2 ‘Modify’-rechten
/G = Grant
/F = wordt gebruikt in combinatie met mappen. De rechten op alle onderliggende bestanden enmappen worden aangepast. Om bestanden in onderliggende mappen ook aan te passen moetin principe ook /T (of /T /S) gebruikt worden. Na controle blijkt dit evenwel niet nodig te zijn.
<naam1> = <de ‘NetBios-naam’ van het domein>/Administrator (vb.: school/Administrator)
<naam2>= <de ‘NetBios-naam’ van het domein>/<loginnaam van de gebruiker> (voorbeeld: school/1HA.Karim)
9.3.3.1 Aanmaken rekenblad
De rechten op de mappen kunnen maar aangepast worden nadat alle gebruikers zich hebben aan-gemeld. Deze namen gaan we eerst in een tekstbestand plaatsen en daarna invoeren in een reken-blad. Om deze namen te bekomen zijn er twee mogelijkheden:
• Gezien de namen van de mappen overeen komen met de loginnamen kan een script gebruiktworden (LoginNamen.vbs) om deze namen in een tekstbestand te plaatsen.
• Een andere (eenvoudigere) methode is de namen van de mappen uitlijsten (dir) zonder bijko-mende gegevens (/b) en doorsturen (>) naar een tekstbestand
Syntax: DIR /B > C:\Namen.txt
(in te voeren via de ‘Command Prompt’ opdezelfde plaats van de uit te lijsten mappen)
Deze methode biedt bovendien het voordeel dat de namen in ‘MS-DOS’-schrijfwijze wordenweergeven zodat het resultaat rechtstreeks in een tekstbestand kan geplaatst worden vooruitvoering. Bewaren via MS-Word (zie 6.4.1.2) is dan niet nodig.
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
166
< Open het rekenblad ‘LijstXcacls.xls’
A2xcacls, gevolgd door het ‘path’ van de map waarvan de rechten moet veranderd worden
Let op het aanhalingsteken!
B2 Grant ‘Full control’ aan de administrator
C2 De ‘NetBios’ -naam van het domein
D... De aangemaakte instructie
< 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)
9.4 Aanpassen rechten software
Alle software die ontwikkeld wordt voor Windows XP moet in principe voldoen aan een aantal af-spraken 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 pakkettendie een zgn. netwerkversie zijn beantwoorden niet aan bovenstaande eisen (o.a. het boekhoudpak-ket ProAcc), maar zijn wel installeerbaar via het netwerk.
Talrijke andere pakketten (vooral didactische) zoals Bob, ‘De Computer en Wij’, Fvisem, Azerty-typ,... installeren zichzelf gewoon in de root van de systeemschijf en werken maar als de gebruiker schrijfrechten heeft op de installatiemap en/of sommige bestanden.
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
167
Om zo’n programma’s toch te kunnen gebruiken kunnen we deze schrijfrechten geven aan degroep gebruikers van dit programma. Dit voorkomt de noodzaak om schrijfrechten te moeten toe-kennen aan de volledige schijf.
Dit is wel een oplossing, maar het voorkomt niet dat een gebruiker het bestand of de map kan‘verknoeien’. Gebeurt dit in zijn eigen persoonlijke map dan zijn de gevolgen voor de gebruikerzelf, gebeurt het hier dan zal het programma hoogst waarschijnlijk niet meer werken.
Bij een aantal programma’s (Bob, De Computer en W ij, ...) is het nodig dat de gegevens individu-eel bewaard worden en een gebruiker een volgende keer met deze gegevens kan verder werken. Dit kan niet zomaar in het programma zelf, want een volgende gebruiker krijgt dan deze gege-vens te zien....
In zo’n geval wordt het echt moeilijk. W el kunnen deze programma’s in de meeste gevallen hundata bewaren op een ander station (is meestal voorzien voor het diskette-station, maar een an-dere stationsletter is ook mogelijk). Plaats de (basis)gegevens dan ook in de map ‘Mijn documen-ten’ en zorg ervoor dat bij het aanmelden van de gebruiker er een script gestart wordt dat de kop-peling maakt 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 boekhoud-pakket 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 in-
stallation’ en kies ‘New ’
Niet ‘Properties’ !
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
168
Zorg ervoor dat je het correctepad opgeeft waar de softwarezich bevindt!
W el: \\<naam server>\NetLogon\...
Niet: C:\.....
Het .msi-pakket bevat de nodige instel-lingen voor installatie, maar...
< Klik op ‘Deployment, Advanced’
< Plaats een vinkje bij:
‘Ignore language when deploying
this package’
Doe je dit niet dan zal de installatie nietslagen als je een Nederlandstalig pakketinstalleert vanaf een Engelstalige ser-ver.
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
169
Problemen:
• Na de installatie ontbreken er twee bestanden, ‘serial.txt’ en ‘ProAccc.ini’
Het ‘ .ini-bestand’ moet zo ingesteld worden dat bij het starten van het programma er gevraagd wordtnaar het gegevensbestand (.df1) in de map ‘Mijn documenten’ (zie handleiding ProAcc)
• De gebruiker moet schrijfrechten hebben op ‘ProAcc.lbr’ en’ ProAcc.oif’
• Hiervoor gebruiken we cacls met ‘Grant’-rechten :C (schrijven), voor de (beveiligings)groep GrpPro-Acc. (Dit is een groep die alle gebruikers bevat die met ProAcc moeten werken).
Het volgend script biedt hiervoor een oplossing:
'Kopiëren serienummer en'rechten map ProAcc'Luc Decuyper'2006-03-09
Option Explicit
Dim ObjFso, oShellDim 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 ‘administrator’-rechten nodig. M.a.w. dit is terug eengroepsbeleid dat via ‘Computer Configuration’ moet uitgevoerd worden.
• ‘oShell.run’ start een extern programma (.exe)
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
170
9.5 Printers aansluiten
Een printer installeren in het netwerk is niet zo eenvoudig. Basisprobleem is dat een printer eengebruikersconfiguratie is en niet een computerconfiguratie.
• Wordt er geen verplicht profiel gebruikt, dan krijgt een nieuwe gebruiker de printerinstellingenmee 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, danis er geen probleem, in het ander geval wel, want de printer ontbreekt dan in hun profiel en deprinter zal extra moeten toegevoegd worden. Hiervoor bestaan ook scripts, maar deze verande-ren rechtstreeks registerinstellingen. Dit is gevaarlijk en werken soms niet. Bovendien, wat alsde 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 lokaal-gebonden en kan dus niet in het verplicht profiel opgenomen worden dat geldt voor allegebruikers/computers in het gebouw. Een profiel per lokaal? Een gebruiker kan slechts éénprofiel hebben en als de gebruiker in meerde lokalen een computer moet gebruiken kan het bestgebeuren dat er wordt afgedrukt in het verkeerde lokaal...
De oplossing is vrij eenvoudig, maar netwerkintensief:
• Installeer op een computer 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 PrinterPathWshNetWork.SetDefaultPrinter PrinterPathWscript.Echo("Printer werd geïnstalleerd")
Case "LOK104"PrinterPath = "\\IsaServer\LOK104"
WshNetWork.AddWindowsPrinterConnection PrinterPathWshNetWork.SetDefaultPrinter PrinterPathWscript.Echo("Printer werd geïnstalleerd")
.........
End Select
Bespreking:
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)
171
• Na het aanmelden wordt de naam van de computer gebruikt om te bepalen in welk lokaal degebruiker zich bevindt
• In een ‘Case’-structuur wordt het voorgestelde ‘PrinterPath’ toegevoegd aan de printers van degebruikers
• Deze printer wordt ingesteld als standaardprinter (SetDefaultPrinterPrinterPath)
• Met het volgend script toe te voegen voor de selectie wordt er een lus gemaakt waarbij eerst eenbestaande 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 PrinterPathnext
Opmerkingen:
• Deze methode vereenvoudigt zeer sterk het beheer van printers. Het printerbeheer van oudereWindowsversies (Windows XP, Windows Server 2003) is niet zo degelijk als het printerbeheervan de versie Windows Server 2008 (R2). Gebruik best dit besturingssysteem om de gedeeldeprinters op te installeren.
• In principe moet dit script uitgevoerd worden bij het aanmelden. Dit gebeurt meestal met heelveel gebruikers gelijktijdig zodat het netwerk sommige taken niet doorgeeft. Dit is zeer eenvou-dig op te lossen door het programma op de lokale ‘C:\’-schijf te plaatsen en in de groep ‘Opstar-ten’ (Start, Alle programma’s, Opstarten) een snelkoppeling naar dit programma te maken.
• Dit programma werkt maar als de printers aanstaan ...
PowerShell en VBScript, hst. 9Een servergestuurd netwerk
(Windows 2008 R2)