Получение повышенных привилегий Администратора (перезапуск скрипта с сохранением исходных аргументов)
Код (vb.net):
Sub Elevate(msg)
Const DQ = """"
if msgbox(msg & vblf & "Запустить с Административными привилегиями ?", vbQuestion + vbYesNo,"Подтверждение") = vbNo then WScript.Quit 5
Dim oShellApp: Set oShellApp = CreateObject("Shell.Application")
' Конкатенация аргументов
Dim args, i: For i = 1 to WScript.Arguments.Count
args = args & DQ & WScript.Arguments(i - 1) & DQ & " "
Next
oShellApp.ShellExecute WScript.FullName, DQ & WScript.ScriptFullName & DQ & " " & args, "", "runas", 1
set oShellApp = Nothing
End Sub
Проверка, запущен ли скрипт от имени Администратора
Код (vb.net):
Function isAdminRights()
Const KQV = 1, KSV = 2, HKLM = &H80000002
Dim oReg, strKey, intErrNum, flagAccess
Set oReg = GetObject("winmgmts:root\default:StdRegProv")
strKey = "System\CurrentControlSet\Control\Session Manager"
intErrNum = oReg.CheckAccess(HKLM, strKey, KQV + KSV, flagAccess)
isAdminRights = flagAccess
Set oReg = Nothing
End Function
Перезапуск скрипта в консольном режиме, если запущен через WScript
Код (vb.net):
const vbT = 1 'vbTextCompare
const QT = """"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")
' Запущен ли из консоли
vbHost = oFSO.GetBaseName(Wscript.FullName)
if strcomp(vbHost, "cscript", vbT) <> 0 then
oShell.Run QT & oShell.ExpandEnvironmentStrings("%SystemRoot%") & "\system32\cscript.exe" & QT & " //nologo " & QT & WScript.ScriptFullName & QT, 1, false
WScript.Quit
end if
WScript.Echo vbHost
WScript.StdIn.ReadLine()
Процентный прогрессбар в консоли
Код (vb.net):
WScript.StdOut.Write "ProgressBar = "
n = 0
Do
WScript.StdOut.Write String(3 - len(cstr(n)), " ") & n & " %"
n = n + 1
WScript.Sleep 20
WScript.StdOut.Write String(5, chr(8))
Loop While n <= 100
Получить путь к запущенному скрипту
Код (vb.net):
Set oFSO = CreateObject("Scripting.FileSystemObject")
cur = oFSO.GetParentFolderName(WScript.ScriptFullName)