Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.192.95.161] |
|
Страницы: (22) [1] 2 3 ... 21 22 ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Предлагаю сюда складывать полезные скрипты, реализованные с применением вышенаписанных в описании темы технологий..
что есть полезные, ну например: Скрипт меняющий пароль локального админа на всех компьютерах домена Скрипт добаляющий определенного пользоватея в локальную группу безопасности на всех машинах домена Скрипт отображающий в параметре Comp_Display_Name FullName залогиненого на машину пользователя итд... применяем WMI при необходимости в своих решениях. Итак, начинаю первый... Скрипт меняющий пароль локального админа на всех компьютерах домена: этот скрипт нужно засунуть в стартап скрипты в ГП для компа, предварительно ессесено сздать саму ГП и применить ее для всех компьютеров домена. strComputer = "." Set objUser = GetObject("WinNT://" & strComputer & "/Администратор,user") objUser.SetPassword "krut'nesusvetnaya" objUser.SetInfo а этот скрипт нужно просто запустить на контроллере домена, он поменяет пароль на всех компах - членах домена (ессесено на тех что будут в онлайне) тока один минус - он долго обрабатывается, ибо он пытается поменять пароль даже если тачка в оффлайне, есесено не получив ответа отваливается по таймауту. Set WshShell = WScript.CreateObject("WScript.Shell") Set FileSys = CreateObject("Scripting.FileSystemObject") Set FileTxt = FileSys.OpenTextFile("c:\psw_local_adm.log", 8, TRUE) Set colComputers = GetObject("WinNT://company.ru") colComputers.Filter = Array("computer") On Error Resume Next For Each objComputer In colComputers strComputer = objComputer.Name If Not strComputer = "SERVANT" Then Set objUser = GetObject("WinNT://" & strComputer & "/Administrator,user") objUser.SetPassword "123456" objUser.SetInfo If Err.Number =0 Then FileTxt.WriteLine strComputer & " - password changed" Else FileTxt.WriteLine strComputer & " - computer is offline or error occured" End If End If Next FileTxt.Close intReturn = WshShell. Run("notepad.exe c:\psw_local_adm.log", 4, false) Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#2
,
|
|
|
'/********************************************************************/ '/* Имя: ListProcesses.vbs */ '/* Язык: VBScript */ '/* Описание: Вывод на экран списка всех запущенных на локальной */ '/* рабочей станции процессов */ '/********************************************************************/ Dim WMI ' //Экземпляр WMI Dim Process ' //Экземпляр коллекции dim SQuery Dim SList ' //Строка для вывода на экран dim WShell ' Dim Processes 'Коллекция процессов Dim ListFile 'имя файла вывода Dim FSO 'объект файловой системы Dim sOwnerUser, sOwnerDomain Dim Ret ' //Соединяемся с WMI Set FSO=CreateObject("Scripting.FileSystemObject") Set WShell=CreateObject("Wscript.Shell") set WMI=GetObject("winMgmts:") 'Формируем текст запроса SQuery="SELECT * FROM Win32_Process WHERE Name<>'EXPLORER.EXE'" 'Создаем коллекцию-результат запроса set Processes=WMI.ExecQuery(SQuery) 'Цикл по всем элементам коллекции for each Process in Processes ' //Формируем строку с именами процессов SList=SList & "Имя процесса: " & Process.Name & vbcrlf '// Отобразим хендл процесса SList=SList & "Хендл процесса: " & Process.Handle & vbcrlf 'Получим PID процесса (по нему мы ниже сможем через Shell.AppActivate 'управлять приложением через SendKeys SList=SList & "Process ID (PID): " & Process.ProcessId & vbcrlf 'Получим полный путь к исполняемому файлу SList = SList & "ExecutablePath: " & Process.ExecutablePath & vbcrlf 'Получим имя пользователя от которого запущен процесс Process.GetOwner sOwnerUser,sOwnerDomain SList=SList & "Запущено от имени: " & sOwnerDomain & "\" & sOwnerUser & vbcrlf SList=SList & "- - - - - - - - - - - -" & vbcrlf 'Следующие строки показывают - имеет ли процесс хоть одно видимое окно ' WShell.popup "Попытка активировать приложение " & vbcrlf & _ ' Process.name & vbcrlf & _ ' "(" & Process.executablepath & ")", 2 'Если процесс имеет видимое окно - то Ret после вызова нижележащей строки 'получит значение больше нуля. Если меньше нуля - значит процесс или не имеет окон 'или все окна у него невидимы ret = WShell.AppActivate (Process.processid) 'сделаем небольшую паузу, чтобы приложение успело активироваться. If Ret> 0 Then WScript.Sleep 1000 ' WShell.Popup "Удачная попытка активации " & Process.name, 3 'Else ' WShell.Popup "Неудачная попытка активации " & Process.name, 5 End If Next '//Выводим информацию на экран 'MsgBox SList,,"Список запущенных процессов." '// или выводим информацию в файл Set ListFile=FSO.CreateTextFile("C:\ListProcess.txt") ListFile.write(SList) ListFile.close Set ListFile=Nothing Set FSO=Nothing Set WMI=nothing WScript.Quit '/************* Конец *********************************************/ Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#3
,
|
|
|
'************************************************************************ '* Имя: Change_IP_mask_DNS_Gate_by_MAC.vbs * '* Язык: VBScript * '* Назначение: Изменить static-IP, Mask, DNS, Gateway для определенного * '* сетевого адаптера по MAC-адресу * '************************************************************************ strComputer = "." ' "."-локальный комп или можно имя удаленного компа Set objWMIService = GetObject( _ "winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration " _ & "where IPEnabled=TRUE") strIPAddress = Array("192.168.1.180") ' Новый IP strSubnetMask = Array("255.255.255.0") ' Новая маска подсети strGateway = Array("192.168.1.15") ' Новый шлюз strDNSserver = Array("192.168.1.15") ' Новый DNS-server strMACadapter = "00:12:23:45:67:89" ' MAC-address сетевого адаптера для ' которого устанавливаем новые значения strGatewayMetric = Array(1) For Each objNetAdapter in colNetAdapters If objNetAdapter.MACAddress = strMACadapter then errEnable = objNetAdapter.EnableStatic( _ strIPAddress, strSubnetMask) errGateways = objNetAdapter.SetGateways(_ strGateway, strGatewaymetric) errDNS = objNetAdapter.SetDNSServerSearchOrder(strDNSServer) end if Next Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#4
,
|
|
|
AlexLine, я бы сделал дополнение к твоему первому скриптику вот такое:
strComputer = "." Set objUser = GetObject("WinNT://" & strComputer & "/Administrator,user") objUser.SetPassword "vashe_krutoy_pass" objUser.SetInfo ибо не у всех русский админ на тачках. Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#5
,
|
|
|
'****************************************************************** '* Имя: Account_Status.vbs * '* Язык: VBScript * '* Назначение: Определение состояния (вкл.|выкл.) учётных записей * '* пользователей домена для заданных групп * '****************************************************************** 'Предполагается, что в структуре AD существуют объекты типа "ПОДРАЗДЕЛЕНИЕ" 'первого уровня вложенности (в примере - значения массива grpNames), 'в каждый из которых вложен одноимённый объект типа "ГРУППА БЕЗОПАСНОСТИ". Const ForWriting = 2 grpNames = Array("Бухгалтерия", "Менеджеры", "Склад") Set fsObj = CreateObject("Scripting.FileSystemObject") Set myFile = fsObj.OpenTextFile("c:\stat_file.txt", ForWriting, True) For i = LBound(grpNames) To UBound(grpNames) curGroup = grpNames(i) Set objGroup = GetObject("LDAP://cn=" & curGroup & ",ou=" & curGroup & ",dc=domain_name,dc=ru") For Each curUser In objGroup.Members xName = Mid(curUser.Name, 4) If curUser.AccountDisabled Then xStatus = "Отключена" Else xStatus = "Включена" End If myFile.WriteLine(curGroup & "," & xName & "," & xStatus) Next Next myFile.Close Set myFile = Nothing Set objGroup = Nothing Set fsObj = Nothing '***************************************************************** '* Имя: UserAccount_OnOff.vbs * '* Язык: VBScript * '* Назначение: Управление состоянием (вкл.|выкл.) учётной записи * '* заданного пользователя домена * '***************************************************************** 'Предполагается, что в структуре AD существуют объект типа "ПОДРАЗДЕЛЕНИЕ" 'первого уровня вложенности (в примере - "Склад"), в который вложен 'однотипный объект (в примере - "Пользователи"). 'В подразделение "Пользователи" вложен объект типа "ПОЛЬЗОВАТЕЛЬ" '(в примере - значение константы usrName). Const usrName = "Кладовщик" Const usrLocate = ",ou=Пользователи,ou=Склад" Set objUser = GetObject("LDAP://cn=" & usrName & usrLocate & ",dc=domain_name,dc=ru") Set scrShell = CreateObject("WScript.Shell") curStatus = objUser.AccountDisabled If CBool(curStatus) Then sQuest = " отключена." & vbCr & "Включить?" sRes = " включена." Else sQuest = " включена." & vbCr & "Отключить?" sRes = " отключена." End If selAction = scrShell.Popup("Сейчас учётная запись пользователя " & UCase(usrName) & sQuest, , _ "Выбор действия", vbQuestion + vbYesNo) If selAction = vbYes Then objUser.AccountDisabled = Not CBool(curStatus) objUser.SetInfo WScript.Echo "Учётная запись пользователя " & UCase(usrName) & sRes End If Set scrShell = Nothing Set objUser = Nothing Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#6
,
|
|
|
Цитата AlexLine @ Коллеги, призываю вас использовать теги [code] в соответствии тому языку, на котором написан публикуемый скрипт Просто если использовать тег VB вместо VB Script код становится намного читабельней. Добавлено Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#7
,
|
|
|
Цитата Rust @ Пожалуй, так. Впрочем, лично для меня большой разницы нет.Просто если использовать тег VB вместо VB Script код становится намного читабельней. '************************************************************************* '* Имя: Details_About_File.vbs * '* Язык: VBScript * '* Назначение: Получение расширенного списка свойств для заданного файла * '************************************************************************* Dim propNames(37), propValues(37) nameFolder = "C:\WINNT" nameItem = "clock.avi" Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(nameFolder) Set objItem = objFolder.Items.Item(nameItem) lstProperties = vbNullString For i = LBound(propNames) to UBound(propNames) propNames(i) = objFolder.GetDetailsOf(objFolder.Items, i) propValues(i) = objFolder.GetDetailsOf (objItem, i) lstProperties = lstProperties & i & ": " & propNames(i) & " = " & propValues(i) & vbCr Next WScript.Echo lstProperties '************************************************************ '* Имя: Shortcut_Create.vbs * '* Язык: VBScript * '* Назначение: Создание и настройка ярлыка на рабочем столе * '************************************************************ Set objShell = CreateObject("Shell.Application") Set objDesktop = objShell.NameSpace(&H0) desktopDir = objDesktop.Self.Path & "\" Set objDesktop = Nothing Set objShell = Nothing Set objWShell = CreateObject("WScript.Shell") Set objSC = objWShell.CreateShortcut(desktopDir & "ДубльГИС, Новосибирск.lnk") objSC.Description = "План города" objSC.IconLocation = "shell32.dll, 13" objSC.TargetPath = "C:\Program Files\2gis\Nsk\grym.exe" objSC.WindowStyle = 1 objSC.WorkingDirectory = "C:\Program Files\2gis\Nsk" objSC.Save Set objSC = Nothing Set objWShell = Nothing '********************************************************** '* Имя: Shortcut_Targets.vbs * '* Язык: VBScript * '* Назначение: Определение объектов, на которые ссылаются * '* ярлыки рабочего стола * '********************************************************** Set objShell = CreateObject("Shell.Application") Set objDeskTop = objShell.NameSpace(&H0) lstTargets = vbNullString i = 1 For Each curObj In objDeskTop.Items If curObj.IsLink Then Set objSC = curObj.GetLink lstTargets = lstTargets & i & ": " & curObj.Name & vbCr & vbTab & objSC.Path & vbCr i = i + 1 End If Next WScript.Echo lstTargets Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#8
,
|
|
|
Цитата AlexJ @ '* Назначение: Изменить static-IP, Mask, DNS, Gateway для определенного * '* сетевого адаптера по MAC-адресу * интересно, это что любому юзеру в сети удаленно можно поменять? Это баг или нужен логин/пароль ? Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#9
,
|
|
|
Цитата P.O.D @ интересно, это что любому юзеру в сети удаленно можно поменять? Это баг или нужен логин/пароль ? Нет, только имея достаточные права в системе, не забывай, чтьо если скрипт запущен без доп параметров, то он запускается от имени текущего пользователя. Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#10
,
|
|
|
'************************************************************************* '* Имя: SetManualSystemRestorePoint.vbs * '* Язык: VBScript * '* Назначение: Ручная установка новой точки отката системы * '************************************************************************* strComp="." Set sr = getobject("winmgmts:\\" & strComp & "\root\default:Systemrestore") Set WshShell = WScript.CreateObject("WScript.Shell") If ( sr.createrestorepoint( "Manual Restore Point", 0, 100 ) ) = 0 Then msg = "New Restore Point successfully created." & vbCrLf & vbCrLf msg = msg & "It is listed as: " & Time & " Manual Restore Point" WshShell.PopUp msg, 3, "Manual Restore Point", vbOKOnly Else MsgBox "Restore Point creation Failed!", vbOKOnly, "Manual Restore Point" End If Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#11
,
|
|
|
C vba-тегом читается значительно понятней (at least видны коментарии) '************************************************************************* '* Имя: SetAllNetworkAdapters2DHCP.vbs * '* Язык: VBScript * '* Назначение: Установить на всех сетевых адаптерах сетевую конфигурацию * '* через DHCP * '************************************************************************* strComputer = "." Set objWMIService = GetObject(_ "winmgmts:\\" & strComputer & "\root\cimv2") Set colNetAdapters = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration " _ & "where IPEnabled=TRUE") For Each objNetAdapter In colNetAdapters errEnable = objNetAdapter.EnableDHCP() Next '************************************************************************* '* Имя: GetIPaddressOfParticularConnection.vbs * '* Язык: VBScript * '* Назначение: Получить IP-адрес для определённого сетевого соединения * '************************************************************************* strComputer = "." strNetworkConnection = "'Local Area Connection'" ' <- редактировать под нужное ' имя сетевого конекта Set objWMIService = GetObject( _ "winmgmts:\\" & strComputer & "\root\cimv2") Set colNics = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapter " _ & "Where NetConnectionID = " & strNetworkConnection) For Each objNic in colNics Set colNicConfigs = objWMIService.ExecQuery _ ("ASSOCIATORS OF " _ & "{Win32_NetworkAdapter.DeviceID='" & _ objNic.DeviceID & "'}" & _ " WHERE AssocClass=Win32_NetworkAdapterSetting") For Each objNicConfig In colNicConfigs For Each strIPAddress in objNicConfig.IPAddress Wscript.Echo "IP Address: " & strIPAddress Next Next Next Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#12
,
|
|
|
У меня есть еще дополнение, нельзя ли сделать в этой ветке для скриптов
под-темы и разбить их по назначению (ну к примеру как на мелкософте) Accounts and Domains Computer Hardware Computer Software Dates and Times Desktop Management Disks and File Systems Event Logs Files and Folders Networking Operating Systems Performance Monitoring Processes Printers and Printing Manage Registry Scheduled Tasks Services иначе среди сплошной простыни перемешенного по назначению кода фиг что найдешь если понадобиться. Ну или хотя бы давайте в заголовках писать к какому разделу будет относиться скрипт. Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#13
,
|
|
|
Цитата AlexJ @ У меня есть еще дополнение, нельзя ли сделать в этой ветке для скриптов под-темы и разбить их по назначению (ну к примеру как на мелкософте) поддерживаю, сам об этом думал! так и сделаем, как хотя бы скриптов 30 наберем общих Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#14
,
|
|
|
'************************************************************* '* Имя: CopyFolder_with_Progress.vbs * '* Язык: VBScript * '* Назначение: Копирование каталога с отображением * '* индикатора процесса. * '* Сценарий предназначен для работы в режиме GUI * '************************************************************* Const PARAM_DIALOG = 0 Const targetDirSpec = "F:\" Const sourceDirSpec = "C:\BORLANDC" Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.NameSpace(targetDirSpec) objFolder.CopyHere sourceDirSpec, PARAM_DIALOG '******************************************************************** '* Имя: TreeView_from_CmdLine.vbs * '* Язык: VBScript * '* Назначение: Составление списка содержимого дерева катлогов * '* с имитацией индикатора процесса. * '* Сценарий предназначен для работы из командной строки * '******************************************************************** Dim objFS, resFile Const resFileSpec = "C:\ListObjects.txt" Const sourceDirSpec = "C:\BORLANDC" Set objFS = CreateObject("Scripting.FileSystemObject") Wscript.Echo "Идёт чтение данных." If objFS.FolderExists(sourceDirSpec) Then Set resFile = objFS.OpenTextFile(resFileSpec, 2, True) Call ViewFolder(sourceDirSpec) resFile.Close Wscript.StdOut.WriteLine WScript.Echo "Готово." Else WScript.Echo "Не найден каталог-источник: " & UCase(sourceDirSpec) End If Set objFS = Nothing '=== Function ViewFolder(dirSource) Dim objFS, pntDir, curSubDir Set objFS = CreateObject("Scripting.FileSystemObject") Set pntDir = objFS.GetFolder(dirSource) Call EnumFiles(dirSource) For Each curSubDir In pntDir.SubFolders Wscript.StdOut.Write(".") Call ViewFolder(dirSource & "\" & curSubDir.Name) Next Set pntDir = Nothing Set objFS = Nothing End Function '=== Function EnumFiles(dirSource) Dim objFS, pntDir, curFile Set objFS = CreateObject("Scripting.FileSystemObject") Set pntDir = objFS.GetFolder(dirSource) For Each curFile In pntDir.Files resFile.WriteLine (curFile.Path) Wscript.StdOut.Write(".") Next Set pntDir = Nothing Set objFS = Nothing End Function Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |
Сообщ.
#15
,
|
|
|
Это сообщение было перенесено сюда или объединено из темы "Полезные скрипты" |