Loginscripty pro Windows (Visual Basic Scripting)


Vytvoření objektů a kolekcí používaných ve scriptu
objekty z Active Directory, např:
Set objSysInfo = CreateObject(„ADSystemInfo“)
Set objCurrentUser = GetObject(„LDAP://“ & objSysInfo.UserName)
objekty typu shell a filesystém:
Set objFSO = CreateObject(„Scripting.FileSystemObject“)
Set objShell = WScript.CreateObject („WSCript.shell“)
objekty a kolekce z WMI – Windows Management Instrumentation
Set objWMIService = GetObject(„winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2“)
Set colComputers = objWMIService.ExecQuery („SELECT * FROM Win32_ComputerSystem“)

Získání systémových proměnných
strUserName = objShell.expandenvironmentstrings („%username%“)
strSysDrive = objShell.expandenvironmentstrings („%systemdrive%“)
strSystemRoot = objShell.expandenvironmentstrings („%systemroot%“)
strProgramFiles = objShell.expandenvironmentstrings („%programfiles%“)
strComputerName = objShell.expandenvironmentstrings („%computername%“)
strUserProfile = objShell.expandenvironmentstrings („%userprofile%“)

Systémové funkce:
Zjištění členství přihlášeného uživatele ve skupinách, vyžaduje definici objektu objCurrentUser
strGroup = LCase(Join(objCurrentUser.MemberOf))
IPadresa počítače z WMI, vyžaduje definici objektu objWMIService
Set IPConfigSet = objWMIService.ExecQuery(„Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE AND DNSDomain=’mydomain.cz’“)
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
strIP=strIP & IPConfig.IPAddress(i)
pole = Split(IPConfig.IPAddress(i), „.“)
strComputerSubnet = pole(0) & „.“ & pole(1) & „.“ & pole(2) & „.“ & pole(3)
Next
End If
Next
Zjištění role počítače(0-pracovní stanice,1-pracovní stanice v doméně,2-standalone server,3-server v doméně,4-domain controler,5-primary domain controler), vyžaduje definici objektu objWMIService a kolekce colComputers.
For Each objComputer in colComputers
strComputerRole = objComputer.DomainRole
Next
Získání položky z Active directory např. u objektu computer. Vyžaduje definici systémové proměnné strComputerName.
Const ADS_SCOPE_SUBTREE = 4
Set objConnection = CreateObject(„ADODB.Connection“)
Set objCommand = CreateObject(„ADODB.Command“)
objConnection.Provider = „ADsDSOObject“
objConnection.Open „Active Directory Provider“
Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = „Select Location from ‚LDAP://OU=Computers,DC=mydomain,DC=cz‘ where objectClass=’computer‘ and Name = ‚“ & strComputerName & „‚“
objCommand.Properties(„Page Size“) = 1000
objCommand.Properties(„Searchscope“) = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
logfile.WriteLine objRecordSet.RecordCount
logfile.WriteLine objRecordSet.State
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
strComputerLocation = objRecordSet.Fields(„Location“).Value
objRecordSet.MoveNext
Loop
Instalace font do systému.Vyžaduje definici systémové proměnné strSystemRoot a objektů objFSO a objShell. Nutno spouštět v kontextu s admin právy, např, jako startupscript v kontextu SYSTEM.
If Not objFSO.FileExists(strSystemRoot & „\Fonts\FONT.TTF“) Then
strDest=strSystemRoot & „\Fonts\“
strFile=strInstallPath & „\fonts\FONT.TTF“
objFSO.CopyFile strFile,strDest
objShell.Run „regedit /S “ & strInstallPath & „\fonts\fonts.reg“,0,True
End If
Instalace a registrace dll nebo ocx do systému, např. Flash Player 9.0 . Vyžaduje definici systémové proměnné strSystemRoot a objektů objFSO a objShell. Nutno spouštět v kontextu s admin právy, např, jako startupscript v kontextu SYSTEM.
If Not objFSO.FileExists(strSystemRoot & „\system32\flash9.ocx“) Then
strDest=strSystemRoot & „\system32\“
strFile=strInstallPath & „flash9.ocx“
objFSO.CopyFile strFile,strDest
objShell.Run „regsvr32 “ & strSystemRoot & „\system32\flash9.ocx /s“,0,True
End If

Práce s časem:
Měření délky trvání scriptu
start = Timer
konec = Timer
TrvaniSkriptu = konec – start
objShell.PopUp „Délka běhu scriptu“ & TrvaniSkriptu & „sec.“, 5, „Time“, 0
Max. délka trvání scriptu v sekundách
WScript.Timeout = 300

Souborové funkce:
Funkce pro vytváření shortcuts ve startmenu, volá se
CreateShortcut „specialfolder“,“subfolder“,“\shotcut.lnk“,“C:\folder\program.exe“,“arg“,“C:\folder\“,“C:\folder\icon.exe“,“4″
Parametry funkce: specialfolder je umístění zástupce (StartMenu, Programs, .. ), subfolder definuje podadresář umístění zástupce (pokud neexistuje bude vytvořen), shotcut.lnk je jméno zástupce, program.exe je název programu na který zástupce ukazuje s plnou cestou, arg (přepínače) programu pokud je program vyžaduje jinak prázdné, folder pracovní ardresář programu s plnou cestou, icon.exe zdroj pro ikonu zástupce, a poslední parametr je styl zobrazení. Vyžaduje definici objektu objShell.
Function CreateShortcut(ByVal strSpecialFolder, ByVal strPathSubfolder, ByVal strShortcutName, ByVal strShortcutTargetPath, ByVal strShortcutArguments, ByVal strShortcutWorkDir, ByVal strShortcutIconLoc, ByVal strShortcutWinStyle)
strTarget = objShell.SpecialFolders(strSpecialFolder)
Set objShortcut = objShell.CreateShortcut(strTarget & strPathSubfolder & strShortcutName)
objShortcut.TargetPath = strShortcutTargetPath
objShortcut.Arguments = strShortcutArguments
objShortcut.WorkingDirectory = strShortcutWorkDir
objShortcut.IconLocation = strShortcutIconLoc
objShortcut.WindowStyle = strShortcutWinStyle
objShortcut.Save
Set objShortcut = Nothing
CreateShortcut = True
End Function
Funkce pro smazání a vytváření subfolders ve startmenu, volá se např.
DeleteCreateShortcutFolder „specialfolder“,“\subfolder“
Parametry funkce: specialfolder je umístění zástupce (StartMenu, Programs, .. ), subfolder definuje podadresář umístění zástupce (pokud neexistuje bude vytvořen).Vyžaduje definici objektu objShell a objFSO.
Function DeleteCreateShortcutFolder(ByVal strSpecialFolder, ByVal strPathSubfolder)
strTarget = objShell.SpecialFolders(strSpecialFolder)
strTargetPath = strTarget & strPathSubfolder
if objFSO.FolderExists (strTargetPath) then
objFSO.DeleteFolder strTargetPath
end if
if Not objFSO.FolderExists (strTargetPath) then
objFSO.CreateFolder strTargetPath
end if
DeleteCreateShortcutFolder = True
End Function
Vytvoření adresáře pro log soubory. Vyžaduje definici objektu objFSO a systémovou proměnnou strSysDrive.
If Not objFSO.FolderExists(strSysDrive & „\logfolder“) Then
Set objFolder = objFSO.CreateFolder(strSysDrive & „\logfolder“)
End If
Rotace logu o běhu loginsriptu.Vyžaduje definici objektu objWMIService a systémovou proměnnou strSysDrive.
Set colFiles = objWMIService.ExecQuery („SELECT * FROM Cim_Datafile WHERE Name = ‚“& strSysDrive & „\\logfolder\\login.old’“)
For Each objFile in colFiles
objFile.Delete
Next
Set colFiles = objWMIService.ExecQuery („SELECT * FROM Cim_Datafile WHERE Name = ‚“& strSysDrive & „\\logfolder\\login.log’“
For Each objFile in colFiles
objFile.Rename(strSysDrive & „\logfolder\login.old“)
Next

Síťové funkce:
Funkce pro mapování síťových disků volá se MapDrive („F“,\\domain.cz\homes\username“)
Function MapDrive(ByVal strDriveLetter, ByVal strPath)
Dim objRegExp
Dim iDrive
Dim bExists
Dim colDrives
Set objNetwork = WScript.CreateObject(„WScript.Network“)
Set objRegExp = New RegExp
strDriveLetter = UCase (strDriveLetter)
objRegExp.IgnoreCase = true
objRegExp.Pattern = „^[F-Z]$“
If Not objRegExp.Test (strDriveLetter) Then
MapDrive = False
Exit Function
End If
strDriveLetter = strDriveLetter & „:“
bExists = False
Set colDrives = objNetwork.EnumNetworkDrives()
For iDrive = 0 To colDrives.Count – 1 Step 2
If colDrives.Item(iDrive) = strDriveLetter Then
bExists = True
End If
Next
If bExists Then
objNetwork.RemoveNetworkDrive strDriveLetter, true
End If
objNetwork.MapNetworkDrive strDriveLetter, strPath, True
objShell.PopUp „Drive “ & strDriveLetter & “ connected to “ & strPath & “ successfully.“, 5, „Logon“, 0
MapDrive = True
Set objNetwork = Nothing
End Function

,