440 likes | 542 Views
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.
E N D
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
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 window • Set ie = WScript.CreateObject("InternetExplorer.Application", "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
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 "<html><head><title>Service Status </title></head>" objdoc.Writeln "<body bgcolor='white'>" objdoc.Writeln "<table width='100%'>" objdoc.Writeln “<tr><td width='50%'><b> Service</b></td>" objdoc.Writeln "<td width='50%'><b>State </b></td></tr>"
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 “<tr><td width='50%'>" & objService.DisplayName & "</td>" objdoc.Writeln "<td width='50%'>" & objService.State & "</td>" objdoc.Writeln "</tr>" Next objdoc.Writeln “</table></body></html>" 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 "<tr><td width='50%'>Computger Name: </td>" objdoc.Writeln "<td width='50%'>" & objComputer.Name & "</td></tr>" objdoc.Writeln "<tr><td width='50%'>Total Memory: </td>" objdoc.Writeln "<td width='50%'>" & int((objComputer.TotalPhysicalMemory)/1048576) & "</td></tr>" Next Set colSettings = objWMIService.ExecQuery ("Select * From Win32_TimeZone") For Each objComputer in colSettings objdoc.Writeln "<tr><td width='50%'>Timezone: </td>" objdoc.Writeln "<td width='50%'>" & objComputer.DayLightName & "</td></tr>" 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) < more code was here> Do While objFile.AtEndOfStream = false strComputer = objFile.ReadLine <code for outputting data on strComputer> Loop objFile.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 "<tr><td width='50%'>" & strComputer & "</td>" objdoc.Writeln "<td width='50%'>" & objComputer.username & "</td></tr>" Next
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.
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 "<tr>" objdoc.Writeln "<td width='50%'>UserName: </td>" objdoc.Writeln "<td width='50%'>" & User.Name & "</td>" objdoc.Writeln "</tr>" Next
Display all Domain Groups Set Computer = GetObject("WinNT://avemaria") Computer.Filter = Array("Group") For Each Group in Computer objdoc.Writeln "<tr><td width='50%'>GroupName: </td>" objdoc.Writeln "<td width='50%'>" & Group.Name & "</td>" objdoc.Writeln "</tr>" Next
Display members of Student Group Set Group = GetObject("WinNT://avemaria/students, group") For Each User in Group.Members objdoc.Writeln “<tr><td width='50%'>UserName: </td>" objdoc.Writeln "<td width='50%'>" & User.Name & "</td>" objdoc.Writeln "</tr>" 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 "<tr><td width='50%'>" & User.FullName &"</td>" objdoc.Writeln "<td width='50%'></td></tr>" objdoc.Writeln "<tr><td width='50%'>" & User.Name &"</td>" objdoc.Writeln "<td width='50%'></td></tr>" Set User = GetObject("WinNT://avemaria/" & User.Name & ",user") For Each Group in User.Group objdoc.Writeln "<tr><td width='50%'></td>" objdoc.Writeln "<td width='50%'>" & Group.Name & "</td><tr>“ Next Next
Password Never Expires Flag? Set Group = GetObject("WinNT://avemaria/students, group") For Each User in Group.Members objdoc.Writeln "<tr><td width='50%'>" & User.Name & "</td>" Set User = GetObject("WinNT://avemaria/" & User.Name & ",user") flags = User.Get("UserFlags") If (Flags And &H10000) = 0 then objdoc.Writeln "<td width='50%'>Password will expire</td>" Else objdoc.Writeln "<td width='50%'>Password does not expire</td>" End If objdoc.Writeln "</tr>" 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 "<tr><td width='50%'>" & User.Name & "</td>" Set User = GetObject("WinNT://avemaria/" & User.Name & ",user") if User.passwordexpired = 0 then objdoc.Writeln "<td width='50%'>Password safe</td>" else objdoc.Writeln "<td width='50%'>Force change set</td>" End If objdoc.Writeln "</tr>" Next
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 • http://www.microsoft.com/technet/community/scriptcenter/default.mspx • http://www.winscripter.com • http://www.adsi4nt.com • http://www.15seconds.com/focus/ADSI.htm