id334492052@vk |
05-12-2016 12:44 2693111 |
Проверка "активности" пользователя в VBS\BAT
Здравствуйте форумчане ! Такая дилемма возникла : необходимо получить при помощи команды NET получить текущее состояние учетной записи встроенного администратора (active:yes\no) и передать результат в VBS скрипт. Скрипт в зависимости от результата - отображает определенный текст в окне. Со скриптом проблем не возникло, а вот реализовать передачу результата никак не выходит. Это реализуемо ?
|
greg zakharov |
05-12-2016 13:05 2693115 |
Цитата:
Цитата id334492052@vk
Это реализуемо ?
|
Кратко - да. Более развернуто - все зависит от того, что из себя представляет VBS, а также задействуются ли в нем аргументы командной строки; если, например, VBS "склеивается" с bat по принципу гибрида, можно либо создать переменную, содержащие данные об активности профиля, а по ходу исполнения обращаться к этой переменной, либо через те же аргументы, либо через ADS (альтернативные потоки), либо через реестр, но последние два варианта из области утонченного разврата; аналогично можно поступить и во втором случае.
|
id334492052@vk |
05-12-2016 13:18 2693119 |
Спасибо большое за ответ ! Собственно, задача была изначально следующая : получить состояние учетной записи встроенного админа (win7) и передать в vbs, который в зависимости от результата - отобразит определенный текст в окне вопроса и затем , выполнит определенную команду с перезагрузкой. Т.е. если учетка админа отключена - отобразит окно с предложение включить и выполнит команду "net user администратор /active:yes" , ну или "no" в противном случае. Не подскажите, а как можно реализовать это всё целиком в bat , в частности передачу значения в переменную ?
|
id334492052@vk, зачем что-то изобретать, когда можно просто взять и просто добавить код в тот же VBS? Вот Вам примерная болванка:
Скрытый текст
Код:
Option Explicit
Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
strComputer = "."
Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
objSWbemServicesEx.Security_.Privileges.AddAsString "SeShutdownPrivilege", True
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery( _
"SELECT * FROM Win32_UserAccount WHERE LocalAccount = True AND SID LIKE 'S-1-5-21-%-500'" _
)
If objSWbemObjectEx.Disabled Then
If MsgBox("Enable [" & objSWbemObjectEx.Name & "] account?", vbQuestion + vbYesNo + vbDefaultButton2, "Enable account") = vbYes Then
With GetObject("WinNT://" & strComputer & "/" & objSWbemObjectEx.Name & ",user")
.AccountDisabled = False
.SetInfo
End With
Call Reboot
End If
Else
If MsgBox("Disable [" & objSWbemObjectEx.Name & "] account?", vbQuestion + vbYesNo + vbDefaultButton2, "Disable account") = vbYes Then
With GetObject("WinNT://./" & objSWbemObjectEx.Name & ",user")
.AccountDisabled = True
.SetInfo
End With
Call Reboot
End If
End If
Next
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub Reboot()
Dim objSWbemObjectEx
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_OperatingSystem")
objSWbemObjectEx.Reboot()
Next
End Sub
'=============================================================================
|
Время: 15:07.
© OSzone.net 2001-