Примеры скриптов для администрирования в Windows

Бэкап системы и залив его на фтп.


strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
strCommand = "C:\WINDOWS\system32\ntbackup.exe backup @C:\cmd\Back-UP-Drive-C.bks /a /v:no /r:no /rs:no /hc:off /m normal /j Back-UP-Drive-C /l:s /f D:\Back-Up\Backup-drive-c.bkf"
WshShell.Run strcommand, 1, true

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")

For Each objItem in colItems
strCommand = "C:\Arch\7z.exe a  D:\Back-Up\Backup-dc-srv-01-DayOf-Week-"&objItem.DayOfWeek&".7z D:\Back-Up\*.bkf -t7z -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d10M -mb0:1 -mb0s1:2 -mb0s2:3"
Next
WshShell.Run strcommand, 1, true
strCommand = "ftp -s:C:\CMD\ctp-command.txt"
WshShell.Run strcommand, 1, true

Получаем информацию об учетных записях пользователей на удаленном компе.

On error Resume Next
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'******************************************
strComputer = "193.125.10.5"
strUser = "Andy_user"
strPassword = "PASSWORD"
strDomain = ""
'******************************************
Err.Clear
'--- Подключаемся ---
Set objSWbemLocator = CreateObject ("WbemScripting.SWbemLocator")
If (Err.Number <> 0) Then
   WScript.Echo "Error (objSWbemLocator)  : " & Err.Number & "   " & Err.Description
   WScript.Quit
End If
Err.Clear
Set objSWbemServices = objSWbemLocator.ConnectServer ( _
   strComputer, _
   "root\cimv2", _
   strUser, _
   strPassword, _
   "MS_409", _
   "ntlmdomain:" & strDomain)
If (Err.Number <> 0) Then
   WScript.Echo "Error (objSWbemServices)  : " & Err.Number & "   " & Err.Description
   WScript.Quit
End If
Err.Clear
Set file_object = CreateObject("Scripting.FileSystemObject")
Set list = file_object.OpenTextFile("./Rezult.log",ForWriting,True)
Set colAcc = objSWbemServices.ExecQuery ("Select * from Win32_UserAccount")
WScript.Echo "Обнаружено " & colAcc.Count & " учетных записей."
For Each ttt in colAcc
    list.Write  ttt.Caption & " "  & vbCrLf
    list.Write  "   " & "Caption : " & ttt.Caption  & vbCrLf
    list.Write  "   " & "Name : " & ttt.Name  & vbCrLf
    list.Write  "   " & "Description : " & ttt.Description  & vbCrLf
    list.Write  "   " & "Domain : " & ttt.Domain  & vbCrLf
    list.Write  "   " & "SID : " & ttt.SID  & vbCrLf
    list.Write  "   " & "SIDType : " & ttt.SIDType  & vbCrLf
    list.Write  "   " & "Disabled : " & ttt.Disabled  & vbCrLf
    list.Write  "   " & "Lockout : " & ttt.Lockout  & vbCrLf
    list.Write  "   " & "PasswordChangeable : " & ttt.PasswordChangeable  & vbCrLf
    list.Write  "   " & "PasswordExpires : " & ttt.PasswordExpires  & vbCrLf
    list.Write  "   " & "PasswordRequired : " & ttt.PasswordRequired  & vbCrLf
    list.Write  " -------------------------------  " &  vbCrLf
Next
list.Close

Скрипт предназначен для "оптового" изменения ярлыков,  которые находятся в одной папке.

/////////////////////////////////////////////////////////////////
//////  (В свойствах ярлыка, содержащих ссылку на запускаемый объект,
//////  меняем старое имя исполняемого файла на новое)
//////  05/10/2005 ShS
///////////////////////////////////////////////////////////////////////////////
//Папка, в которой должны лежать интересующие нас  ярлыки
var strFldrName="\\\\DC\\NETLOGON\\!\\Test Gepard"
//Подстрока, которую надо заменить
var strOld="Gepard.bat";
//Подстрока, на которую надо заменить
var strNew="GepardTest.bat";
////////////////////////////////////////////////////////////////////////////////
//Объект для доступа к свойствам ярлыка
var oShellLink;
var iStartOfFileName;
var strPath;
//создаем объект FSO для доступа к папкам и файлам
var FSO=WScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект Folder для strFldrName
var fsoFldr=FSO.GetFolder(strFldrName);
//Получим колекцию файлов в папке strFldrName
var colFiles= new Enumerator (fsoFldr.Files);
//
var WshShell = WScript.CreateObject("WScript.Shell");
//Цикл по всем файлам в папке
for (;!colFiles.atEnd();colFiles.moveNext())
   {
     //Есть ли у файла расширение "lnk"? (Т.е. ярлык ли это?)
     if (colFiles.item().Name.length-colFiles.item().Name.lastIndexOf(".lnk")-4==0)
      {
        oShellLink = WshShell.CreateShortcut(strFldrName + "\\"+colFiles.item().Name);
        //Проверяем, что текущий ярлык содержит в пути запуска искомое имя файла strOld
        if (oShellLink.TargetPath.lastIndexOf(strOld)!=-1)
           {
             //вычисляем позицию, с которой начинается интересуемое нас имя файла
             iStartOfFileName=oShellLink.TargetPath.length - strOld.length;
             strPath= oShellLink.TargetPath.substr(0,iStartOfFileName-1);
             //заменяем старое имя файла на новое
             oShellLink.TargetPath = strPath+"\\"+strNew;
             oShellLink.Save();
           }
      }
   }

 

 Выдает имя текущего пользователя и название группы ("Опытные пользователи" или "Администраторы")  при условии, что текущей пользователь является членом этой группы.

/**   2004 ShS
 *    Script:   violater.js
 *   Если назначить этот скрипт на вход/выход пользователя из системы, то получим перечень компьютеров и
 *            пользователей, на которых эти пользователи обладают повышеными правами (т.е. являются членами
 *            вышеназванных групп)
 **/
 
 
 // define constants
// Note: if a file exists, using forWriting will set
// the contents of the file to zero before writing to
// it.
var forReading = 1, forWriting = 2, forAppending = 8,
   objDate, Today, strDate, strMonth, LogFileName;

objDate = new Date ();
Today = "_" + objDate.getYear();
strMonth = "" + (objDate.getMonth()+1);
strDate = "" + objDate.getDate();
Today +=  (strMonth.length<2) ? "0" + strMonth : strMonth;
Today +=  (strDate.length<2) ? "0" + strDate : strDate;

// Create FileSystemObject
fs = new ActiveXObject( "Scripting.FileSystemObject" );
//[b]Лог-файл, куда скрипт будет записывать результаты[/b]
var LogFileName = "\\\\admiral\\WhoIsViolater$\\" + "Violaters"+ Today + ".txt";





//city0 - имя домена WinNT

showusers( "city0/." );

/**
 *
 * example   - showusers( "DOMAINNAME" );
 *           - showusers( "DOMAINNAME/Computer" );
 **/
 
function showusers( domain )
{
  var WshNet,UserName;
  WshNet=WScript.CreateObject("WScript.Network");
  UserName=WshNet.UserName;
    try
    {
        var DomainMembers = GetObject( "WinNT://" + domain );
        var e = new Enumerator( DomainMembers );
        for( ; !e.atEnd(); e.moveNext() )
        {
            var Group = e.item();
            if( Group.Class == "Group" )
            {
              if (Group.Name=="Administrators" ||
                  Group.Name=="Администраторы" ||
                  Group.Name=="Power Users" ||
                  Group.Name=="Опытные пользователи")
                 {
                  var ee= new Enumerator(Group.Members());
                  for( ; !ee.atEnd(); ee.moveNext() )
                  {
                       var Member = ee.item();
                       if ((Member.Class=="User") && (Member.Name==UserName))
                          {   
                              print( "Computer    : " + WshNet.ComputerName);
                              print( "Group       : " + Group.Name );
                              print( "Member      : " + Member.Name );
                              print( "============================" );
                           }
                    }
                 }
            }
        }
    }
    catch( e )
    {
        print( "Error: " + e.description );
    }
}

function print( msg )
{
   
   
   try
      {
         os = fs.GetFile( LogFileName );
      }
   catch (e)
      {
         if (e!=0)
            {
               fs.CreateTextFile( LogFileName ); // Create the text file
               os = fs.GetFile( LogFileName );
            }
         
      }
   os = os.OpenAsTextStream( forAppending, 0 ); // Open the file for appending   
   // Write two lines of text to the file
   os.write( msg+"\r\n" );
   

   // Close the file
   os.Close();


    //WScript.Echo( msg );
}

 

Подключение сетевого принтера и установка его принтером по умолчанию.

//*****************************************************
//JScript 2005 ShS addPrn.js 
//Пример запуска: %LOGONSERVER%\NETLOGON\addPrn.js \\PrintServer\HPLJ2200DN(23)
//*****************************************************
var WshNetwork,
   objArgs,
   strErrMsg,
   strPrinterPath;
//Путь к подключаемому принтеру   берем из параметров запуска
objArgs=WScript.Arguments.Unnamed;
strPrinterPath=objArgs.Item(0);
//
WshNetwork=WScript.CreateObject("Wscript.Network");
try
   {
   WshNetwork.AddWindowsPrinterConnection(strPrinterPath);
   WshNetwork.SetDefaultPrinter(strPrinterPath);
   }
catch (objError)
   {
   if (objError !=0)
      {
      strErrMsg = "Произошла ошибка при пордключении сетевого принтера -  "+strPrinterPath+"\n"+
               "Скорее всего узанный сетевой путь не существует"+"\n\n"+
               "Обратитесь к системному администратору по тел. 1333"
               //"Код ошибки: "+ objError.number;
      WScript.Echo(strErrMsg);
      }
   }

 

Выключение удаленной машины (по сети) от доменного администратора

Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate,(RemoteShutdown)}//FNQ-имя-серверера-для-убийства").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
for each OpSys in OpSysSet
OpSys.Shutdown()
Next

 

Получение информации о пользователях домена

//*************************************************************************
// JScript ShS 2004
//
//*************************************************************************
var objConn, //объект Connection
objComm, //объект Command
objRS, //объект RecordSet
strRecord, //Результирующая строка, содержащая сведения о пользователе
arrAttribs, //Перечень атрибутов, значения которых мы будем извлекать для каждого пользователя
i, //Счетчик цикла
strDevOut, //Устройство вывода
RootDSE,
DefaultDomain, //Домен для текущего пользователя
strSpliter; //Раделитель полей для результирующей строки

var ADS_UF_ACCOUNTDISABLE=2; //"Флаг" битового атрибута userAccountControl
//
strDevOut="Display"
//
//Получим имя домена для пользователя, от имени которого запущен данный скрипт
RootDSE=GetObject("LDAP://RootDSE");
DefaultDomain=GetObject("LDAP://"+RootDSE.Get("DefaultNamingContext"));
WScript.Echo(DefaultDomain.distinguishedName);
//
strSpliter="*";
//Информацию о атрибутах можно получить здесь:
//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/user_object_attributes.asp
//Массив атрибутов должен содержать по крайней мере один элемент
arrAttribs = new Array ("displayName","sAMAccountName","profilePath","mail","userAccountControl","proxyAddresses");
//
//Инициализируем переменные, необходимые для работы с AD, как с БД
objConn = WScript.CreateObject("ADODB.Connection");
objComm = WScript.CreateObject("ADODB.Command");
objRS = WScript.CreateObject("ADODB.Recordset");
objConn.Provider = "ADsDSOObject";
objConn.Open("Active Directory Provider");
objComm.ActiveConnection = objConn;
//
//Формируем текст SQL-запроса к AD
objComm.CommandText = "SELECT ";
for ( i=0 ; i<arrAttribs.length-1; i++)
{
objComm.CommandText+=arrAttribs[i]+",";
}
//За последним полем в запросе не должна следовать запятая,
//поэтому добавляем имя последнего поля вне цикла
objComm.CommandText+=arrAttribs[i];
//Поиск проводим внутри OU "mg"
objComm.CommandText+= " FROM \'LDAP://ou=mg,"+DefaultDomain.distinguishedName+"\'"+
"WHERE objectClass = \'user\' and objectCategory = \'person\'";
//Фильтр для отбора тех, у кого есть внешний Email
//Заглушка
//objComm.CommandText+=" and (mail LIKE \'%mn.local\')";
//
//выполняем запрос
objRS = objComm.execute();
//Формируем строку-заголовок с названиями полей
strRecord="";
for ( i=0 ; i<arrAttribs.length; i++)
{
strRecord+=arrAttribs[i]+strSpliter;
}
//Вывод результирующей строки на устройство вывода
fnOut(strRecord,strDevOut);
//Формируем строки данных
objRS.MoveFirst();
while (!objRS.EOF)
{
strRecord="";
for ( i=0 ; i<arrAttribs.length; i++)
{
switch (arrAttribs[i])
{
case "userAccountControl":
//Выделяем бит ADS_UF_ACCOUNTDISABLE
if (objRS.Fields(arrAttribs[i]).Value&2) strRecord+="UserDisabled"+strSpliter;
else strRecord+="UserEnabled"+strSpliter;
break;
case "proxyAddresses":
vbarrEmailAddreses = objRS.Fields(arrAttribs[i]).Value;
if (vbarrEmailAddreses!=null)
{
arrEmailAddreses=vbarrEmailAddreses.toArray();
for (iEmailCounter=0;iEmailCounter<arrEmailAddreses.length-1;iEmailCounter++)
{
strRecord+=arrEmailAddreses[iEmailCounter]+"|";
}
strRecord+=arrEmailAddreses[iEmailCounter];
}
strRecord+=strSpliter;
break;
default:
strRecord+=objRS.Fields(arrAttribs[i]).Value+strSpliter;
}
}
fnOut(strRecord);
objRS.MoveNext();
}
objRS.close;
///////////////////////////////////////////////////////////////////////////////////////////
//Функция вывода результирующей строки
///////////////////////////////////////////////////////////////////////////////////////////
function fnOut(strOutRecord,strDev)
{
//Заглушка
WScript.Echo(strOutRecord);
}

/*Для справки
Константы для битового поля userAccountControl
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ad/ad/example_code_for_creating_a_user.asp

Const ADS_UF_SCRIPT = &H1
Const ADS_UF_ACCOUNTDISABLE = &H2
Const ADS_UF_HOMEDIR_REQUIRED = &H8
Const ADS_UF_LOCKOUT = &H10
Const ADS_UF_PASSWD_NOTREQD = &H20
Const ADS_UF_PASSWD_CANT_CHANGE = &H40
Const ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = &H80
Const ADS_UF_TEMP_DUPLICATE_ACCOUNT = &H100
Const ADS_UF_NORMAL_ACCOUNT = &H200
Const ADS_UF_INTERDOMAIN_TRUST_ACCOUNT = &H800
Const ADS_UF_WORKSTATION_TRUST_ACCOUNT = &H1000
Const ADS_UF_SERVER_TRUST_ACCOUNT = &H2000
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000
Const ADS_UF_MNS_LOGON_ACCOUNT = &H20000
Const ADS_UF_SMARTCARD_REQUIRED = &H40000
Const ADS_UF_TRUSTED_FOR_DELEGATION = &H80000
Const ADS_UF_NOT_DELEGATED = &H100000
Const ADS_UF_USE_DES_KEY_ONLY = &H200000
Const ADS_UF_DONT_REQUIRE_PREAUTH = &H400000
Const ADS_UF_PASSWORD_EXPIRED = &H800000
Const ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION = &H1000000
*/

Меняет на всех сетевых интерфейсах настроенных статически DNS и WINS сервера.

if not (%1) == () goto dnsset

netsh int sh int >int.tmp
for /F "skip=3 tokens=1,2,3,*" %%i in ( int.tmp ) do call :dnsset %%i %%j %%k %%l
del /q int.tmp

goto cmdend

:dnsset
if /I (%1) == (enabled) goto cmdcont
if /I (%1) == (разрешён) goto cmdcont
goto cmdend
:cmdcont
if /I (%3) == (internal) goto cmdend
if /I (%3) == (loopback) goto cmdend
if /I (%3) == (внутренний) goto cmdend

netsh int ip set dns "%4" source=static addr=192.168.0.1
netsh int ip add dns "%4" addr=192.168.0.2

netsh int ip set wins "%4" source=static addr=192.168.0.1
netsh int ip add wins "%4" addr=192.168.0.2

:cmdend

 

Копирование файлов, созданных не позднее заданой даты

/*****************************************************/
/*JSCript   2005 Shs                                                                        */
/****************************************************/
var FSO,WshShell,MyDate,SourcePath,DestinationPath,SourceFolder,SourceFiles,DateCreated;
 arrayDC = new Array();
//создаем необходимые для работы скрипта объекты
FSO=WScript.CreateObject("Scripting.FileSystemObject");
WshShell=WScript.CreateObject("WScript.Shell");
//Заданая дата
MyDate = new Date (2003,10,10); //месяцы от 0 до 11 !!!!!
//Путь к каталогам
SourcePath="D:\\!!!!!!";
DestinationPath="D:\\!\\";
//Получаем объект-папка
SourceFolder=FSO.GetFolder(SourcePath);
//Получим колекцию файлов в заданом каталоге
SourceFiles = new Enumerator(SourceFolder.Files);
//Ну, а теперь в цикле перебираем и копируем
for (;!SourceFiles.atEnd(); SourceFiles.moveNext())
 {
   DateCreated = new Date(SourceFiles.item().DateCreated);
   if (DateCreated<=MyDate)
     {
      //WScript.Echo(DateCreated.toLocaleDateString() +"  "+ MyDate.toLocaleDateString());
      SourceFiles.item().Copy(DestinationPath);
     }
  }

Определение по известному MAC-адресу IP-адрес машины, присутствующей в локальной IP-сети

'On Error Resume Next
Const ForReading = 1
Find_MAC = "00-80-ad-06-c2-f9"
Set oShell = WScript.CreateObject ("WScript.Shell")
For i = 1 To 254 Step 1
Return = oShell.Run ("ping -n 1 -w 10 193.125.1." & i , 0, false)
Next
WScript.Sleep(8000)
Return = oShell.Run ("cmd /C arp -a > .\Rezult.txt" , 0, True)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set My_File = Fso.OpenTextFile( ".\Rezult.txt", ForReading, True)
Do While My_File.AtEndOfStream <> True
ReadLineTextFile = My_File.ReadLine
If InStr(ReadLineTextFile,Find_MAC) <> 0 Then
WScript.Echo ReadLineTextFile
End If
Loop
My_File.Close
WScript.Quit(0)

Смена ппароля локального админа в домене

Const ADS_SCOPE_SUBTREE = 2
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 Name, Location from 'LDAP://DC=yourdomain,DC=ru' " _
        & "where objectClass='computer'"   
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30 
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
objCommand.Properties("Cache Results") = False 
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
    strComputer = objRecordSet.Fields("Name").Value
    Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user")
    objUser.SetPassword "testpassword"
    objUser.SetInfo
    objRecordSet.MoveNext
Loop 

 Мониторит в папке c:\temp все изменения происходящие с файлами TXT

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
                    "TargetInstance ISA 'CIM_DataFile'" & _
                    " AND TargetInstance.Drive = 'c:'" & _
                    " AND TargetInstance.Extension = 'txt'" & _
                    " AND TargetInstance.Path = '\\temp\\'")

Wscript.Echo "Waiting for events ..."
Do While(True)
    Set objReceivedEvent = objEvents.NextEvent

    WScript.Echo "Filename: " & objReceivedEvent.TargetInstance.FileName
    WScript.Echo "Name: " & objReceivedEvent.TargetInstance.Name
Loop

Этот скрипт предназначен для отправки e-mail с компьютера

///////////////////////////////////////////////////////////////////////////
// JScript
//на котором не установлен SMTP-протокол
///////////////////////////////////////////////////////////////////////////
objEmail = WScript.CreateObject("CDO.Message");
objEmail.From = "BillGates@microsoft.com";
objEmail.To = "1@1.com";
objEmail.Subject = "Subj";
objEmail.Textbody = "Text";

objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.server.ru"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
objEmail.Configuration.Fields.Update();

objEmail.Send();

 Скрипт резервного копирования, использующий ntbackup.exe

/**************************************************************************
Имя: backup.js
Комментарий: Скрипт резервного копирования, использующий ntbackup.exe
Язык: JScript
Автор: Андрей Мишечкин
Version: 2.0
26.07.2006
**************************************************************************/
var MsgText;
var bcfg;
var BackupObject;
var BackupPath;
var JobResult;

//WshShell - используется для выполнения системных комманд
var WshShell = WScript.CreateObject("WScript.Shell");
//Создание объекта для сетевых операций
var WshNetwork = WScript.CreateObject("WScript.Network");
//Объект для файловой системы
var fso = WScript.CreateObject("Scripting.FileSystemObject");

/////////////////////////////////////////////////////////
// Определение имени компьютера //
/////////////////////////////////////////////////////////
var WMIServiceObj = GetObject("Winmgmts:");
var OSPropEnumerator = new Enumerator(WMIServiceObj.ExecQuery("Select Name from Win32_ComputerSystem"));
var ComputerName = OSPropEnumerator.item().Name;

/////////////////////////////////////////////////////////
// Определение текущей даты //
/////////////////////////////////////////////////////////
var objCurrentDate = new Date;
var CurrentDate = objCurrentDate.getDate();
CurrentDate += "_";
var CurrentMonth = (objCurrentDate.getMonth()+1);
if(CurrentMonth<10)
CurrentDate +="0";
CurrentDate += CurrentMonth;
CurrentDate += "_";
CurrentDate += objCurrentDate.getYear();

/////////////////////////////////////////////////////////
// Считывание конфигурационного файла //
// и создание файла журнала //
/////////////////////////////////////////////////////////
if(!fso.FolderExists("Logs"))
{
fso.CreateFolder("Logs");
}
try
{
bcfg = fso.OpenTextFile("backup.cfg",1);
logfile = fso.CreateTextFile("Logs\\" + CurrentDate + ".log",true); //Создание лог-файла
}
catch(e)
{
MsgText = "Backup failed on. Unable to open configuration or log file.\n" + e.description+"\n";;
SendMail("error",MsgText);
WScript.Quit();
}
while(!bcfg.AtEndOfStream)
{

var cfgLine = new String(bcfg.ReadLine());
var cfgParams = cfgLine.split(",",2);
BackupObject = cfgParams[0];
BackupPath = cfgParams[1];
//Подключение сетевого диска с резервными копиями
try
{
WshNetwork.MapNetworkDrive("S:",BackupPath);
}
catch(e)
{
MsgText = "Unable to map backup path for " + BackupObject + " backup. \n" + e.description + "\n";
SendMail("error",MsgText);
WScript.Quit();
}
//Выполнить резервное копирование системного состояния (применяется для резервного копирования активного каталога)
if(BackupObject == "SystemState")
{
logfile.WriteLine("System state backup starting");
JobResult = NTBackupJob("SystemState");
if(JobResult == 0)
logfile.WriteLine("System state backup successfuly finished");
else if(JobResult == 2)
logfile.WriteLine("NTBackup return non-zero result. Check the NTBackup log for details");
}
//Выполнить копирование каталогов и\или файлов
else
{
logfile.WriteLine(BackupObject+" backup starting");
JobResult = NTBackupJob(BackupObject);
if(JobResult == 0)
logfile.WriteLine(BackupObject + " backup successfuly finished");
else if(JobResult == 1)
{
MsgText = "Unable to backup " + BackupObject + ". Incorrect folder or file name in backup.cfg.\n";
logfile.WriteLine(MsgText);
SendMail("error",MsgText);
}
else if(JobResult == 2)
logfile.WriteLine("NTBackup return non-zero result. Check the NTBackup log for details");
}
WshNetwork.RemoveNetworkDrive("S:",true);
logfile.WriteBlankLines(1);
}
bcfg.Close();
logfile.Close();
/*******************************************************************************/
/* Функция резервного копирования с помощью утилиты ntbackup */
/*******************************************************************************/
function NTBackupJob(BackupSpec)
{
var objBackup;
var BackupName;
var BackupMode;
var BackupCommandString;
var FileCounter = 0;
var TodayFileNumber = 0;
var AlreadyBackup = false;

//////////////////////////////////////////////////////////////////
// Получения объекта файла или папки для резервного копирования //
//////////////////////////////////////////////////////////////////
if(BackupSpec == "SystemState")
{
BackupName = ComputerName + "_SystemState"
BackupMode = "normal";
}
else
{
if(fso.FolderExists(BackupSpec))
objBackup = fso.GetFolder(BackupSpec);
else if(fso.FileExists(BackupSpec))
objBackup = fso.GetFile(BackupSpec);
else
return(1);
//////////////////////////////////////////////////////////////////////////////////////////////
// Анализ файлов резервных копий и формирование имени файла и режима резервного копирования //
//////////////////////////////////////////////////////////////////////////////////////////////
BackupName = objBackup.Name;
if(fso.FolderExists("S:\\"+ComputerName))
{
var objFolder = fso.GetFolder("S:\\"+ComputerName);
var enumFiles = new Enumerator(objFolder.Files);
while(!enumFiles.atEnd())
{
var strFileName = new String(enumFiles.item().Name);
if(BackupName == strFileName.substring(11,strFileName.length - 6))
{
BackupMode = "incremental";
if((CurrentDate + "_" + BackupName) == strFileName.substring(0,strFileName.length - 6))
{
AlreadyBackup = true;
TodayFileNumber = strFileName.substring(strFileName.length - 4,strFileName.length - 5);
TodayFileNumber++;
}
else
{
FileCounter++;
break;
}
}
else
{
if(!AlreadyBackup)
BackupMode = "normal";
}
FileCounter++;
enumFiles.moveNext();
}
if(FileCounter == 0)
BackupMode = "normal";
}
else
{
fso.CreateFolder("S:\\"+ComputerName);
BackupMode = "normal";
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
// Выполнение резервного копирования с помощью утилиты ntbackup //
//////////////////////////////////////////////////////////////////////////////////////////////
if(BackupSpec != "SystemState")
{
BackupName = CurrentDate + "_" + BackupName + "_" +TodayFileNumber + ".bkf";
BackupCommandString = "ntbackup backup " + BackupSpec + " /J " + "\"" + BackupName + "\" /M " + BackupMode + " /f \""+"S:\\"+ComputerName+"\\"+BackupName+"\" /L:F";
}
else
{
BackupName = CurrentDate + "_" + BackupName + ".bkf";
BackupCommandString = "ntbackup backup systemstate" + " /J " + "\"" + BackupName + "\" /M Normal " + " /f \""+"S:\\"+ComputerName+"\\"+BackupName+"\" /L:F";
}
var BackupResult = WshShell.Run(BackupCommandString,2,true);
if(BackupResult != 0)
{
SendMail("warning","Warning! NTBackup return non-zero result on " + BackupName + " backup process. Check the backup log.");
return(2);
}
else
return(0);
}
/*******************************************************************************/
/* Функция отправки сообщения по электронной почте */
/*******************************************************************************/
function SendMail(MsgFlag,MsgText)
{
var objEmail = WScript.CreateObject("CDO.Message");
objEmail.From = "\"Backup script\" scriptrobot@company.ru";
objEmail.To = "admin@company.ru";
if(MsgFlag == "error")
objEmail.Subject = ComputerName+" backup error";
if(MsgFlag == "warning")
objEmail.Subject = ComputerName+" backup warning";
objEmail.Textbody = MsgText;
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.company.ru";
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25;
objEmail.Configuration.Fields.Update();
objEmail.Send();
}

-----------------------------------
Параметры бэкапа задаются в текстовом файле backup.cfg в следующем формате:
C:\Directory1,\\Server1\BackupShare1
D:\Directory2,\\Server2\BackupShare2

 

Изменение свойств учетной записи пользователя.

****************************************************************************
'ChangePassword.vbs
'Необходимо ввести старый и новый пароли.
'*************************начало*******************************************
' Определяем область поиска отделов и пользователей
' Можно вручную установить начало поиска
'Примеры: "ou=users,ou=autopark,DC=ap15,DC=dom" - вложенное подразделение
'"cn=users, DC=ap15,DC=dom" - папка users
'"DC=ap15,DC=dom" - весь домен
ContainerPuth = "ou=users,ou=autopark,DC=ap15,DC=dom"
Set Container = GetObject("LDAP://" & ContainerPuth)

i=0
'Выбераем отдел
For Each organizationalUnit In Container
  i=i+1
  OName = organizationalUnit.Name
    Str = Str & VbCrLf & i & " " & organizationalUnit.Name
   If MsgBox (str,vbYesNo,"Выбираем отдел")=vbYes Then
   ' запоминаем имя отдела
      OnameYes = Oname & "," & ContainerPuth
      Exit For
   End If
Next
' ищем пользователя
Set Object = GetObject("LDAP://" & OnameYes)
Object.Filter = Array ("User")
i=0
For Each User In Object
   i=i+1
   StrTxt = StrTxt & VbCrLf & i & " " & User.samAccountName & " " & User.name
Next
MsgBox strtxt
StrTxt = ""
UN=InputBox ("Введите accaunt пользователя","Изменение уч. зап.","х")
'Ищем учетную запись и выводим дополнительные сведения о ней
For Each User In Object
   StrTxt = StrTxt & VbCrLf & User.samAccountName & " " & User.name
   If User.samAccountName = UN Then
   'Если не было ни одного входа в сеть  LastLogin = 01.01.1930 00:00:00
      Messg = User.LastLogin
      If Err.Description <> "" Then Messg = "01.01.1930 00:00:00"
        Err.Clear
        'Если согласны, - удаляем учетную запись
         If MsgBox ("Изменяем: " & User.samAccountName & " " & User.name & " " & Messg ,vbYesNo,"ПРЕДУПРЕЖДЕНИЕ!")=vbYes Then
            'MsgBox User.UserPrincipalName
            OldPassword = InputBox ("Введите старый пароль...","Изменение пароля","123456")
            NewPassword = InputBox ("Введите новый пароль...","Изменение пароля","123456")
            ' !!!!со следующей строки снимите комментарий после отладки скрипта!!!!!
            'User. OldPassword, NewPassword
            MsgBox "Пароль " & User.name & " изменен!"
         End If
   End If
Next
StrTxt = ""

'*************************конец******************************************

 

Этот скрипт предназначен для изменения конфигурации сети при сбое

:begin
@echo off
ping -n 3 Любой внешний ИП
if not errorlevel 1 goto :begin
netsh interface ip set address name="Local Area Connection" static ИП АДДРЕС МАСКА РУТЕР
netsh interface ip set dns name="Local Area Connection" static АДДРЕС ДНС СЕРВЕРА primary
:bad
ping -n 3 Любой внешний ИП
if not errorlevel 1 goto :bad
netsh interface ip set address name="Local Area Connection" static ИП АДДРЕС МАСКА РУТЕР
netsh interface ip set dns name="Local Area Connection" static АДДРЕС ДНС СЕРВЕРА primary
goto :begin

 

Задача мониторинга свободного места на файловых, почтовых и т.д. серверах

 '=============================================
'Скрипт отсылает сообщение по електронной почте когда свободное
'пространство на диске меньше заданного
'=============================================

Quta = 1500            'количество свободных мегабайт
strSMTP_Server = "SMTP.domain.ru"           'ваш  SMTP сервер
strTo = "admin@domain.ru"                        'кому
strFrom = "megaserver@domain.ru"             'от кого
strSubject = "Low disk space"                      'тема сообщения
strBody = "Disk space on drive D is less than 1500 Mb"    'текст сообщения

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set Drive = fso.GetDrive("d")
free = FormatNumber(fso.GetDrive(drive).FreeSpace/1048576, 1)

If free < Quota Then

    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    Set Flds = iConf.Fields
    Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP_Server
    Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
    Flds.Update
    iMsg.Configuration = iConf
    iMsg.To = strTo
    iMsg.From = strFrom
    iMsg.Subject = strSubject
    iMsg.TextBody = strBody
    iMsg.Send

End If

Скрипт поиска запущеного процеса, в часности Opera.exe, на удалённых машинах.

 '************************************************
'Язык: VBScript
'Автор: mr.Soshe (Салий В.В.)
'Версия: 1.0
'************************************************
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Main\Window Title", "=::= -"

aComputer = array("sys-admin","st-buh","zarplata","ekonom","zam-nach", "laborant","dig-zal","materials","secretar")
Set oExplorer = WScript.CreateObject("InternetExplorer.Application")
oExplorer.Navigate "about:blank"   
oExplorer.ToolBar = 0
oExplorer.StatusBar = 1
oExplorer.Width=400
oExplorer.Height = 300
oExplorer.Left = 300
oExplorer.Top = 180
Do While (oExplorer.Busy)
    Wscript.Sleep 180
Loop   
oExplorer.Visible = 1             
sHTML = "<title>Список машин с процессом &quot;Opera&quot;</title><center><b>Подождите пожалуйста. Идёт обработка запроса." & " <br> " & _
    "Это может занять некоторое время.</center></b><br><br>"
oExplorer.Document.write sHTML
n = 11
for i=0 to n
   On Error Resume Next
   Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & aComputer(i) & "\root\cimv2")
   Set colProcesses = objWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE Name = 'Opera.exe'")
   oExplorer.StatusText = int(100/n*i-100/n/2) & " %"
   If colProcesses.Count <> 0 Then
        oExplorer.Document.write "<center>" & aComputer(i) & "</center>"
   end if
   oExplorer.StatusText = int(100/n*i) & " %"
next
oExplorer.Document.write "<br><br><center><b>Запрос окончен.</b></center>"
'Wscript.Sleep 10000
'oExplorer.Quit
WshShell.RegDelete "HKCU\Software\Microsoft\Internet Explorer\Main\Window Title"

Подключение сетевого диска от конкретного пользователя.

Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "q:", "\\192.168.1.100\e$", , "administrator", "password"

 

Скрипт по борьбе с mail.ru-агентом



Const DeleteReadOnly = TRUE

Set WshShell = WScript.CreateObject ("Wscript.Shell")
Set WshSysEnv = WshShell.Environment ("Process")

Set objFSO = CreateObject("Scripting.FileSystemObject")
agentFile = WshSysEnv ("userprofile") + "\Application Data\Mail.Ru\Agent\magent.exe"


If objFSO.FileExists(agentFile) Then

objFSO.DeleteFile(agentFile), DeleteReadOnly


if err.number = 0 then
Set objEmail = CreateObject("CDO.Message")

objEmail.From = "killer@kontora.ru"
objEmail.To = "admin@kontora.ru"
objEmail.Subject = "Mail.ru-агент"
objEmail.Textbody = "Уважаемые господа системные администраторы, уведомляю Вас о том что уничтожен вражеский mail.ru агент из " + WshSysEnv ("userprofile")
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"ip почтового сервера"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send

end if

end if

 


 Автоматическая установка WinRAR


Dim FSO, WSH
Dim TheFolder, AFile, RAR_Dist, RAR_Param

Set WSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

Set TheFolder = FSO.GetFolder(WSH.ExpandEnvironmentStrings("%ProgramFiles%") + "\WinRAR\")

AFile = FSO.GetAbsoluteathName(TheFolder + "\winrar.exe")

If Not FSO.FileExists(AFile) Then
  RAR_Dist = "\\server\distrib\winrar\setup.exe"
  RAR_Param = "/s"
  WSH.run RAR_Dist & RAR_Param, 6, True
End If

set WSH = nothing

 

 Скрипт для проверки доступности серверов и сервисов.

   
'    Написан для помощи пользователям в диагностике
'    возможных проблем на время отпуска
'   
'    Содержит 3 функции
'      Ping(<ip-addr or domain>) - для проверки включенности сервера
'      Nslookup(<domain>) - для проверки работы DNS сервера
'      IsAPIPA() - для поиска строки "169.254." в ipconfig /all
'   
'    и пример их использования.
'   
'    Скрипт будучи закинутым пользователям в папку Windows\ позволяет
'    оперативно по телефону определить причину неисправности.
'   
' ----------------------------------------------------------------------

status = vbInformation
StrKar = CHR (13) + CHR (10) ' Перенос каретки
myStr = "Диагностика сети v1.0:" + StrKar


'------------------------
'     Пример Ping()
'------------------------
myStr = myStr + StrKar + "Серверы:"  + StrKar
If ping("192.168.0.1") then
  myStr = myStr + "Сервер КД - [OK]" + StrKar
Else
  myStr = myStr + "Сервер КД - [недоступен!!!]"  + StrKar
  status = vbCritical
end if


myStr = myStr + StrKar + "Сервисы:"  + StrKar
If ping("ya.ru") then
  myStr = myStr + "Интернет (ya.ru) - [OK]"  + StrKar
Else
  myStr = myStr + "Интернет (ya.ru) - [недоступен!!!]"  + StrKar
  status = vbCritical
end if



'----------------------------
'     Пример nslookup()
'----------------------------
If Nslookup("microsoft.com") then
  myStr = myStr + "DNS Server (nslup microsoft.com) - [OK]"  + StrKar
Else
  myStr = myStr + "DNS Server (nslup microsoft.com) - [недоступен!!!]"  + StrKar
  status = vbCritical
end if



'----------------------------
'     Пример IsAPIPA()
'----------------------------
if IsAPIPA then
  myStr = myStr + StrKar + "Дополнительно:" + StrKar + "IP адрес - [APIPA!!!]"  + StrKar
  myStr = myStr + "Внимание. Обнаружен некорректный ip адрес!!!" + StrKar
  myStr = myStr + "Перезагрузите компьютер. Если проблема повторится, проверьте доступность DHCP сервера либо назначьте ip адрес вручную" + StrKar
  myStr = myStr + "Примечание: Если при этом у вас прекрасно работает сеть, считайте данное сообщение ошибочным" + StrKar
else
  myStr = myStr + StrKar + "Дополнительно:" + StrKar + "IP адрес - [OK] (Не APIPA)"  + StrKar
end if



'----------------------------
'     Вывод результатов
'----------------------------
msgbox myStr, status, "Результаты:"




'------------------
'     Функции
'------------------
Function Ping(strAddr)
' Проверяем доступность компьютера с помощью команды PING
    Set objShell = CreateObject("WScript.Shell")
    Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 1 " & strAddr)
    strPingResults = LCase(objScriptExec.StdOut.ReadAll)
   
' Возвращаем результат:
  Ping = InStr(strPingResults, "ttl=")
End Function

Function Nslookup(strAddr)
' Проверяем работу DNS сервера через nslookup
    Set objShell = CreateObject("WScript.Shell")
    Set objScriptExec = objShell.Exec("%comspec% /c nslookup.exe -q=mx " & strAddr)
    strNslookupResults = LCase(objScriptExec.StdOut.ReadAll)
   
' Возвращаем результат:
  Nslookup = InStr(strNslookupResults, "mail")
End Function

Function IsAPIPA()
' Проверяет, нет ли сетевых карт, получивших APIPA адрес
    Set objShell = CreateObject("WScript.Shell")
    Set objScriptExec = objShell.Exec("%comspec% /c ipconfig /all")
    strIsAPIPAResults = LCase(objScriptExec.StdOut.ReadAll)
   
' Возвращаем результат:
  IsAPIPA = InStr(strIsAPIPAResults, "169.254.")
End Function

 

www.4its.ru