Windows Admin Scripting 05
Windows Admin Scripting 05
3rd Edition
Presented by
Chapter
5
See page:
90 90 90 91 92 93 93 94 95 96 97 97 98 100 101 108 108 109 109
85
In Brief
In this chapter, you will first learn how to script applications, Control Panel applets, and Windows and Wizards from the command line. You will then learn about automation and how to script the Windows shell and most common applications (for example, Word, Excel, Internet Explorer). Finally, you will learn how to use send-keys to automate applications that do not easily support conventional scripting methods. In later chapters, you will learn how to automate Windows and applications to perform more specific tasks (such as adding shares, controlling services, or performing backups).
Automation
Automation was originally created as a method for applications to easily access and control one another. Application automation originally developed from Dynamic Data Exchange (DDE), grew to Object Linking and Embedding (OLE), developed into OLE automation, and eventually turned into just Automation. Automation interfaces with applications through Component Object Model (COM) objects. COM objects are ActiveX controls that contain isolated sections of reusable code. Through automation, you can create documents, save files, play sounds, and even control the operating system, depending on whether it has an object model.
A common method to produce easy VBA code is to record a macro and edit it in the built-in Visual Basic editor. To record a new macro, start an Office application and select Tools|Macro|Record New Macro. After you have started recording, perform the functions you would like to code and then stop the macro recording. Next, start the Visual 86
In Brief
Basic Editor by selecting Tools|Macro|Visual Basic Editor. After the editor opens, select Tools|Macro, highlight your macro, and click Edit. In Figure 5.1, you can see the VBA code of all the functions you have just recorded. Through Windows Script Host, you can use VBScript to call many VBA functions to automate Office applications. There are three steps to controlling an application through automation: accessing the application object, controlling the application, and closing the application object.
Once the instance is created, you can use this variable throughout your script to access all the methods within the object. Here is a list of the most common automation identifiers: Access.ApplicationUsed to automate Microsoft Access Excel.ApplicationUsed to automate Microsoft Excel InternetExplorer.ApplicationUsed to automate Microsoft Internet Explorer Outlook.ApplicationUsed to automate Microsoft Outlook
Figure 5.1
Similarly, you can hide the object by setting the visible state to False.
If an application object is not closed properly, that application will remain in memory regardless of its visibility or use. You should leave objects open only if you plan to use them at a later moment, such as using Microsoft Outlook to send admin alerts.
88
Immediate Solutions
A Word of Caution
This chapter contains many scripting examples on automating objects, applications, and Windows. A wrong click here and an extra tab there, and you may turn a script designed to return details into a script that incorrectly sets details. As with all scripts, you should first test in an isolated testing environment to ensure the script produces the desired results before using the script in a production environment.
Immediate Solutions
90
Immediate Solutions
Here, path is any drive, folder, file, or combination of these to be scanned; and options are any valid command-line switches passed to NAVW32.EXE. Here is a list of the available switches: /AScan all drives except drives A and B. Network drives will be scanned if the Allow Network Scanning option is selected. /LScan all local drives except drives A and B. /SScan all subfolders specified in the path. /MoptionEnable or disable memory scanning. Here, option is + for enabling, and - for disabling. /MEMScan only memory. /BoptionEnable or disable boot sector scanning. Here, option is + for enabling, and - for disabling. /BOOTScan only boot sectors. /NORESULTSDo not display scan results. /DEFAULTReset settings to default. /HEUR:optionSets the heuristic scanning sensitivity. Here, option can be values 04 where 4 is the highest and 0 is disabled.
Scripting FTP
FTP (File Transfer Protocol) is a common method for transferring files between two locations. Although you could use a third-party FTP client (such as FlashFXP), Microsoft FTP is a more than adequate file transfer tool that supports command-line switches, commands, and script files. FTP command line switches control how the FTP client starts. The most common command line switches are: -iInteractive mode, turns off interactive prompting during multiple file transfers -nPrevents automatic logon -s: scriptSpecifies an FTP script to run -vVerbose mode, turns on transfer data statistics and responses To start an FTP client in verbose and interactive more, start a command prompt and enter the following:
ftp v i
Once the FTP client is active, you can enter various commands to list, delete, put, retrieve and files. The most common FTP commands are: asciiSelected by default, sets the file transfer type to ASCII (shar, uu) 91
promptToggles interactive prompting put fileUploads a local file to a remote system user nameSpecifies the account name to connect to the remote system
TIP: To see the available FTP switches, enter FTP -? at the command line.
92
Immediate Solutions
Here, ftpserver is the server to connect to; username and password are the logon credentials; ftpdirectory is the directory to upload the files to on the FTP server; filedirectory is the local directory where the files reside; and files are the multiple files to upload (such as *.*, *.txt, daily.*).
TIP: To upload a single file, change the MPUT command to PUT.
OPEN ftpserver Username Password CD ftpdirectory LCD filedirectory MGET *.* BYE
Here, ftpserver is the server to connect to; username and password are the logon credentials; ftpdirectory is the directory to download files from an FTP server; and filedirectory is the local directory where the files reside.
Here, server is the system containing the network share to store the antivirus update files; logfile is the full path and file name of a text file to log the FTP transfer, and ftpscript is the full path and file name of a script file containing the following:
open ftp.symantec.com user anonymous [email protected] lcd Z:\ cd \public\english_us_Canada\antivirus_definitions\ norton_antivirus\static bin mget * bye
Here, server is the system containing the network share to store the antivirus update files; logfile is the full path and file name of a text file to log the FTP transfer, and ftpscript is the full path and file name of a script file containing the following:
open ftp.nai.com user anonymous
94
Immediate Solutions
[email protected] lcd Z:\dats cd \pub\antivirus\datfiles\4.x prompt bin mget * bye
NOTE: The script above obtains antivirus updates for McAfee VirusScan 4.x. You can change the highlighted code above to obtain updates for your specific version.
95
(continued)
96
Immediate Solutions
Table 5.1 Task Shut down Windows Shut down Windows Shut down Windows (Force) Swap mouse buttons Tile windows Add new printer Wizards and dialog boxes (continued). RUNDLL32 calls RUNDLL32.EXE USER.DLL,ExitWindows RUNDLL32.EXE SHELL32.DLL,SHExitWindowsEx 1 RUNDLL32.EXE KRNL386.EXE,exitkernel RUNDLL32.EXE USER.DLL,swapmousebutton RUNDLL32.EXE USER.DLL,tilechildwindows RUNDLL32.EXE SHELL32.DLL, SHHelpShortcuts_RunDLL AddPrinter
97
MSIE.Document.Write "<tr><td>" & efile & "</td>" & _ "<td> </td><td align=right>" & efile.size & _ "</td></tr>" Next End Sub Sub GoSubFolders (objDIR) If objDIR <> "\System Volume Information" Then ListFiles objDIR For Each eFolder in objDIR.SubFolders MSIE.Document.Write "<tr><td>" & _ efolder & "</td><td><DIR></td><td " & _ "align=right>" & efolder.size & "</td></tr>" GoSubFolders eFolder Next End If End Sub
NOTE: You need to append the GetFolder routine, listed earlier in Chapter 4, to this script in order for it to run. In this example, the window will not be updated until the directory listing is complete.
Immediate Solutions
Set FSO = CreateObject("Scripting.FileSystemObject") Set WordApp = CreateObject("Word.Application") sDIR = "C:\" sEXT = "TMP" sTITLE = "Deleting Files" WordApp.Documents.Add WordApp.Visible = True WordApp.Caption = sTITLE WordApp.Selection.Font.Bold = True WordApp.Selection.TypeText "Deletion Log:" & sEXT & _ " Files: " WordApp.Selection.InsertDateTime WordApp.Selection.Font.Bold = False WordApp.Selection.TypeText vblf & vblf Set objDIR = GetFolder(sDIR) GoSubFolders objDIR WordApp.Selection.Font.Bold = True WordApp.Selection.TypeText vblf & "**END OF LOG**"
Sub MainSub (objDIR) For Each efile in objDIR.Files fEXT = FSO.GetExtensionName(efile.Path) If LCase(fEXT) = LCase(sEXT) Then DelFile efile End If Next End Sub Sub DelFile(sFILE) On Error Resume Next FSO.DeleteFile sFILE, True If Err.Number <> 0 Then WordApp.Selection.TypeText "Error deleting: " & _ sFILE & vblf Else WordApp.Selection.TypeText "Deleted: " & sFILE & vblf End If End Sub
NOTE: You need to append the GetFolder routine, listed in Chapter 4, to this script in order for it to run.
99
ExcelApp.Selection.Font.Bold = True ExcelApp.Cells(Row,Column).Value = "Deletion Log:" & sEXT & _ " Files" Row = Row + 1 Set objDIR = GetFolder(sDIR) GoSubFolders objDIR ExcelApp.Selection.Font.Bold = True Row = Row + 1 ExcelApp.Cells(Row,Column).Value = "**END OF LOG**" Sub MainSub (objDIR) For Each efile in objDIR.Files fEXT = FSO.GetExtensionName(efile.Path) If LCase(fEXT) = LCase(sEXT) Then DelFile efile End If Next End Sub Sub GoSubFolders (objDIR) If objDIR <> "\System Volume Information" Then MainSub objDIR For Each eFolder in objDIR.SubFolders GoSubFolders eFolder Next End If End Sub
100
Immediate Solutions
Sub DelFile(sFILE) On Error Resume Next FSO.DeleteFile sFILE, True If Err.Number <> 0 Then ExcelApp.Cells(Row,Column).Value = "Error deleting: " & _ sFILE Else ExcelApp.Cells(Row,Column).Value = "Deleted: " & sFILE End If Row = Row + 1 End Sub
NOTE: You need to append the GetFolder routine, listed in Chapter 4, to this script in order for it to run.
101
Here, RootFolder can be a directory path or a special folder constant. Table 5.2 lists the special folder constants. Table 5.2 Constant Special folder constants. Folder or Directory Path All Users Desktop All Users Program folder Control Panel Printers Folder Personal Folder Favorites Folder Startup Folder Recent Folder SendTo Folder Recycle Bin Start Menu Desktop Directory Drives (My Computer) Network Neighborhood Fonts Folder Templates Folder Common Start Menu Common Programs Folder
&H0 &H2 &H3 &H4 &H5 &H6 &H7 &H8 &H9 &Ha &Hb &H10 &H11 &H12 &H13 &H14 &H15 &H16
(continued)
102
Immediate Solutions
Table 5.2 Constant &H17 &H18 &H19 &H1a &H1b &H1c &H1d &H1e &H1f &H20 &H21 &H22 &H23 &H24 &H25 &H26 &H27 &H28 Special folder constants (continued). Folder or Directory Path Common Programs Folder Common Startup Folder Common Desktop Directory Application Data Folder PrintHood Folder Local Application Data Folder Alt Startup Folder Common Alt Startup Folder Common Favorites Folder Common Internet Cache Folder Common Cookies Folder History Folder Common Application Data Folder Windows Folder System Folder Program Files Folder My Pictures Folder Profile Folder
Exploring a Folder
To explore a folder through the shell automation object, proceed as follows:
Set Shell = CreateObject("Shell.Application") Shell.Explore RootFolder
Opening a Folder
To open a folder through the shell automation object, proceed as follows:
Set Shell = CreateObject("Shell.Application") Shell.Open RootFolder
103
Here, SysDialog consists of the following methods: FileRunCalls the Start|Run dialog box FindComputerCalls the Start|Find/Search|Computer dialog box FindFilesCalls the Start|Find/Search|File or Folders dialog box SetTimeCalls the Date/Time dialog box ShutdownWindowsCalls the Start|Shutdown dialog box TrayPropertiesCalls the Tray Properties dialog box
104
Immediate Solutions
Ejecting a PC
To undock a notebook through the shell automation object, proceed as follows:
Set Shell = CreateObject("Shell.Application") Shell.EjectPC
Suspending a Computer
Most laptops have a feature called suspend, used to place the computer in lower power mode when not in use. To suspend a computer through the shell automation object, proceed as follows:
Set Shell = CreateObject("Shell.Application") Shell.Suspend
Here, Drive is the target drive (i.e., C:) and Description is the description to set.
105
Here, RootFolder can be a directory path or a special folder constant. The output of the script may appear similar to Figure 5.2.
Immediate Solutions
Figure 5.3
Although the FileSystemObject can perform file management operations, it does not display any of these dialog boxes. To use these dialog boxes in your scripts, you can use the shell automation object. To copy or move files and folders to another folder, proceed as follows:
Set Shell = CreateObject("Shell.Application") Set Folder = Shell.NameSpace(RootFolder) Folder.Method "Files", Flags
Here, RootFolder can be a directory path or a special folder constant; Method is the CopyHere or MoveHere folder method; Files are the files or folders to copy or move; and Flags are the optional parameters that control the file operation. You can concatenate multiple parameters using the + character.
NOTE: You can use the FOF_SILENT flag to suppress the progress dialog box. For more information on the file operation flags, search Microsofts Web site for SHFILEOPSTRUCT.
Here, RootFolder can be a directory path or a special folder constant; File is any file within the RootFolder; and Task is any task listed in the context menu. 107
Figure 5.4
There are two important things to note about the InvokeVerb Task. The first is that if the task contains a quick key, you must precede that letter with an ampersand (&). For example, to run the Open task for Figure 5.4, you would enter &Open. The second is that if the command pulls up a system window (such as a properties window), that window will close as soon as the script ends.
108
Immediate Solutions
Winwaitactive("Defragmentation Complete") Send("{TAB}{ENTER}") Winwaitactive("Disk Defrag") Send("{ALTDOWN}{F4}{ALTUP}") Func AdlibHandler() If WinActive("Disk Defrag", "Do you want to run Disk Defragmenter") Then WinActivate("Disk Defrag", "Do you want to run Disk Defragmenter") Send("!Y") EndIf EndFunc
Here, defragmmc is the full path to MMC.exe and DFRG.msc (ex.C:\WINDOWS\system32\mmc.exeC:\WINDOWS\system32 \DFRG.MSC).
109