Scripting 101 for Network Administrators Jim Kent, Network Administrator Ave Maria Law School
What is scripting ? Autoexec.bat, batch file scripts. Network login scripts. A script is a set of commands aimed at automating a process. Scripts are usually setup to solve a problem.
How to turn off the computers in the lab at the end of the day? shutdown -s -m \\hflyb01 -t 05 -f shutdown -s -m \\805x20b -t 05 -f shutdown -s -m \\535x20b -t 05 -f shutdown -s -m \\705x20b -t 05 –f Shutdown.exe is an add on from the resource kit.
What are we going to cover: WSH (Windows Script Host) VBScript (Visual Basic Scripting) WMI (Windows Management Instrumentation) ADSI (Active Directory Service Interfaces)
Simple Script Set objWMIService = GetObject("winmgmts:") Set objLogicalDisk = objWMIService.Get ("Win32_LogicalDisk.DeviceID='c:'") Wscript.Echo objLogicalDisk.Freespace
Free space on the local C: drive
Display Memory Script strComputer = "." Set objSWBemServices = GetObject ("winmgmts:\\" & strComputer) Set colSWbemObjectSet = objSWbemServices. InstancesOf("Win32_LogicalMemoryConfiguration") For Each objSWBemObject in colSWbemObjectSet Wscript.Echo "Total Physical Memory (kb): " & objSWbemObject.TotalPhysicalMemory next
Output from Memory Script
Output window Set ie = WScript.CreateObject("InternetExplorer.Applicati on", "IE_") ie.Navigate "about:blank" ie.ToolBar = 0 ie.StatusBar = 0 ie.Width = 600 ie.Height = 500 ie.Left = 0 ie.top = 0 ie.Visible = 1
Empty IE Window
Display Services Use WMI to output all the services on the computer. Also show the status of each service.
Do While (ie.Busy) Loop Set objDoc = ie.Document objdoc.Open objdoc.Writeln " Service Status " objdoc.Writeln " " objdoc.Writeln “ Service " objdoc.Writeln " State "
strComputer = "." Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer& "\root\cimv2") Set colServices=objWMIService.ExecQuery ("Select * from Win32_Service") For Each objService in colServices objdoc.Writeln “ " & objService.DisplayName & " " objdoc.Writeln " " & objService.State & " " objdoc.Writeln " " Next objdoc.Writeln “ " objdoc.Write()objdoc.Close
Display Info from a computer Use WMI to display the following stats. Display Computer Name Display the total physical ram in computer Display the time zone.
strComputer = "." Set objWMIService= GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colSettings = objWMIService.ExecQuery ("Select * From Win32_ComputerSystem") For Each objComputer in colSettings objdoc.Writeln " Computger Name: " objdoc.Writeln " " & objComputer.Name & " " objdoc.Writeln " Total Memory: " objdoc.Writeln " " & int((objComputer.TotalPhysicalMemory)/ ) & " " Next Set colSettings = objWMIService.ExecQuery ("Select * From Win32_TimeZone") For Each objComputer in colSettings objdoc.Writeln " Timezone: " objdoc.Writeln " " & objComputer.DayLightName & " " Next
Display same info on multiple computers Add the ability to read a text file of computer names. Use IE window to output the data for each computer.
Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\cpu.txt", ForReading) Do While objFile.AtEndOfStream = false strComputer = objFile.ReadLine LoopobjFile.Close
Local logged on user Use WMI to display the logged on user. Setup script to show the user on all lab computers. Use a text file list of computers to check.
Do While objFile.AtEndOfStream = false strComputer = objFile.ReadLine Set objWMIService= GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colSettings = objWMIService.ExecQuery ("Select * From Win32_ComputerSystem") For Each objComputer in colSettings objdoc.Writeln " " & strComputer & " " objdoc.Writeln " " & objComputer.username & " " Next
Users logged into lab computers
WMI WMI comes standard preloaded and setup on Windows 2000/XP computers. Make sure the WMI service is running. Key to WMI is finding the class you want to query. Must have admin rights on local PC or networked pc to get any info back.
Download Scriptomatic
ADSI Released in 1997 as a set of generic interfaces that access and manipulate different directory services. Admins and Developers can use ADSI to enumerate and managed resources in a directory service. Can Read, Modify, Create and Delete domain objects.
All Users Script Set Computer = GetObject("WinNT://avemaria") Computer.Filter = Array("User") For Each User in Computer objdoc.Writeln " " objdoc.Writeln " UserName: " objdoc.Writeln " " & User.Name & " " objdoc.Writeln " " Next
All Users
Display all Domain Groups Set Computer = GetObject("WinNT://avemaria") Computer.Filter = Array("Group") For Each Group in Computer objdoc.Writeln " GroupName: " objdoc.Writeln " " & Group.Name & " " objdoc.Writeln " " Next
Display members of Student Group Set Group = GetObject("WinNT://avemaria/students, group") For Each User in Group.Members objdoc.Writeln “ UserName: " objdoc.Writeln " " & User.Name & " " objdoc.Writeln " " count = count + 1 Next
Display all groups of each student Set Group = GetObject("WinNT://avemaria/students, group") For Each User in Group.Members objdoc.Writeln " " & User.FullName &" " objdoc.Writeln " " objdoc.Writeln " " & User.Name &" " objdoc.Writeln " " Set User = GetObject("WinNT://avemaria/" & User.Name & ",user") For Each Group in User.Group For Each Group in User.Group objdoc.Writeln " " objdoc.Writeln " " objdoc.Writeln " " & Group.Name & " “ objdoc.Writeln " " & Group.Name & " “ Next NextNext
User Properties
Password Never Expires Flag? Set Group = GetObject("WinNT://avemaria/students, group") For Each User in Group.Members objdoc.Writeln " " & User.Name & " " Set User = GetObject("WinNT://avemaria/" & User.Name & ",user") flags = User.Get("UserFlags") If (Flags And &H10000) = 0 then objdoc.Writeln " Password will expire " objdoc.Writeln " Password will expire "Else objdoc.Writeln " Password does not expire " objdoc.Writeln " Password does not expire " End If objdoc.Writeln " " Next
Force Password change flag Force user to change password on next logon flag
Set Group = GetObject("WinNT://avemaria/students, group") For Each User in Group.Members objdoc.Writeln " " & User.Name & " " Set User = GetObject("WinNT://avemaria/" & User.Name & ",user") if User.passwordexpired = 0 then if User.passwordexpired = 0 then objdoc.Writeln " Password safe " objdoc.Writeln " Password safe " else else objdoc.Writeln " Force change set " objdoc.Writeln " Force change set " End If End If objdoc.Writeln " " Next
Modify User Flags
Create User Accounts Use text file for data source. Source reads one line of text at a time. Use ~ character to separate fields Username~password~fullname~ Description~loginscript kent1~password1234~kent, test1~Test Account~ student.bat
Do While objFile.AtEndOfStream = false strdataline = objFile.ReadLine myuser = Split(strdataline,"~") Set Computer = GetObject("WinNT://avemaria") Set User = computer.create("User",myuser(0)) call User.SetPassword(myuser(1)) user.fullname = myuser(2) user.Description=myuser(3)user.loginscript=myuser(4)user.setinfo Wscript.echo "Created user: " & myuser(0) Loop
Resources Microsoft Scripting Guide Microsoft Scripting Guide Microsoft Scripting Guide
Resources scriptcenter/default.mspx scriptcenter/default.mspx