Версия для печати темы
forum.0day.community _ Системное администрирование _ Скрипты для системных администраторов Windows
Автор: Nazim May 8 2008, 14:32
Предлагаю выкладывать сюда скрипты для администрирования. Например вот мой для подключения сетевого диска
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Set WshNetwork = CreateObject("WScript.Network")
'Создание объекта типа Network Set Drives = WshNetwork.EnumNetworkDrives
c = 0 'Пременная проверки на наличие хотя бы одного сетевого диска!
i = 0 While i <= Drives.Count-1 'Проверка на наличие сетевых диков
c = 1 'MsgBox " У вас есть сетевой диск " & Drives.Item(i) & " - " & Drives.Item(i+1) i = i+2 Wend if c=0 then
'MsgBox "Нет ни одного подключенного диска"
'MsgBox "Попытка подключить сетевой диск" 'Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "Z:", "\\Имясервера\имя папки"
End if
для подключения принтера
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.AddWindowsPrinterConnection "\\имяпринтсервера\имя принтера"
Меня например интересует скрипт, который отображает во сколько пользователь подключился в сеть.
Кстати кое что можно и тут найти
http://gallery.technet.microsoft.com/ScriptCenter/en-us/
Автор: klez May 8 2008, 14:55
Проверка изменений параметров в AD и отправка извещения на электронную почту или в список Sharepoint
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
/* ========================================================
'
' Script Information: Отправка сообщения администратору
' при изменении данных в AD возможна отправка сообщения
' на электронную почту или создание задачи в MOSS 2007
'
' Author: Коротенко Владимир SDC 2008 Voronezh
' Originally created: 15.04.2008 - 11:01:47
' Original path: untitled.vbs
' Description: Создание дампа схемы домена и сравнение
' с предыдущей копией для получения изменений и последующим
' оповещением
'
' ========================================================
*/
// Секция настроек скрипта
var SmtpHost,SmtpPort,MailSubject,MailTo,MailFrom,TextBody;
var DumpCmdLine,WinDiff,DumpFile,DumpFileOld,WorkingFolder;
var DiffFile,DiffMessage;
var SpListGuid,SpHost,UseSp;
SmtpHost = "comp1"; // почтовый сервер для отправки сообщений
SmtpPort = 25; // порт почтового сервера
MailSubject = "Внесите изменения в организационную диаграмму"; // заголовок сообщения письма
MailTo = "
[email protected]"; // Адрес получателя
MailFrom = "
[email protected]"; // Адрес отправителя
DumpCmdLine = "c:\\windows\\system32\\ldifde.exe"; // командная строка для дампа данных их AD
WinDiff = "c:\\temp\\windiff.exe"; // Программа для сравнения 2
DumpFile = "schema.ldf"; // Имя 1 файла для сохранения
DumpFileOld = "schemaOld.ldf"; // Имя 2 файла для сравнения
WorkingFolder = "c:\\temp\\"; // рабочая папка для временных файлов
DiffFile = "diff.log"; // Служебный файл для результатов сравнения
DiffMessage = "1 files listed"; // строка которую мы ищем при от личии файлов
SpListGuid = "{3D9B5EFB-C0C5-434C-B1DA-61FEA6E9D63B}";
SpHost = "http://portal4";
UseSp = true; // отправка сообщений в список Share Point
// Конец секции настроек
/*********************************************************************
Код изменять только в случае глубокого понимания для чего делаете
и главное КАК делаете !!!!!!!!!
**********************************************************************/
var file,wsh;
// создаем обьект для работы
file = WScript.CreateObject("Scripting.FileSystemObject");
if (file.FileExists ( WorkingFolder + DumpFileOld ))
file.DeleteFile( WorkingFolder + DumpFileOld);
if (file.FileExists(WorkingFolder + DumpFile) )
file.MoveFile (WorkingFolder + DumpFile, WorkingFolder + DumpFileOld)
wsh = WScript.CreateObject("WScript.Shell");
wsh.Run( DumpCmdLine + " -f " + WorkingFolder + DumpFile,1,1);
TrimUnused (WorkingFolder + DumpFile);
if (file.FileExists ( WorkingFolder + DumpFileOld ))
CheckChanges( WorkingFolder + DumpFile,WorkingFolder + DumpFileOld);
// Проверка на различие 2 файлов
function CheckChanges (pathFrom ,pathTo)
{
var cmd;
// WinDiff.Exe output.ldf schemaOld.ldf -Sx logcmd
cmd = WinDiff + " " + pathFrom + " " + pathTo + " -Sx " + WorkingFolder + DiffFile;
wsh.Run (cmd,1,1);
objFile = file.OpenTextFile(WorkingFolder + DiffFile,1);
var buff = new String();
buff = objFile.ReadAll();
objFile.Close();
var arr = new Array();
arr = buff.split("\r\n");
for(var i = 0; i<arr.length ; i++)
{
// Проверяем отличаются ли файлы, если так отправляем сообщение
if( arr[i].indexOf(DiffMessage) > - 1 )
{
var d = new Date();
TextBody = "Обнаружены изменения в схеме. Время сравнения: " + d.toString();
SendMessage();
}
}
}
// Убираем строки с часто изменяемыми аттрибутами
function TrimUnused (name )
{
var ForReading = 1;
var ForWriting = 2;
var objFSo,objFile;
objFSo = new ActiveXObject("Scripting.FileSystemObject");
objFile = objFSo.OpenTextFile(name, ForReading);
var strContents = new String();
strContents = objFile.ReadAll();
objFile.Close();
var arr = new Array();
arr = strContents.split("\r\n");
objFile = objFSo.OpenTextFile(name, ForWriting);
for(var i = 0; i < arr.length ; i++)
{
if( arr[i].indexOf("lastLogon" ) == -1 ){
objFile.WriteLine( arr[i]);
}
}
objFile.Close();
}
// Отправка сообщения по адресу все параметры должны быть заданы в секции глобальных переменных
function SendMessage(){
if (UseSp)
{
NewMessage( SpListGuid , SpHost , TextBody);
return;
}
var objEmail = new ActiveXObject( "CDO.Message" );
objEmail.From = MailFrom;
objEmail.To = MailTo;
objEmail.Subject = MailSubject;
objEmail.Textbody = TextBody;
objEmail.MimeFormatted = true;
objEmail.BodyPart.Charset="windows-1251";
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2;
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SmtpHost;
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SmtpPort;
objEmail.Configuration.Fields.Update() ;
objEmail.Send();
}
// создаем новое сообщение в списке Sharepoint
function NewMessage (list,hostName,message)
{
var web,req,batch;
web = new ActiveXObject( "MSXML2.XMLHTTP.3.0" );
batch = "<Batch ListVersion='0' ><Method ID='1' Cmd='New'><Field Name='Title'>" + message + "</Field></Method></Batch>";
var req = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body ><UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>";
req += "<listName>" + list + "</listName>";
req += "<updates>" + batch + "</updates></UpdateListItems></soap:Body></soap:Envelope>";
var r = hostName + "/_vti_bin/Lists.asmx?op=UpdateListItems";
web.Open( "POST", r, False );
web.setRequestHeader( "Content-Type","text/xml; charset=utf-8" );
web.setRequestHeader ("SOAPAction","http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
web.send( req);
//'WScript.Echo req
//'WScript.Echo Chr (13) & Chr (10)
//'WScript.Echo web.responseText
}
Скрипт для удаления лицензии терминалов на клиентах, каждые 30 дней:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
' Удаляет при необходимости раздел реестра, в котором хранятся временные лицензии, если прошло 30 дней.
Option Explicit
Dim iCount, dDat, dReadDat, strPath, strRegKey 'объявление переменных
Dim fso, fLogFile, wshSysEnv, wshShell 'объявление объектов
dDat = date 'получаем текущую дату
err.clear 'yf всякий случай чистим стэк ошибок
on error resume next 'После этого сообщения об ошибках не выводятся
'Создаём объект Shell
Set wshShell = WScript.CreateObject("WScript.Shell")
'Создаём объект Environment, в котором находятся искомая системная переменная
Set wshSysEnv = WshShell.Environment("PROCESS")
'Вытаскиваем системную переменную (путь к виндовской папке) и помещаем ее в строковую переменную для дальнейшего использования
strPath = wshSysEnv("WINDIR")
'Создаём объект доступа к файловой системе и объект доступа к нужному файлу на чтение
Set fso = CreateObject("Scripting.FileSystemObject")
set fLogFile = fso.OpenTextFile(strPath & "\LiDelDat.alx", 1, false)
'Основное условие удаления или неудаления ветви реестра
If err.number<>0 then
'Выполнение процедуры удаления ветви реестра
Call DelLicense
'Занесение последней даты удаления лицензии в файл журнала, затирая имеющуюся в нём запись
Call WriteToLog
Else
'Считываем из файла и сравниваем дату последнего удаления лицензии с текущей датой
dReadDat = CDate(fLogFile.ReadLine())
'Должно быть (dDat - dReadDat)
If (dDat - dReadDat) > 29 Then
'Выполнение процедуры удаления ветви реестра
Call DelLicense
'Занесение последней даты удаления лицензии в файл журнала, затирая имеющуюся в нём запись
Call WriteToLog
End If
End If
'Уничтожаем все ненужные более объекты
Set WshShell = Nothing
Set wshSysEnv = Nothing
Set fso = Nothing
'************************************************************
'Процедуры
'************************************************************
'Процедура удаления лицензии
Sub DelLicense()
'Удаляем лицензии-подключи по одной
on error resume next
err.clear
for iCount = 0 to 9
strRegKey = "HKLM\SOFTWARE\Microsoft\MSLicensing\Store\LICENSE00" & iCount & "\"
WshShell.RegDelete (strRegKey)
If err.number <> 0 then
err.clear
End If
next
'Удаляем подключи основного раздела
WshShell.RegDelete ("HKLM\SOFTWARE\Microsoft\MSLicensing\Store\")
if err.number <> 0 then err.clear
WshShell.RegDelete ("HKLM\SOFTWARE\Microsoft\MSLicensing\HardwareID\")
if err.number <> 0 then err.clear
'Удаляем основной раздел
WshShell.RegDelete ("HKLM\SOFTWARE\Microsoft\MSLicensing\")
if err.number <> 0 then err.clear
End Sub
'Процедура записи даты последнего удаления лицензии в файл
Sub WriteToLog()
err.clear
'Создаём объект доступа к нужному файлу на запись с затиранием предыдущих записей
set fLogFile = fso.OpenTextFile(strPath & "\LiDelDat.alx", 2, true)
'Записываем в файл дату очистки реестра
fLogFile.Write(Date)
set fLogFile = nothing 'уничтожаем объект
End Sub
Скрипт по борьбе с 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 = "
[email protected]"
objEmail.To = "
[email protected]"
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
P.S. Еще нужно?
Автор: Nazim May 8 2008, 15:08
Кстати вот есть также сайтик http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/
Автор: Spyder3W May 8 2008, 15:11
если например с 1 поста могут использоватся то со 2 - неа
Автор: olexande May 8 2008, 15:22
Наверно проще всего получать когда пользователь подключился - в батнике или логон скрипте:
echo. | date >> user_date.log
Автор: klez May 8 2008, 15:29
Это скрипт делает backup системы и заливает его на фтп
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
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
Автор: metalolom May 8 2008, 15:54
Это скрипт полезен в больших структурах где отдел кадров далеко от ИТ.
Скрипт блокирует/разблокировывает пользователей в AD, беря из определённого файла список их ФИО, и уведомляет администратора по почте о результатах.
Скрипт писался на коленке, здесь предоставлена лишь общая часть, некоторые моменты можно оптимизировать, но меня лично и так устраивает
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Dim Mlogins(9000),MAdspath(9000),MFullName(9000)
Dim objFileSystem, objInputFileFromKardy,strData
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const OPEN_FILE_FOR_READING = 1
'Указываем домен
Const strDomainName="<имя домена например domain.com>"
'Указываем OU в AD, внутри которой мы будем искать
Const strStartOU="Domain Users"
strDomainDN="DC="&Replace(strDomainName,".",",DC=")
'---------------------Получение данных--------------------
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"
objCommand.Properties("Page Size")=4000
Set objRecordSet = objCommand.Execute
'------Индексирование --------
index=0
While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
MFullName(index)=objUser.DisplayName&" "
Mlogins(index)=objUser.sAMAccountName
MAdspath(index)=strADsPath
index=index+1
objRecordset.MoveNext
Wend
objConnection.Close
index=index-1
maxindex=index
'Путь в файлу в котором хранится список ФИО людей учётные записи которых нужно открыть/закрыть
strFileOfFiried = "d:\file_of_firied.txt"
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set objInputFileFromKardy = objFileSystem.OpenTextFile(strFileOfFiried,OPEN_FILE_FOR_READING)
'Загоняем содержимое файла в массив
inputDataFromFiried = Split(objInputFileFromKardy.ReadAll, vbNewline)
'Обнуляем списки результатов
UserDisables=""
UserUpdated=""
UserNoFound=""
UserDuplicated=""
ii=0
For each strFULL In inputDataFromFiried
if Len(strFULL)>5 then
'обнуляем счётчик найденых соответсвий
e=0
'1е поле:выделяем из строчки ФИО пользователя
strFIO=Left(strFULL,InStr(strFULL,";")-1)
'Разбиваем по частям ФИО
Familia=Left(strFIO,(Instr(strFIO," ")-1))
N=Trim(mid(strFIO,Instr(strFIO," ")))
Imya=Left(N,(Instr(N," ")-1))
Otchestvo=Trim(mid(N,Instr(N," ")))
'Собираем по частям ФИО
strFIO=Familia&" "&Imya&" "&Otchestvo
index=maxindex
While index>1
'Разбиваем по частям ФИО в AD
AdFamilia=""
AdImya=""
AdOtchestvo=""
AdFamilia=Left(MFullName(index),(Instr(MFullName(index)," ")-1))
if Len(Trim(mid(MFullName(index),Instr(MFullName(index)," "))))>1 then
AdN=Trim(mid(MFullName(index),Instr(MFullName(index)," ")))
if Len(Left(AdN,(Instr(AdN," "))))>1 then
AdImya=Left(AdN,(Instr(AdN," ")-1))
if Len(Trim(mid(AdN,Instr(AdN," "))))>1 then
AdOtchestvo=Trim(mid(AdN,Instr(AdN," ")))
end if
end if
end if
'Собираем по частям ФИО
AdstrFIO=AdFamilia&" "&AdImya&" "&AdOtchestvo
AdstrFIO1=AdImya&" "&AdOtchestvo&" "&AdFamilia
AdstrFIO2=AdImya&" "&AdFamilia&" "&AdOtchestvo
'Wscript.Echo AdstrFIO
if (StrFIO=AdstrFIO) or (StrFIO=AdstrFIO1) or (StrFIO=AdstrFIO2) then
e=e+1
Mindex=index
end if
index=index-1
Wend
if e=1 then
'блокируем логин в AD
LockUser(Mlogins(Mindex))
UserDisables=UserDisables& "User: " &strFIO&" is disabled" & vbCrLf
end if
'Не блокируем/открываем, т.к. у нас найдено несколько одинаковых ФИО
if e>1 then
UserNoFound=UserNoFound &"User: " &strFIO&" is found more than 1 times" & vbCrLf
end if
'Не блокируем/открываем, т.к. пользователь не найден
if e=0 then
UserDuplicated=UserDuplicated&"User: " &strFIO&" is not found
" & vbCrLf
end if
end if
Next
'если есть какой-то результат, то
if (len(UserDisables)+len(UserNoFound)+len(UserDuplicated) > 10) then
' начинаем отправлять почту
Set objNetwork = CreateObject("Wscript.Network")
objComputerName = objNetwork.ComputerName
objUserName = objNetwork.UserName
Set objMessage = CreateObject("CDO.Message")
objMessage.From = "<e-mail от кого отправляется почта>"
objMessage.To = "<e-mail кому отправляется почта>"
objMessage.Subject = "Тема письма"
'Ставим кодировочку
objMessage.bodypart.charset= "koi8-r"
objMessage.TextBody = UserDisables&vbCrLf&UserNoFound&vbCrLf&UserDuplicated
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "<адрес smtp сервера>"
'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
'==End remote SMTP server configuration section==
objMessage.Send
end if
objInputFileFromKardy.Close
Set objFileSystem = Nothing
Sub LockUser(strText)
' в этой строчке значение TRUE - дисейблит пользователя, FALSE - открывает пользователя
strDisableAccount = TRUE
strUserLogin = strText
set objUser = GetObject("WinNT://<домен>/"& strUserLogin &",user")
if strDisableAccount = TRUE then
objUser.AccountDisabled = strDisableAccount
objUser.Description = "Account is Disabled because of firing " & "at "&" "&Date()
objUser.SetInfo
end if
if strDisableAccount = FALSE then
objUser.AccountDisabled = strDisableAccount
objUser.Description = "Account is Opened by script " & "at "&" "&Date()
objUser.SetInfo
end if
End Sub
Автор: Alex_GR May 8 2008, 16:02
Нужен скрипт для получения инфо по объектам АД - Пользователь (поиск по всему каталогу или конкретным OU ), у которых "Срок действия учетной записи: Истекает дд/мм/гггг"
Автор: Alex_GR May 8 2008, 16:14
(Nazim @ May 8 2008, 16:08)
Кстати вот есть также сайтик http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/
Как этими скриптами воспользоваться ?
Если не трудно напиши. спс.
Автор: klez May 8 2008, 16:18
Этот скрипт предназначен для копирования файла в пользовательские перемещаемые профил
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
//*****************************************************************************
// JScript 2004 Shs
//Этот скрипт предназначен для копирования файла в пользовательские перемещаемые профили
//(Добавляем ярлычок в меню пользователя)
//******************************************************************************
//
//
//*****************************************************************************
// Рекурсивная функция перехода по всем подкаталогам, начиная с заданого (PolFldr)
// и копирования заданного файла (ScriptName) по заданым папкам (FldrName)
//******************************************************************************
function LoopSubFolders (PolFldr, DeepCount)
{
var SubFolders, // Коллекция подкатологов системных политик
fsoPolFldr, //объект для доступа к папке
CurFldr; //текущая папка
DeepCount++;
//WScript.Echo(DeepCount);
if (DeepCount<DeepLimit)
{
fsoPolFldr = FSO.GetFolder(PolFldr);
//Получаем коллекцию подкаталогов каталога системных политик
SubFolders = new Enumerator (fsoPolFldr.SubFolders);
//
for (;!SubFolders.atEnd();SubFolders.moveNext())
{
CurFldr = SubFolders.item();
if (CurFldr.Name == FldrName)
{
try {
WScript.Echo(CurFldr.Path+"\\"+ScriptName);
//WScript.Echo(Path2Scripts + "\\"+ ScriptName);
FSO.CopyFile(Path2Scripts + "\\"+ ScriptName,CurFldr.Path+"\\"+ScriptName,true)
}
catch (e)
{//обрабатываем возможные ошибки
var Msg;
if (e !=0) Msg="Error - "+e.description
else Msg="Ok";
WScript.Echo(Msg);
}
}
//рекурсивный вызов
LoopSubFolders (CurFldr,DeepCount);
}//end for
}//end if
}
//********************************************************************************
//
//
//********************************************************************************
//Заглушка
//********************************************************************************
//здесь будет код, получения из параметров командной строки
// 1)наименования расспространяемого файла
// 2)наименования каталога в каждом профиле, в который будет копироваться распространяемый файл
//********************************************************************************
var ScriptName = "Обновление рабочего меню.lnk",
FldrName = "Главное меню"; // Имя искомой подпапки в профиле (в нее будем копировать файл-ярлык)
//********************************************************************************
**
//********************************************************************************
*
//Объявляем глобальные переменные
//********************************************************************************
*
var FSO, // объект FileSystemObject
Path2Scripts, // Путь к распростроняемому файлу (предполагается, что файлы лежат в той же папке, что и этот файл)
DeepCount, //Счетчик глубины рекурсии
DeepLimit, //Ограничение глубины рекурсии
PolF; // Корень, с которого начинается поиск и распространение файлов по низлежащим папкам
//********************************************************************************
*
PolF = "\\\\DC\\UserFolders\\OZI"; ////
// Создаем объект FileSystemObject;
FSO = WScript.CreateObject("Scripting.FileSystemObject");
DeepCount=0;
Path2Scripts = FSO.GetParentFolderName(FSO.GetFile(WScript.ScriptFullName));
// Ограничение глубины рекурсивных вызовов
DeepLimit=4;
LoopSubFolders(PolF,DeepCount);
Ивентаризация всех машин в домене.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
dim strclass, objAD, obj
dim invdate
dim constmb, constgb, sizegb
dim compname, temp, compad
constmb=1048576
constgb=1073741824
strclass = array( "win32_ComputerSystem", "win32_bios", "win32_processor",_
"win32_diskdrive", "win32_videocontroller", "win32_NetworkAdapter",_
"win32_sounddevice", "win32_SCSIController", "win32_printer")
set objAD=getobject("LDAP://CN=Computers,DC=aaa,DC=bbb,DC=ccc")
objAD.filter=array("computer")
on error resume next
for each obj in objAD
CompAD=right(obj.name, len(obj.name)-3)
invdate = date
temp="<html>"+chr(10)+"Дата сбора: " & invdate & "<table>"+chr(10)
compname=""
' on error resume next
set objWMIService = GetObject("winmgmts://"&CompAD&"/root\cimv2")
i=0
s=0
d=0
q=0
' sizegb=""
for a=0 to 8
Set colitems = objwmiservice.instancesof(strclass(a))
for each objitem in colitems
select case a
case 0
temp=temp+"<tr><td>"
temp=temp+"Имя компьютера"+"</td><td>"+objitem.name+ "</td>" + chr(10)
temp=temp+"</tr>"+chr(10)
temp=temp+"<tr><td>"
temp=temp+"Оперативная память"+"</td><td>"+cstr(round(objitem.totalphysicalmemory/constmb))+ " MB</td>" + chr(10)
temp=temp+"</tr>"+chr(10)
temp=temp+"<tr><td>"
temp=temp+"Модель компьютера"+"</td><td>"+objitem.model+ "</td>" + chr(10)
temp=temp+"</tr>"+chr(10)
compname=objitem.name
case 1
temp=temp+"<tr><td>"
temp=temp+"Материнская плата"+"</td><td>"+objitem.SMBIOSBIOSVersion+"</td>"+chr(10)
temp=temp+"</tr>"+chr(10)
temp=temp+"<tr><td>"
temp=temp+"BIOS"+"</td><td>" + objitem.caption+"</td>"+chr(10)+"<td>"+chr(10)+"</td>"
temp=temp+"</tr>"+chr(10)
case 2
s=s+1
temp=temp+"<tr>"+chr(10)+"<td>"
temp=temp+"Процессор"+cstr(s)+"</td>"+chr(10)+"<td>"+objitem.name+" Частота "+cstr(objitem.CurrentClockSpeed)+chr(10)+"</td>"
temp=temp+"</tr>"+chr(10)
case 3
i=i+1
temp=temp+"<tr>"+chr(10)+"<td>"
if objitem.size > 0 then ' = nill then
sizegb=cstr(round(objitem.size/constgb,2))
else
sizegb=cstr(0)
end if
temp=temp+"Жесткий диск "+cstr(i)+"</td>"+chr(10)+"<td>"+objitem.model + " " + sizegb + " GB</td>" + chr(10)
temp=temp+"</tr>"+chr(10)
case 4
temp=temp+"<tr>"+chr(10)+"<td>"
temp=temp+"Видеоконтролер"+"</td>"+chr(10)+"<td>"+objitem.caption+chr(10)+"</td>"
temp=temp+"</tr>"+chr(10)
case 5
if objitem.adaptertypeid=0 and objitem.netconnectionstatus=2 then
temp=temp+"<tr>"+chr(10)+"<td>"
temp=temp+"Сетевой адаптер"+"</td>"+chr(10)
temp=temp+"<td>"+objitem.name+chr(10)+"</td>"
temp=temp+"</tr>"+chr(10)
end if
case 6
temp=temp+"<tr>"+chr(10)+"<td>"
temp=temp+"Звуковая карта"+"</td>"+chr(10)
temp=temp+"<td>"+objitem.caption+chr(10)+"</td></tr>"+chr(10)
case 7
temp=temp+"<tr>"+chr(10)+"<td>"
temp=temp+"SCSI Адаптер"+"</td>"+chr(10)
temp=temp+"<td>"+objitem.manufacturer+" "+objitem.caption+chr(10)+"</td></tr>"+chr(10)
case 8
d=d+1
temp=temp+"<tr>"+chr(10)+"<td>"
temp=temp+"Принтер "+cstr(d)+"</td>"+chr(10)+"<td>"+objitem.name+chr(10)+"</td>"
temp=temp+"</tr>"+chr(10)
end select
next
next
'Заключительная часть
temp=temp+"</table></html>"
'Запись файла
Dim fso, tf
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("\\servak\comp\"&compname&".htm", True)
tf.Write (temp)
tf.Close
next
Автор: Nazim May 8 2008, 16:20
Как этими скриптами воспользоваться ? Если не трудно напиши. спс.
Открываеш блокнот, копируеш туда код и сохраняеш документ с расширением .vbs.
Далее если сеть без доменов копируеш этот файлик в автозагрузку каждому ПК. Если сеть с доменом, то создаеш груповую политику (в AD), где в параметрах автозагрузки вставляеш данный файл. Далее при подключении или перезагрузке учетной записи будет выполняться скрипт
Автор: Alex_GR May 8 2008, 16:25
(Nazim @ May 8 2008, 17:20)
Открываеш блокнот, копируеш туда код и сохраняеш документ с расширением .vbs.
Далее если сеть без доменов копируеш этот файлик в автозагрузку каждому ПК. Если сеть с доменом, то создаеш груповую политику (в AD), где в параметрах автозагрузки вставляеш данный файл. Далее при подключении или перезагрузке учетной записи будет выполняться скрипт
ок.
есть два скрипта - разницы не вижу
1.Determining When an Account Expires
Returns the expiration date for a user account.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
On Error Resume Next
Set objUser = GetObject _
("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com")
dtmAccountExpiration = objUser.AccountExpirationDate
If err.number = -2147467259 Or _
dtmAccountExpiration = "1/1/1970" Then
WScript.echo "No account expiration specified"
Else
WScript.echo "Account expiration:" & _
objUser.AccountExpirationDate
End If
2. Determining When a User Account Expires
Reports the date that the MyerKen Active Directory user account expires.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
On Error Resume Next
Set objUser = GetObject _
("LDAP://cn=MyerKen,ou=Management,dc=NA,dc=fabrikam,dc=com")
dtmAccountExpiration = objUser.AccountExpirationDate
If Err.Number = -2147467259 Or dtmAccountExpiration = "1/1/1970" Then
WScript.Echo "No account expiration specified"
Else
WScript.Echo "Account expiration: " & objUser.AccountExpirationDate
End If
я их кинул в файлик VBS, подставил свои параметры и ......
не увидел результата.просьба протестировать и отписаться.
проблема была в том, что онсмотрит по конкретной учетке, а весь OU не смотрит.
кто может скрипт подправить ??? Всем спс.
Автор: Nazim May 8 2008, 16:57
Пробовать правда времени нету, но попробую и так понять
Сеть у тебя какая?(домен или)
Проверяеш где? И что именно меняеш в скрипте (нужно ж указывать учетную запись, домен и прочее)?
Автор: klez May 8 2008, 17:01
Cкрипт рекурсивно устанавливает всем пользователям домена атрибут "User must change password on next logon"
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Dim strMyOU
Dim strMyDomain
Dim objOU, objUser
Dim strContainer, strLastUser
strMyOU = "argo"
strMyDomain = "DC=argo,DC=com"
sub recurs(ou)
strContainer = "OU="+ou+"," + strMyDomain
set objOU = GetObject("LDAP://" & strContainer )
For each objUser in objOU
strLastUser = objUser.Get ("name")
If objUser.Class="organizationalUnit" Then
recurs(strLastUser+", OU="+ou)
Elseif objUser.Class="user" Then
objUser.Put "pwdLastSet", 0
objUser.SetInfo
end if
next
end Sub
recurs strMyOU
WScript.Quit
P.S. Ддля корректной работы необходимо в переменной strMyDomain определить имя домена с точки зрения LDAP - т.е. все точки заменить на "DC=". Таким образом, домен argo.com превращается в DC=argo,DC=com в переменную strMyOU необходимо поместить наименование Organization Unit а, юзеров которого необходимо подвергнуть процедуре изменения пароля.
Автор: metalolom May 8 2008, 20:27
(Alex_GR @ May 8 2008, 17:25)
я их кинул в файлик VBS, подставил свои параметры и ...... не увидел результата.
просьба протестировать и отписаться.
проблема была в том, что онсмотрит по конкретной учетке, а весь OU не смотрит.
кто может скрипт подправить ??? Всем спс.
Например так:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
'Указываем домен
Const strDomainName="<имя домена например domain.com>"
'Указываем OU в AD, внутри которой мы будем искать
Const strStartOU="Domain Users"
strDomainDN="DC="&Replace(strDomainName,".",",DC=")
'---------------------Получение данных--------------------
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"
objCommand.Properties("Page Size")=9000
Set objRecordSet = objCommand.Execute
'------Индексирование --------
While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
dtmAccountExpiration = objUser.AccountExpirationDate
If err.number = -2147467259 Or _
dtmAccountExpiration = "1/1/1970" Then
WScript.echo "No account expiration specified"
Else
WScript.echo "Account expiration:" & _
objUser.AccountExpirationDate
objRecordset.MoveNext
End If
Wend
objConnection.Close
Автор: metalolom May 9 2008, 14:45
Предлагаю тему закрепить.
Автор: klez May 12 2008, 9:21
Получение SID (а) компьютера из AD
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
On Error Resume Next
Dim Tmp, x, b, Sid
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objCmp = GetObject("LDAP://" & strComputerDN)
Sid = objCmp.objectSID
gSID = "S-1-5-"&Convert(16,19)&"-"&Convert(12,15)&"-"&Convert(8,11)&"-"&Convert(4,7)&"-"&Convert(0,3)
Set objGroup = Nothing
function Convert(u,l)
Tmp = ""
For x = UBound(Sid)-u to UBound(Sid)-l Step -1
b = AscB(MidB(SID, x + 1))
Tmp = Tmp & Hex(b \ 16) & Hex(b And 15)
Next
Convert = Clng("&H" & Tmp)
end function
wscript.echo(gSID)
Поиск аккаунтов в ActiveDirectory с просроченными паролями
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
on Error resume next
DC=getObject("LDAP://RootDSE").get("defaultNamingContext")
dom=getObject("LDAP://" & DC).get("Name")
pwAge=getObject("WinNT://" & dom).get("MaxPasswordAge")/86400
set objConnection=createObject("ADODB.Connection")
objConnection.open "Provider=ADsDSOObject;"
set objCmd=createObject("ADODB.Command")
objCmd.ActiveConnection=objConnection
' -- Command for searching computer accounts
'cmd="<LDAP://" & DC & ">;(objectClass=computer);distinguishedName,samAccountName;subtree"
' -- Command for searching user accounts
cmd="<LDAP://" & DC & ">;(objectCategory=person);distinguishedName,samAccountName;subtree"
objCmd.CommandText=cmd
set col=objCmd.execute
if col.recordCount>0 then
col.moveFirst
while not col.EOF
dn=col.fields(0).value
acc=col.fields(1).value
set obj=getObject("LDAP://" & dn)
accCtrl=obj.get("userAccountControl")
if (accCtrl and &h10000)=0 then
pwChg=obj.PasswordLastChanged
if (Err.Number<>0) then
E=CStr(Err.Number) & " " & Err.Description
' WScript.echo acc & space(16-len(acc)) & " - Error : " & E
Err.clear
else
if (now-pwChg)>pwAge then
WScript.echo acc & space(16-len(acc)) & " - Expired : " & (pwChg+pwAge)
else
' WScript.echo acc & space(16-len(acc)) & " - Expire on : " & (pwChg+pwAge)
end if
end if
else
' WScript.echo acc & space(16-len(acc)) & " - Never Expire"
end if
col.moveNext
wend
end If
objConnection.close
Если NetBIOS имя домена отличается от DNS до первой точки, то руками вместо строки
dom=getObject("LDAP://" & DC).get("Name") присвоить нужное значение
Автор: Alex_GR May 12 2008, 10:45
(metalolom @ May 8 2008, 21:27)
Например так:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
'Указываем домен
Const strDomainName="<имя домена например domain.com>"
'Указываем OU в AD, внутри которой мы будем искать
Const strStartOU="Domain Users"
strDomainDN="DC="&Replace(strDomainName,".",",DC=")
'---------------------Получение данных--------------------
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"
objCommand.Properties("Page Size")=9000
Set objRecordSet = objCommand.Execute
'------Индексирование --------
While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
dtmAccountExpiration = objUser.AccountExpirationDate
If err.number = -2147467259 Or _
dtmAccountExpiration = "1/1/1970" Then
WScript.echo "No account expiration specified"
Else
WScript.echo "Account expiration:" & _
objUser.AccountExpirationDate
objRecordset.MoveNext
End If
Wend
objConnection.Close
очень удачный "например".
только есть два "НО" - скрипт не показывает ФОИ и не совсем получилось с OU (у меня путь длиннее чем один юнит).
и вопрос: поиск внутри OU только пользователей? а если внутри есть ещё OU ? - смотрит все
с этим я разобрался.
Как сделать, чтобы скрипт смотрел только те учетки у которых в будущем закончится скор действия ??
ну и вывод в файл.спс огромное
Автор: klez May 12 2008, 11:09
Скрипт опрашивает компьютеры домена на предмет того, какой пользователь залогинен в данный момент на каждом компьютере
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Set objRoot = GetObject("LDAP://RootDSE")
strDomainName = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing
strComputer = ""
Dim fso
Dim file
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile ("logged_user_list.txt", 2, True)
Set objShell = CreateObject("WScript.Shell")
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://" & strDomainName & "'" _
& "Where objectClass ='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
'****************************************************************************
******
objRecordSet.MoveFirst
Wscript.Echo "Processing information. This might take several minutes."
Do Until objRecordSet.EOF
strComputer = objRecordSet.Fields("Name").Value
' Проверяем доступность компьютера с помощью команды PING
' и анализа выходного потока
Set objScriptExec = objShell.Exec("%comspec% /c ping.exe -n 1 " & strComputer)
strPingResults = LCase(objScriptExec.StdOut.ReadAll)
' Если компьютер отвечает, подключаемся к его WMI
If InStr(strPingResults, "ttl=") Then
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
' Выводим список залогиненных пользователей в файл и на экран
For Each objComputer in colComputer
Wscript.Echo "Logged-on " &strComputer & " user: " & objComputer.UserName
file.WriteLine("Logged-on " &strComputer & " user: " & objComputer.UserName)
Next
objRecordSet.MoveNext
' Если компьютер не отвечает - выводим сообщение и перемещаемся к следующему
Else
WScript.Echo(strComputer & ": Не отвечает...")
objRecordSet.MoveNext
End If
Loop
Этот скрипт просматривает системный журнал Безопасность и если обнаружит в нём запись об изменении настроек браузера, то уведомит об этом.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{"{impersonationLevel=impersonate,(Security)}!\\" & strComputer & _
"\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA " _
& "'Win32_NTLogEvent' AND TargetInstance.EventCode = '560' AND " _
& "TargetInstance.Logfile = 'Security' GROUP WITHIN 2")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
strAlertToSend = "Internet Explorer security settings have been " & _
"changed."
Wscript.Echo strAlertToSend
Loop
Автор: metalolom May 13 2008, 13:25
(Alex_GR @ May 12 2008, 11:45)
очень удачный "например".
только есть два "НО" - скрипт не показывает ФОИ и не совсем получилось с OU (у меня путь длиннее чем один юнит).
Например печатеть свойство DisplayName, в скрпите ниже оно будет.
Насчёт OU в скрипте есть строчка запроса к LDAP:
objCommand.CommandText = "<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"
из чего видно что в переменную strStartOU ты записываешь нужный тебе путь кроме первой "OU="
(Alex_GR @ May 12 2008, 11:45)
Как сделать, чтобы скрипт смотрел только те учетки у которых в будущем закончится скор действия ??
для вывода в файл запусти скрипт так:
Cscript.exe \Имя скрипта\ > \путь и имя файла куда тебе нужно вывести данные\
Например:
Cscript.exe script.vbs > c:\expiration.log
В этом же скрипте за дату отвечает свойство:
dtmAccountExpiration сравниваешь его с нужной тебе датой и получаешь только тебу у кого дата истечения такая, как тебе надо.
Вот "доделаный например":)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
'Указываем домен
Const strDomainName="<имя домена например domain.com>"
'Указываем OU в AD, внутри которой мы будем искать
Const strStartOU="Domain Users"
strDomainDN="DC="&Replace(strDomainName,".",",DC=")
'---------------------Получение данных--------------------
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"
objCommand.Properties("Page Size")=9000
Set objRecordSet = objCommand.Execute
'------Индексирование --------
While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
dtmAccountExpiration = objUser.AccountExpirationDate
If dtmAccountExpiration > "01.02.1970" Then
WScript.echo "We will have expriration at "&dtmAccountExpiration&" for user "&objUser.DisplayName
End If
objRecordset.MoveNext
Wend
objConnection.Close
Автор: klez May 13 2008, 14:35
Скрипт ищет по всем контроллерам пользователей, которые не логинились уже более 90 дней и дизейблит их. После чего скидывает в файл их имена в форме Distinguished Name:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery
Dim adoRecordset, objDC
Dim strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs()
Dim strDN, dtmDate, objDate, lngDate, objList, strUser
Dim strBase, strFilter, strAttributes, lngHigh, lngLow
Dim intUAC, objCurrentUser
' Использование объектов словаря чтоб потом узнать последние логоны пользователя.
Set objList = CreateObject("Scripting.Dictionary")
objList.CompareMode = vbTextCompare
' Получение местного времени с реестра.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
& "TimeZoneInformation\ActiveTimeBias")
If (UCase(TypeName(lngBiasKey)) = "LONG") Then
lngBias = lngBiasKey
ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
lngBias = 0
For k = 0 To UBound(lngBiasKey)
lngBias = lngBias + (lngBiasKey(k) * 256^k)
Next
End If
' Получение конфигурациы и доменов из объектов RootDSE.
Set objRootDSE = GetObject("LDAP://RootDSE")
strConfig = objRootDSE.Get("configurationNamingContext")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
' Использование ADO чтобы искать в Active Directory ObjectClass nTDSDSA.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection
strBase = "<LDAP://" & strConfig & ">"
strFilter = "(objectClass=nTDSDSA)"
strAttributes = "AdsPath"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 60
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute
k = 0
Do Until adoRecordset.EOF
Set objDC = _
GetObject(GetObject(adoRecordset.Fields("AdsPath")).Parent)
ReDim Preserve arrstrDCs(k)
arrstrDCs(k) = objDC.DNSHostName
k = k + 1
adoRecordset.MoveNext
Loop
adoRecordset.Close
' Получение атрибута последнего логона для каждого пользователя в контроллерах домена.
For k = 0 To Ubound(arrstrDCs)
strBase = "<LDAP://" & arrstrDCs(k) & "/" & strDNSDomain & ">"
strFilter = "(&(objectCategory=person)(objectClass=user))"
strAttributes = "distinguishedName,lastLogon"
strQuery = strBase & ";" & strFilter & ";" & strAttributes _
& ";subtree"
adoCommand.CommandText = strQuery
On Error Resume Next
Set adoRecordset = adoCommand.Execute
If (Err.Number <> 0) Then
On Error GoTo 0
Wscript.Echo "Контроллер домена MGSM.RU не найден: " & arrstrDCs(k)
Else
On Error GoTo 0
Do Until adoRecordset.EOF
strDN = adoRecordset.Fields("distinguishedName")
lngDate = adoRecordset.Fields("lastLogon")
On Error Resume Next
Set objDate = lngDate
If (Err.Number <> 0) Then
On Error GoTo 0
dtmDate = #1/1/1601#
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0 ) Then
dtmDate = #1/1/1601#
Else
dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow)/600000000 - lngBias)/1440
End If
End If
If (objList.Exists(strDN) = True) Then
If (dtmDate > objList(strDN)) Then
objList.Item(strDN) = dtmDate
End If
Else
objList.Add strDN, dtmDate
End If
adoRecordset.MoveNext
Loop
adoRecordset.Close
End If
Next
' Создание логов
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objScriptFile = objFSO.OpenTextFile("c:\scripts\Account_lockout.vbs", _
ForReading)
Set objCommentFile = objFSO.OpenTextFile("c:\scripts\Lockedout_users.txt", _
ForWriting, TRUE)
'Сравнение дат
dblCurrentdate = Cdbl(date)
Const ADS_UF_ACCOUNTDISABLE = 2
Const ForReading = 1
Const ForWriting = 2
For Each strUser In objList.Keys
dblUserdate = Cdbl(objList.Item(strUser))
If (dblCurrentdate - dblUserdate > 90) Then
Set objCurrentUser = GetObject ("LDAP://" & strUser & "")
intUAC = objCurrentUser.Get("userAccountControl")
objCurrentUser.Put "userAccountControl", intUAC OR ADS_UF_ACCOUNTDISABLE
objCurrentUser.SetInfo
objCommentFile.Write strUser & VbCrLf
' Wscript.Echo strUser & " заблокирован"
Else
' Wscript.Echo strUser & " недавно логинился"
End if
Next
'Закрытие логов
objScriptFile.Close
objCommentFile.Close
' Очистка.
adoConnection.Close
Set objRootDSE = Nothing
Set adoConnection = Nothing
Set adoCommand = Nothing
Set adoRecordset = Nothing
Set objDC = Nothing
Set objDate = Nothing
Set objList = Nothing
Set objShell = Nothing
Set objCurrentUser = Nothing
Автор: 3in May 16 2008, 15:53
командный файл (closefl.bat ) закрывает все файлы, открытые пользователями в сети на вашем компьютере
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
if exist d:\files.txt del d:\files.txt
net file > d:\files.txt
for /f "skip=5 tokens=1" %%i in (d:\files.txt) do net file %%i /close
del d:\files.txt
Автор: pekshin May 22 2008, 8:28
А есть ли скрипт, для разблокировки компа после определенного времени простоя компа заблокированым?
Автор: Alex_GR May 26 2008, 16:26
1. Скрипт для уведомления пользователя об окончании действия учетки в домене за 10 дней (параметр можно изменить в 27 строке - dtmDaysToExpire > 10 ).
Бросать в логон.
В 5-й и 7-й строке подставить свои значения для домена и подразделения.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
' Script name: WarnUserAboutAccountExpiration.vbs
' Created by Alex_GR - 26/05/2008
'Указываем домен
Const strDomainName="domen.com"
'Указываем OU в AD, внутри которой мы будем искать
Const strStartOU="Domain Users"
strDomainDN="DC="&Replace(strDomainName,".",",DC=")
On Error Resume Next
'Option Explicit
Dim strUserName, oNetwork, aConnection, aCommand, aResult, strDN, dtmAccountExpiration, dtmDaysToExpire, oShell
Set oNetwork = CreateObject("Wscript.network")
Set oShell = CreateObject("Wscript.shell")
strUserName = oNetwork.UserName
Set aConnection = CreateObject("ADODB.Connection")
Set aCommand = CreateObject("ADODB.Command")
aConnection.Provider = "ADsDSOObject"
aConnection.Open
aCommand.ActiveConnection = aConnection
aCommand.CommandText="<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=User)(samAccountName=" & strUserName & "));distinguishedName;subTree"
Set aResult = aCommand.Execute()
strDN = aResult.Fields("distinguishedName")
Set objUser = GetObject("LDAP://" & strDN)
dtmAccountExpiration = objUser.AccountExpirationDate
dtmDaysToExpire = DateDiff("d", Now, dtmAccountExpiration)
If Err.Number = -2147467259 Or dtmAccountExpiration = "1/1/1970" Or dtmAccountExpiration = "01/01/1601 03:00:00" Or dtmAccountExpiration = "01.01.1601 03:00:00" Or dtmAccountExpiration = "1.1.1970" Or dtmDaysToExpire > 10 Then
' Можно выводить другое сообщение, если найдено соответствие условию
' MsgBox "Всe good
"
Else
oShell.Popup "До окончания испытательного срока осталось " & dtmDaysToExpire & " дней!" & vbCrLf & _
"Учётная запись действительна до " & dtmAccountExpiration & vbCrLf & _
"Просьба об этом уведомить Вашего руководителя.", 60, "Уведомление от ИТ Департамента", 48+0
End If
2. Скрипт для поиска в активном каталоге пользователей с ограниченым сроком действия учётки и экспорта в файл.
В 5-й и 7-й строке подставить свои значения для домена и подразделения.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
' Script name: UserAccountExpirationDate.vbs
' Created by Alex_GR - 12/05/2008
'Указываем домен
Const strDomainName="domen.com"
'Указываем OU в AD, внутри которой мы будем искать
Const strStartOU="Domain Users"
strDomainDN="DC="&Replace(strDomainName,".",",DC=")
---------------------Получение данных--------------------
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://OU="&strStartOU&","&strDomainDN&">;(&(objectCategory=person)(objectClass=user));ADsPath;subtree"
objCommand.Properties("Page Size")=9000
Set objRecordSet = objCommand.Execute
Const ForAppending = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile ("c:\UserAccountExpirationDate.txt", ForAppending, True)
'------Индексирование --------
While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
dtmAccountExpiration = objUser.AccountExpirationDate
If err.number = -2147467259 Or dtmAccountExpiration = "01/01/1970" Or dtmAccountExpiration = "01/01/1601 03:00:00" Or dtmAccountExpiration = "01.01.1601 03:00:00" Or dtmAccountExpiration = "01.01.1970" Then
'Вывод сообщением
'WScript.echo ""
'запись в файл пустого значения
objTextFile.Write ""
objRecordset.MoveNext
Else
'Вывод сообщением
' WScript.echo objUser.displayName & " - учётка действительна до: " & objUser.AccountExpirationDate
'Запись в файл
objTextFile.WriteLine objUser.displayName & " - учётка действительна до: " & objUser.AccountExpirationDate
objRecordset.MoveNext
End If
Wend
objConnection.Close
WScript.echo "Экспорт закончен, файл создан - C:\UserAccountExpirationDate.txt"
3. Справочник по VBS в вормате CHM.
http://upload.com.ua/direct/900261120/script_repository_1_1.chm
Автор: Nazim May 30 2008, 18:23
Может кто знает, кто встречал - нужен скрипт рассылки сообщений типа сохраните все данные. Конкретно для ситуации нужно вырубить файлсервер, так чтобы не бегать по офису а просто запустить скриптик. Знаю что можно с командной строки воспользоваться командой net send , но это чуток не то. Кто что скажет?
Автор: olexande Jun 3 2008, 10:28
(Nazim @ May 30 2008, 19:23)
Может кто знает, кто встречал - нужен скрипт рассылки сообщений типа сохраните все данные. Конкретно для ситуации нужно вырубить файлсервер, так чтобы не бегать по офису а просто запустить скриптик. Знаю что можно с командной строки воспользоваться командой
net send , но это чуток не то. Кто что скажет?
У себя в сети распространил внутренний чат, где делаю срочные объявления ...
net send может и на группы/домены делать рассылку ...
правда на компах обычно последнее время эта служба останавливается ...
Автор: Fanta Jun 13 2008, 14:31
(klez @ May 8 2008, 15:55)
P.S. Еще нужно?
Так.
В кого є скрипт який би робив те що написано http://forum.0day.kiev.ua/index.php?showtopic=75594 ??
Автор: klez Jun 13 2008, 16:34
Такого скрипта не встречал.
Но думаю что если это делать действительно автоматически, то без расширения схемы AD, тут не обойтись.IMHO
Автор: Fanta Jun 18 2008, 13:21
(klez @ Jun 13 2008, 17:34)
Такого скрипта не встречал.
Но думаю что если это делать действительно автоматически, то без расширения схемы AD, тут не обойтись.IMHO
Скрипт який перевіряеє нових юзерів і відсилає ім лист з вказаним текстом
(переверяє з тією ж періодичністю з якою виконуеться скрипт тобто та яка вказана в Scheduled Tasks)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
'Created by Mike Ruman 8/13/05
'Sends an email to accounts created today.
Dim StrDate, CurrentUTC
'Create the current date and time stamp for query for day before last
CurrentUTC = DatePart("yyyy", Date)
'now add Month in mm if only M add leading 0
if DatePart("m" , Now) < 10 then
CurrentUTC = CurrentUTC & 0 & DatePart("m" , Now)
else
CurrentUTC = CurrentUTC & DatePart("m" , Now)
end if
'now add Day in dd if only d add leading 0
if DatePart("d" , Now) < 10 then
'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now - X) where X = # of days
CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now)
else
'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & DatePart("d" , Now - X) where X = # of days
CurrentUTC = CurrentUTC & DatePart("d" , Now)
end if
' Tag hour, minute, second on
strDate = CurrentUTC&"000001.0Z"
'Create AD Connection
Set oConnection1 = CreateObject("ADODB.Connection")
Set oCommand1 = CreateObject("ADODB.Command")
oConnection1.Provider = "ADsDSOObject" ' This is the ADSI OLE-DB provider name
oConnection1.Open "Active Directory Provider"
' Create a command object for this connection.
Set oCommand1.ActiveConnection = oConnection1
'Set Query definition
' тут задаем доменные параметры берем из AD
oCommand1.CommandText = "select mail from 'LDAP://DC=it, DC=local' WHERE objectCategory='Person' AND objectClass='user'AND msExchHideFromAddressLists<>'True' AND whenCreated>='" & strDate & "'"
oCommand1.Properties("Page Size") = 30000
' Execute the query.
Set rs = oCommand1.Execute
rs.movefirst
'Create the loop of results
Do Until rs.EOF = True
'Create Email
' настройки письма для пользователя
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "
[email protected]"
objEmail.To = rs.Fields("mail")
'Optional BCC field
'objEmail.BCC = "
[email protected]"
objEmail.Subject = "A welcome message from Exchange"
objEmail.HTMLbody = "Добро пожаловать в ........."
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = 1049
'objMessage.BodyPart.CharSet = "windows-1251".
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext") = true
'Optional Add an attachment
'objEmail.AddAttachment "C:\new_hire_audio_message.wav"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing ") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver ") = _
"ExchangeServer" 'Replace ExchangeServer with server IP or name
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport ") = 25
objEmail.Configuration.Fields.Update
'Optional - Read the message before it's sent
'MsgBox objEmail.GetStream.ReadText
objEmail.Send
rs.movenext
Loop
'Close AD Connection
oConnection1.close
лише одна трабла - мені не вдалося подружити його з кирилицею
Буду дуже вдячний якщо хтось пофіксить це!
Автор: Alex_GR Jun 19 2008, 17:57
(Fanta @ Jun 18 2008, 14:21)
Скрипт який перевіряеє нових юзерів і відсилає ім лист з вказаним текстом
(переверяє з тією ж періодичністю з якою виконуеться скрипт тобто та яка вказана в Scheduled Tasks)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
'Created by Mike Ruman 8/13/05
'Sends an email to accounts created today.
Dim StrDate, CurrentUTC
'Create the current date and time stamp for query for day before last
CurrentUTC = DatePart("yyyy", Date)
'now add Month in mm if only M add leading 0
if DatePart("m" , Now) < 10 then
CurrentUTC = CurrentUTC & 0 & DatePart("m" , Now)
else
CurrentUTC = CurrentUTC & DatePart("m" , Now)
end if
'now add Day in dd if only d add leading 0
if DatePart("d" , Now) < 10 then
'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now - X) where X = # of days
CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now)
else
'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & DatePart("d" , Now - X) where X = # of days
CurrentUTC = CurrentUTC & DatePart("d" , Now)
end if
' Tag hour, minute, second on
strDate = CurrentUTC&"000001.0Z"
'Create AD Connection
Set oConnection1 = CreateObject("ADODB.Connection")
Set oCommand1 = CreateObject("ADODB.Command")
oConnection1.Provider = "ADsDSOObject" ' This is the ADSI OLE-DB provider name
oConnection1.Open "Active Directory Provider"
' Create a command object for this connection.
Set oCommand1.ActiveConnection = oConnection1
'Set Query definition
' тут задаем доменные параметры берем из AD
oCommand1.CommandText = "select mail from 'LDAP://DC=it, DC=local' WHERE objectCategory='Person' AND objectClass='user'AND msExchHideFromAddressLists<>'True' AND whenCreated>='" & strDate & "'"
oCommand1.Properties("Page Size") = 30000
' Execute the query.
Set rs = oCommand1.Execute
rs.movefirst
'Create the loop of results
Do Until rs.EOF = True
'Create Email
' настройки письма для пользователя
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "
[email protected]"
objEmail.To = rs.Fields("mail")
'Optional BCC field
'objEmail.BCC = "
[email protected]"
objEmail.Subject = "A welcome message from Exchange"
objEmail.HTMLbody = "Добро пожаловать в ........."
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = 1049
'objMessage.BodyPart.CharSet = "windows-1251".
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext") = true
'Optional Add an attachment
'objEmail.AddAttachment "C:\new_hire_audio_message.wav"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing ") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver ") = _
"ExchangeServer" 'Replace ExchangeServer with server IP or name
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport ") = 25
objEmail.Configuration.Fields.Update
'Optional - Read the message before it's sent
'MsgBox objEmail.GetStream.ReadText
objEmail.Send
rs.movenext
Loop
'Close AD Connection
oConnection1.close
лише одна трабла - мені не вдалося подружити його з кирилицею
Буду дуже вдячний якщо хтось пофіксить це!
Пробуй
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
'Created by Mike Ruman 8/13/05
'Sends an email to accounts created today.
Dim StrDate, CurrentUTC
'Create the current date and time stamp for query for day before last
CurrentUTC = DatePart("yyyy", Date)
'now add Month in mm if only M add leading 0
if DatePart("m" , Now) < 10 then
CurrentUTC = CurrentUTC & 0 & DatePart("m" , Now)
else
CurrentUTC = CurrentUTC & DatePart("m" , Now)
end if
'now add Day in dd if only d add leading 0
if DatePart("d" , Now) < 10 then
'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now - X) where X = # of days
CurrentUTC = CurrentUTC & 0 & DatePart("d" , Now)
else
'OPTIONAL - FOR MANY DAYS, replace line below with CurrentUTC = CurrentUTC & DatePart("d" , Now - X) where X = # of days
CurrentUTC = CurrentUTC & DatePart("d" , Now)
end if
' Tag hour, minute, second on
strDate = CurrentUTC&"000001.0Z"
'Create AD Connection
Set oConnection1 = CreateObject("ADODB.Connection")
Set oCommand1 = CreateObject("ADODB.Command")
oConnection1.Provider = "ADsDSOObject" ' This is the ADSI OLE-DB provider name
oConnection1.Open "Active Directory Provider"
' Create a command object for this connection.
Set oCommand1.ActiveConnection = oConnection1
'Set Query definition
' тут задаем доменные параметры берем из AD
oCommand1.CommandText = "select mail from 'LDAP://DC=it, DC=local' WHERE objectCategory='Person' AND objectClass='user'AND msExchHideFromAddressLists<>'True' AND whenCreated>='" & strDate & "'"
oCommand1.Properties("Page Size") = 30000
' Execute the query.
Set rs = oCommand1.Execute
rs.movefirst
'Create the loop of results
Do Until rs.EOF = True
'Create Email
' настройки письма для пользователя
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "
[email protected]"
objEmail.To = rs.Fields("mail")
'Optional BCC field
'objEmail.BCC = "
[email protected]"
objMessage.BodyPart.CharSet = "windows-1251"
objEmail.Subject = "A welcome message from Exchange"
objEmail.Textbody = "Добро пожаловать в ........."
'Optional Add an attachment
'objEmail.AddAttachment "C:\new_hire_audio_message.wav"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"ExchangeServer" 'Replace ExchangeServer with server IP or name
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
'Optional - Read the message before it's sent
'MsgBox objEmail.GetStream.ReadText
objEmail.Send
rs.movenext
Loop
'Close AD Connection
oConnection1.close
у меня вот это работает на моем Exchange
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "
[email protected]"
objEmail.To = "
[email protected]"
objEmail.BodyPart.Charset="windows-1251"
objEmail.Subject = "Тестовое сообщение"
objEmail.Textbody = "Проверка кодировки и букв і ъ ї є"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"127.0.0.1"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
Автор: Fanta Jun 20 2008, 11:17
Странно але в мене матюкаеться на
objMessage.BodyPart.CharSet = "windows-1251"
Зберігав в різних кодіровках але результат той самий
Автор: Alex_GR Jun 20 2008, 12:29
(Fanta @ Jun 20 2008, 12:17)
Странно але в мене матюкаеться на
objMessage.BodyPart.CharSet = "windows-1251"
Зберігав в різних кодіровках але результат той самий
Так при сохранении файла хоть русские буквы видно ? Или крякозяблы ?
Пробуй на других машинках..................
А у тебя что установлено в "Языки и региональные стандарты" на вкладке дополнительно ? У меня - Русский.
1. Пробуй вместо windows-1251 ставить koi8-u или koi8-r
2. У тебя в скрипте была запись - "objEmail.Configuration.Fields.Item("http://schemas.microsoft.com
/cdo/configuration/languagecode") = 1049"
Поставь кодовую страницу 0419 вместо 1049.
Автор: Alex_GR Jun 20 2008, 13:33
"Скрипт Центр" - справочник VBS в примерах от Мелкософта
http://www.freespace.com.ua/file/57099/4e1558c0/script_center.html
Автор: Fanta Jun 26 2008, 17:46
(Alex_GR @ Jun 20 2008, 13:29)
А у тебя что установлено в "Языки и региональные стандарты" на вкладке дополнительно ? У меня - Русский.
1. Пробуй вместо windows-1251 ставить koi8-u или koi8-r
2. У тебя в скрипте была запись - "objEmail.Configuration.Fields.Item("http://schemas.microsoft.com
/cdo/configuration/languagecode") = 1049"
Поставь кодовую страницу 0419 вместо 1049.
1) Так Русский
2) пробував різні кодування - ефекту 0
3) аналогічно
Я забив на кодіровку - написав текс на англійській мові
Але з*ясувалася інша трабла - в мене скрипт виконуеться кожну годину. І коли за цю годину не було створено нового юзера то скрипту не подобаеться цей кусок
rs.movefirst
'Create the loop of results
Do Until rs.EOF = True
Автор: nickemail Jun 28 2008, 23:48
Граждани а как через комндную строку открыть розшаренную папку соседнего компа с воодом логина и пароля для доступа?
Автор: metalolom Jun 30 2008, 16:07
(nickemail @ Jun 29 2008, 0:48)
Граждани а как через комндную строку открыть розшаренную папку соседнего компа с воодом логина и пароля для доступа?
через "net use" подключать/отключать шару как сетевой диск.
Автор: ramasik Aug 4 2008, 18:35
подскажите как можно добавлять в АД инфу по юзерам типа экспорт/ импорт из файла..?
например такие поля: адрес, страна, номер телефона, мобильный, номер комнаты.
можно ли это сделать? а то запаралися в ручную забивать... а ничего толкового не нашел
Автор: klez Aug 5 2008, 13:05
Да, смотрите в сторону Powershell.
Вот тут много готовых скриптов. Думаю можно будет найти то что Вам нужно(+ внести нужные изменения)
http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx
Автор: ramasik Aug 5 2008, 13:42
(klez @ Aug 5 2008, 14:05)
Да, смотрите в сторону Powershell.
Вот тут много готовых скриптов. Думаю можно будет найти то что Вам нужно(+ внести нужные изменения)
http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx
сенкс -- вот нашел может кому пригодится -- именно то что нужно
http://support.microsoft.com/kb/276440/
ЗЫ осталось с синтаксисом разобраться и проверить на тестовом серваке
Автор: metalolom Aug 5 2008, 13:49
(ramasik @ Aug 4 2008, 19:35)
подскажите как можно добавлять в АД инфу по юзерам типа экспорт/ импорт из файла..?
например такие поля: адрес, страна, номер телефона, мобильный, номер комнаты.
можно ли это сделать? а то запаралися в ручную забивать... а ничего толкового не нашел
гугли по словам ldif, csvde это встроеные утилиты, ну можно ещё скрипты писать на WSH/powershell
Автор: boomerman Sep 15 2008, 14:44
Есть вопрос к великим гуру! Как запретить юзеру с админскими правами менять настройки сети (шлюз, днс). Заранее спасибо
Автор: olexande Sep 16 2008, 13:01
1. забрать у него права админа...
2. выдать ему настроуки по DHCP и на шлюзе сделать привязку MAC-IP. Если и сменит, то хоть не сможет выйти в и-нет ... По началу по бесится, после вернёт все обратно на твои настройки ...
Автор: Alex_GR Sep 29 2008, 8:00
(boomerman @ Sep 15 2008, 15:44)
Есть вопрос к великим гуру! Как запретить юзеру с админскими правами менять настройки сети (шлюз, днс). Заранее спасибо
Через груповые политики.
В "Конфигурация Пользователя" - "Адмистративных шаблонах" есть раздел "Сеть" - "Сетевые подключения".
Автор: Leopold Oct 1 2008, 16:40
Уважаемые господа, помогите - как сделать так, чтоб при включении компа, отключалась служба автозагрузки обновлений. Потому что доменные политики применяются, как вы понимаете после каждой перезагрузки компа. И если честно надоело отключать эту службу.
Я понимаю что скрипт ну или батник написать можно, но так как я в этом не силен - то очень прошу вас.
На вопрос зачем мне это - отвечаю - залазит постоянно обновление, и вылетает ошибка INETINFO.EXE. При чем решить програмно я ошибку не смог
Автор: Nazim Oct 1 2008, 16:52
(nickemail @ Jun 29 2008, 0:48)
Граждани а как через комндную строку открыть розшаренную папку соседнего компа с воодом логина и пароля для доступа?
net use m: \\адрес сервера\ пароль(это пароль) /user:имя(это имя пользователя)
(Leopold @ Oct 1 2008, 17:40)
Уважаемые господа, помогите - как сделать так, чтоб при включении компа, отключалась служба автозагрузки обновлений. Потому что доменные политики применяются, как вы понимаете после каждой перезагрузки компа. И если честно надоело отключать эту службу.
Я понимаю что скрипт ну или батник написать можно, но так как я в этом не силен - то очень прошу вас.
На вопрос зачем мне это - отвечаю - залазит постоянно обновление, и вылетает ошибка INETINFO.EXE. При чем решить програмно я ошибку не смог
Насчет скрипта не подскажу, но что мешает сделать один раз в груповых политиках домена и забыть, отключить автоматическое обновление. Конфигурация компютера- Административные шаблоны-Компоненты Windows-Windows Update
Автор: Leopold Oct 2 2008, 8:17
Забыл дописать - к контроллеру домена я доступа не имею - вот в этом то и вся проблема.
Автор: klez Oct 2 2008, 8:24
TO Leopold
Отключите автообновление в политиках локального компьютера как подсказал Nazim.
А если про скрипт, то поместить в автозагрузку(или в стартовые скрипты в GP) батник типа
@echo off
net stop wuauserv
Автор: Leopold Oct 2 2008, 8:43
To
klez
Отключить можно, но после перезагрузки доменные политики применяються наново...
Автор: klez Oct 2 2008, 9:32
TO Leonid
Тогда пропишите в стартовых скриптах батник.
P.S. Если я не ошибаюсь то локальные политики имеют более высокий приоритет чем доменные.
Автор: Leopold Oct 2 2008, 10:32
TO
klez
Я уже по ковырялся в гпедит, посмотрим что это даст...
А вот мысль с тем чтоб прописать батник - это хорошо, но проблема в том что я не умею их писать
да и поиск не сильно помогает...
Автор: klez Oct 2 2008, 10:48
TO Leopold
Я вам написал уже батник
Смотрите выше. Пост #47
сохраните этот код с расширением bat или cmd. И в GPO укажите путь к этому файлу.
В стартовых скриптах.
Автор: olexande Nov 12 2008, 14:13
Leopold
плохая идея отключать обновление ... Другой вариант правда если обновление идёт под СИСТЕМАТИЧЕСКИМ ручным контролем ...
Автор: Anykey Nov 13 2008, 23:28
(Leopold @ Oct 2 2008, 8:43)
Отключить можно, но после перезагрузки доменные политики применяються наново...
Доменные групповые политики применяются не только в момент загрузки, но и в течении каждых 90 минут работы ПК домен контроллер случайным образом накатывает политики наложенные на объекты каталога Active Directory. Потому просто закинуть скрипт в автозагрузку недостаточно. Возможно выходом будет запуск этого скрипта по расписанию, скажем, каждые 30 минут.
Автор: Jeronimo Nov 17 2008, 21:15
Всем привет. Вопрос: в домене каждому юзеру в учетной записи прикручен logon скрипт. Есть задача его убрать. Пользователей 150+.
Если это сделано политикой, то исправить не сложно. А если нет, то можно ли заставить часть скрипта из http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/usersgroups/users/ перебрать все учетные записи в OU и просто очистить поле?
Я вообще-то мало понимаю в программировании VBS, но вот это внизу я правильно надергал? Как сделать перебор по всему OU?
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Const ADS_PROPERTY_CLEAR = 1
Set objUser = GetObject _
("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com")
objUser.PutEx ADS_PROPERTY_CLEAR, "scriptPath", 0
objUser.SetInfo
Заранее спасибо.
Автор: Alex_GR Nov 18 2008, 9:38
(Jeronimo @ Nov 17 2008, 21:15)
Всем привет. Вопрос: в домене каждому юзеру в учетной записи прикручен logon скрипт. Есть задача его убрать. Пользователей 150+.
Если это сделано политикой, то исправить не сложно. А если нет, то можно ли заставить часть скрипта из http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/usersgroups/users/ перебрать все учетные записи в OU и просто очистить поле?
Я вообще-то мало понимаю в программировании VBS, но вот это внизу я правильно надергал? Как сделать перебор по всему OU?
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Const ADS_PROPERTY_CLEAR = 1
Set objUser = GetObject _
("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com")
objUser.PutEx ADS_PROPERTY_CLEAR, "scriptPath", 0
objUser.SetInfo
Заранее спасибо.
Не замарачивайся в этом случае скриптами....
Вот есть прекрасная утилита
http://upload.com.ua/direct/900548241/ADModify.rar
Автор: Jeronimo Nov 18 2008, 10:21
Спасибо. Вот именно выложенная тобой на аплоад прога с глюком каким-то, но я выкачал с сайта последнюю и заменил поле логон скрипта пробелом.
Еще раз спасибо.
Автор: Jeronimo Nov 18 2008, 16:23
Я, конечно, извиняюсь, но эта программа (ADModify) не позволяет изменить значение на пустое, то есть с ее помощью можно поставить значение, а не стереть. Изменить на несуществующее название батника, чтобы он перестал исполняться - тоже не совсем то, что я ожидал. Может все-таки проще будет скриптом? Подскажите, пожалуйста.
Автор: Jeronimo Nov 18 2008, 17:54
Все просто МЕГА просто. Поскольку это разовая операция, и у меня есть доступ на DC, то
dsquery user cn=Users,DC=это,DC=мой,DC=домен -limit 0 |dsmod user -loscr ""
(это если все, кому надо поменять, находятся в контейнере Users)
И все. Всем, вобщем,спасибо.
Автор: ups Nov 27 2008, 19:23
dsquery, конечно мощная команда, но для выполнения данной процедуры, по-моему, намного проще будет запомнить и выполнить следующей команду
NET USER username /DOMAIN /SCRIPTPATH:
Автор: olexande Dec 2 2008, 15:40
Вопрос:
Использую для резервного копирования .bat файлы со списком файлов (каталогов) которые архивировать через WinRar (отдельная строка на отдельный каталог) с последующим копированием полученных файлов на сервер. Как можно получить имя локального компа (на котором запущен .bat файл). Нужно для унификации файла backup.bat - что-бы не править для каждого компа данный файл (правится - "чей" архив ... )
d:
cd d:\BACKUP
del D:\backup\*.* /q
echo. | date > d:\backup\backup.log
echo. | time >> d:\backup\backup.log
"C:\Program Files\WinRAR\Rar.exe" a -m5 -r -t -dh -idp d:\backup\desktop.rar "D:\Desktop\*.*" >> d:\backup\backup.log
"C:\Program Files\WinRAR\Rar.exe" a -m5 -r -t -dh -idp d:\backup\docs.rar "D:\Docs\*.*" >> d:\backup\backup.log
"C:\Program Files\WinRAR\Rar.exe" a -m5 -r -t -dh -idp d:\backup\mail.rar "D:\mail\*.*" >> d:\backup\backup.log
"C:\Program Files\WinRAR\Rar.exe" a -m5 -r -t -dh -idp d:\backup\shara.rar "D:\shara\*.*" >> d:\backup\backup.log
rem Дефрагментация дисков C, D
defrag -f c:
defrag -f d:
md \\server\pbf\unknown\
copy d:\backup\*.* \\server\pbf\unknown
shutdown -s -t 300 -f -c "Архивация закончена. Выключаю компьютер."
A на каждом ПК в файле правлю "unknown" на имя ПК ...
Автор: ups Dec 2 2008, 18:03
%computername%
Автор: olexande Dec 3 2008, 9:22
А есть информация про эти "зарезервированные" переменные почитать?
Автор: ups Dec 3 2008, 10:37
Переменные среды в Cmd.exe - http://it.bakinity.biz/smart.php?cat=2&id=134
Автор: igor_loboda Dec 3 2008, 18:12
Ребят подскажите плиз,как через групповые политики или через скрипт всем юзверям проставить по дефолту английский язык при входе в профиль?
Автор: Nazim Dec 3 2008, 18:51
(igor_loboda @ Dec 3 2008, 18:12)
Ребят подскажите плиз,как через групповые политики или через скрипт всем юзверям проставить по дефолту английский язык при входе в профиль?
Попробуй в политиках Конфигурация пользователя - Административные шаблоны - Панель управления - Язык и стандарты. Сам не пробовал.
Автор: -danger- Dec 16 2008, 0:04
существует ли скрипт или батник для включения/отключения дефолтного сетевого подключения?
Автор: Nazim Dec 16 2008, 14:09
(-danger- @ Dec 16 2008, 0:04)
существует ли скрипт или батник для включения/отключения дефолтного сетевого подключения?
посмотри тут http://forum.script-coding.info/viewtopic.php?id=743, а именно скрипт, который переключает состояние указанного сетевого подключения компьютера (если включено - отключает, и наоборот)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
strNetConn = "Сетевые подключения" ' Network Connections для англ. версии ОС
strConn = "Подключение по локальной сети" ' имя или часть имени подключения
strEnable = "&Включить" ' En&able для англ. версии ОС
strDisable = "&Отключить" ' Disa&ble для англ. версии ОС
Set objShell = CreateObject("Shell.Application")
Set objCP = objShell.Namespace(3) ' Панель управления
For Each elem in objCP.Items
If elem.Name = strNetConn Then
' получение папки "Сетевые подключения"
Set colNetwork = elem.GetFolder
Exit For
End If
Next
Set Conn = Nothing
For Each clsConn in colNetwork.Items
If Instr(LCase(clsConn.name), LCase(strConn)) Then
' получение указанного подключения
Set Conn = clsConn
Exit For
End If
Next
If Conn Is Nothing Then
WScript.Echo "Network Connection not found"
WScript.Quit
End If
bEnabled = True
Set objEnable = Nothing
Set objDisable = Nothing
For Each clsVerb in Conn.verbs
' если доступен глагол "Enable", подключение отключено
If clsVerb.Name = strEnable Then
Set objEnable = clsVerb
bEnabled = False
End If
' если доступен глагол "Disable", подключение подключено
If clsVerb.name = strDisable Then
Set objDisable = clsVerb
End If
Next
If bEnabled Then
objDisable.DoIt
strStatus = "disabled."
Else
objEnable.DoIt
strStatus = "enabled."
End If
WScript.Sleep 1000
WScript.Echo Conn.Name & " " & strStatus
Автор: oia Dec 20 2008, 13:23
Этот скрипт vbs, написанный мной спонтанно, позволяет устанавливать или сбрасывать флажок «разрешить удалённый доступ к этому компьютеру» на вкладке удалённые сеансы в свойствах системы! Теперь вы сможете подключаться к удалённому рабочему столу любой машины в вашей сети…
Требуются некоторые пояснения.
Переписать скрипт на любой язык программирования, включая мой любимый С++ не составит труда даже для самых юных кодеров! VBS выбран мной только из соображений лени, если так можно выразиться (под руками был генератор скриптов именно vbs) правда править его ручками пришлось всё равно!
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
1. подставьте нужные значения
strComputer = "ИмяУдалённогоКомпьютера"
strDomain = "ИмяДомена"
2. подставьте имя машины на которой запускаете скрипт
ServerName='ИмяКомпьютера'
3. параметр = 1 установит флажок параметр = 0 сбросит его
objInParam.Properties_.Item("AllowTSConnections") = 1
Запустить скрипт легко по контекстному меню смотрите рисунки.
P.S. Проверено на 32 битных и 64 битных системах (WindowsServer2003, WindowsXP)
strComputer = "ИмяУдалённогоКомпьютера"
strDomain = "ИмяДомена"
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
Wscript.Echo
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
"root\CIMV2", _
strUser, _
strPassword, _
"MS_409", _
"ntlmdomain:" + strDomain)
' Obtain an instance of the the class
' using a key property value.
Set objShare = objWMIService.Get("Win32_TerminalServiceSetting.ServerName='ИмяКомпьютера'")
' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("SetAllowTSConnections"). _
inParameters.SpawnInstance_()
' Add the input parameters.
objInParam.Properties_.Item("AllowTSConnections") = 1
' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_TerminalServiceSetting.ServerName='ИмяКомпьютера'", "SetAllowTSConnections", objInParam)
' List OutParams
Wscript.Echo "Out Parameters: "
Wscript.echo "ReturnValue: " & objOutParams.ReturnValue
Автор: Nazim Jan 21 2009, 12:27
Нужно изменить пароль локального админа в сети с помощью скрипта.
Есть скрипт
Dim Container
Dim ContainerName
Dim User, UsrSID, b
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
ComputerName=WshNetwork.ComputerName
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & ComputerName & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
ostype=objItem.OSType
osver=objItem.Version
oslang=objItem.OSLanguage
spver=objItem.ServicePackMajorVersion
Next
strOSVer = Left(osVer, 3)
If strosver<>"5.2" then
strSelect="Select * from Win32_UserAccount"
Set colSystemUsers = objWMIService.ExecQuery (strSelect)
For Each objSystemUser in colSystemUsers
if Right(objSystemUser.SID,3)="500" Then
Set objUser = GetObject("WinNT://" & ComputerName & "/" & objSystemUser.Name & ",user")
NewPassword="supper"
Call objUser.SetPassword(NewPassword)
Exit For
End If
Next
End if
Потом создаю батник для запуска этого скрипта с правами админа ибо под правами обычными пароль не меняется.
start путь к скрипту -u Администратор -p пароль
Никак не получается. Возможно есть еще какие то варианты. Пробовал с помощь программы AdminLink - результат тот же
Автор: ups Jan 21 2009, 20:22
Команда start не имеет ключей -u и -p или, в данном случае, идёт речь о версии мне неизвестной, однако эти ключи имеет другая полезная утилита - psexec. Здесь я плавно перешёл к альтернативным вариантам
Для решения данной задачи делаем следующий батничек, который запускаем со своей машины
psexec \\ComputerName -u Администратор -p Пароль cmd /k "net user ЛокальныйАдмин ПАРОЛЬ"
либо предварительно запускаем cmd от имени того самого
Администратор'a и тогда батник будет таким
psexec \\ComputerName cmd /k "net user ЛокальныйАдмин ПАРОЛЬ"
Напомню, что для корректной работы psexec на удалённом ПК должны быть открыты системные шары
А для любителей графики хочу порекомендовать софтину
XS BAP - http://www.avianwaves.com/Tech/Tools/XS_BAP/
Конечно, у каждого из этих вариантов есть свои плюсы-минусы, но, по-моему, они куда более безопастны, чем скрипт запускающийся на удалённой машине, в котором будет указан пароль админа в явном виде.
Автор: Nazim Jan 22 2009, 9:04
Напомню, что для корректной работы psexec на удалённом ПК должны быть открыты системные шары
немного поправлю, если системные шары закрыты, то ничего у вас не получиться.
есть еще и такие вот варианты
Set WshNetwork = CreateObject("WScript.Network")
strComputer = WshNetwork.ComputerName
Set objUser = GetObject("WinNT://" & strComputer & "/Администратор,user")
objUser.SetPassword "12345"
objUser.SetInfo
и JScript
fso=WScript.CreateObject("Scripting.FileSystemObject");
file=fso.OpenTextFile("changedpasses.txt",8,true);
AD=GetObject("winmgmts:\\\\.\\root\\directory\\LDAP");
computers=new Enumerator(AD.ExecQuery("SELECT DS_cn FROM ds_computer "));
exclusions=Exclude("changedpasses.txt");
while(!computers.atEnd()) {
currentComputer=computers.item().DS_cn;
flag=0;
for(i=0;i<=exclusions.length-1;i++) {
if(currentComputer.toLowerCase()==exclusions[i].toLowerCase()) {
flag=1;
break;
}
}
if(flag!=1) {
if(Alive(currentComputer)) {
try {
WMI=GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\\"+currentComputer+"\\Root\\CIMV2");
users=new Enumerator(WMI.ExecQuery("SELECT * FROM Win32_UserAccount"));
while(!users.atEnd()) {
if(users.item().Name=="Администратор") {
ChangePass(currentComputer,"Администратор",file);
}
else if(users.item().Name=="Administrator") {
ChangePass(currentComputer,"Administrator",file);
}
users.moveNext();
}
}
catch(e) {WScript.Echo(currentComputer+" Connection Error");}
}
}
computers.moveNext();
}
file.Close();
function ChangePass(comp,username,outfile) {
var User;
User=GetObject("WinNT://"+comp+"/"+username+",user");
User.SetPassword("pass"); //здесь задаем пароль
WScript.Echo(comp+" Password for "+username+" successfully changed");
outfile.WriteLine(comp.toLowerCase());
}
function Exclude(lst) {
var i,fso,file,exclusion;
fso=WScript.CreateObject("Scripting.FileSystemObject");
file=fso.OpenTextFile(lst,1,true);
i=0;
exclusion=new Array();
while (!file.atEndOfStream) {
exclusion[i]=file.ReadLine();
i++;
}
file.Close();
return exclusion;
}
function Alive(pc) {
var pingProv,ping,ret;
pingProv=GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\\.\\Root\\CIMV2");
ping=pingProv.ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address = '"+pc+"' and Timeout=10");
ping=new Enumerator(ping).item().StatusCode;
(ping==0) ? ret=true : ret=false;
return ret;
}
Автор: BANDIT(filmmaniac) Feb 9 2009, 9:35
Может у кого-то есть скрипт, который отключает брандмауэр?
Автор: klez Feb 9 2009, 9:51
Можно заюзать в батнике Netsh
для ХП к примеру так
netsh firewall set opmode mode=DISABLE profile=DOMAIN
или так
netsh firewall set opmode disable
Для висты аналогично.
Автор: BANDIT(filmmaniac) Feb 9 2009, 11:49
(klez @ Feb 9 2009, 9:51)
Можно заюзать в батнике Netsh
для ХП к примеру так
netsh firewall set opmode mode=DISABLE profile=DOMAIN
или так
netsh firewall set opmode disable
Для висты аналогично.
Он вырубает файрволл для сети, а мне именно для службы.
Автор: klez Feb 9 2009, 12:39
Ааа, тогда так(для висты)
sc stop mpssvc
А что бы задизаблить
sc config start=disabled mpssvc
Автор: BANDIT(filmmaniac) Feb 9 2009, 13:02
Наверно на Висте этот процесс немного по другому называется, потому что на ХР не сработал.
Автор: klez Feb 9 2009, 13:06
Упс, забыл про ХП.
Кажется там это SharedAccess
Автор: BANDIT(filmmaniac) Feb 9 2009, 14:22
Вот нагуглил то что надо, чтобы вообще не включался.
net stop SharedAccess
sc config SharedAccess start= disabled
Автор: Disconnect May 22 2009, 12:50
(Nazim @ Jan 21 2009, 13:27)
................Никак не получается. Возможно есть еще какие то варианты. Пробовал с помощь программы AdminLink - результат тот же
Если через AD то в групповых политиках компьютера закинуть скрипт в Автозагрузку.
"Конфигурация коипьютера" -> "Конфигурация Windows" -> "Сценарии (запуск/завершение)" -> "Автозагрузка".
И будет все ок.
Автор: gonny Jun 14 2009, 12:13
А можно сделать так, чтоб флешки только с определенным именем подключались к компу, а остальные нет? Или какой-то файл на флешку для проверки положить..или только шифрованое понимает..а не шифрованное не понимает
Автор: olexande Jun 14 2009, 16:29
В XP без доустановки "постороннего" (плантого) ПО - нельзя.
Vista и более новые - на уровне групповых политик пробуй. В том числе и АД.
Автор: Navern Jun 19 2009, 0:42
А не, кто с мобильной торговлей не работает? Пригодились бы любые скрипты. А то надоедает палмы обновлять каждый раз из 1С.Хотелось бы как то автоматизировать.
Автор: fli Jul 7 2009, 8:49
Ребята, помогите со скриптом.
Нужно чтобы делалось следуещее:
- Ping и telnet определенных IP в определенное время
- Запись результатов в отдельный файл.
Например:
чтобы в 00-00
ping 192.168.0.2
telnet 192.168.0.5 35
и результаты команд записались в койнить файл
спасибо
Автор: olexande Jul 8 2009, 11:32
например можно:
ping 192.168.0.2 >> file.log
echo quit | telnet 192.168.0.254 25 >> file.log
положить в bat файл и запускать из планировщика.
Результат получишь в файле "file.log"
Автор: fli Jul 10 2009, 9:01
(olexande @ Jul 8 2009, 12:32)
например можно:
ping 192.168.0.2 >> file.log
echo quit | telnet 192.168.0.254 25 >> file.log
положить в bat файл и запускать из планировщика.
Результат получишь в файле "file.log"
сПАсибо!
а еще вот.
надо чтобы по истечению определенного времени, например 3 часа после входа юзера под своей учеткой, менялся пароль к его учетной записи и выключался компьютер shutdown -s -t 10800
OS: Win XP
Cпасибо!
Автор: DJ_KatSo Jul 10 2009, 9:51
(fli @ Jul 10 2009, 10:01)
надо чтобы по истечению определенного времени, например 3 часа после входа юзера под своей учеткой, менялся пароль к его учетной записи и выключался компьютер shutdown -s -t 10800
OS: Win XP
Приблизительно так:
Создаешь назначенное задание на запуск cmd-файла. Запуск от имени учетки с админ правами (главное не от того юзера, которому будем менять пароль).
Текст cmd-файла:
sleep 10800
net user %USERNAME% новый_пароль
sleep 10800
shutdown -s -t 1
Если пользователь доменный, то 2-ю строку меняем на эту:
net user %USERNAME% новый_пароль /domain
P.S. Возможно есть более простой способ.
P.P.S. sleep - утилитка из http://www.microsoft.com/Downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en.
Автор: -danger- Jul 22 2009, 10:47
Помогите разобраться. После выхода из ждущего режима неработает инет (адаптер Realtek).
помагает только выключить--включить адаптер.
нужен vbs-скрипт или батник чтобы перезапускать LAN адаптер.
есть еще такой вариант (vbs-скрипт), но он выводит окошко с сообщением "адаптер enabled/disabled"
может кто-нить шарит как исправить, чтобы он втихую переподключал сетевуху
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
strNetConn = "Сетевые подключения" ' Network Connections для англ. версии ОС
strConn = "Подключение по локальной сети" ' имя или часть имени подключения
strEnable = "&Включить" ' En&able для англ. версии ОС
strDisable = "&Отключить" ' Disa&ble для англ. версии ОС
Set objShell = CreateObject("Shell.Application")
Set objCP = objShell.Namespace(3) ' Панель управления
For Each elem in objCP.Items
If elem.Name = strNetConn Then
' получение папки "Сетевые подключения"
Set colNetwork = elem.GetFolder
Exit For
End If
Next
Set Conn = Nothing
For Each clsConn in colNetwork.Items
If Instr(LCase(clsConn.name), LCase(strConn)) Then
' получение указанного подключения
Set Conn = clsConn
Exit For
End If
Next
If Conn Is Nothing Then
WScript.Echo "Network Connection not found"
WScript.Quit
End If
bEnabled = True
Set objEnable = Nothing
Set objDisable = Nothing
For Each clsVerb in Conn.verbs
' если доступен глагол "Enable", подключение отключено
If clsVerb.Name = strEnable Then
Set objEnable = clsVerb
bEnabled = False
End If
' если доступен глагол "Disable", подключение подключено
If clsVerb.name = strDisable Then
Set objDisable = clsVerb
End If
Next
If bEnabled Then
objDisable.DoIt
strStatus = "disabled."
Else
objEnable.DoIt
strStatus = "enabled."
End If
WScript.Sleep 1000
WScript.Echo Conn.Name & " " & strStatus
Автор: DJ_KatSo Jul 22 2009, 19:23
(-danger- @ Jul 22 2009, 11:47)
есть еще такой вариант (vbs-скрипт), но он выводит окошко с сообщением "адаптер enabled/disabled"
может кто-нить шарит как исправить, чтобы он втихую переподключал сетевуху
Закомментируй или удали последнюю строку.
Автор: -danger- Jul 22 2009, 20:16
спасиба. теперь месидж не выскакует, все как надо.
Автор: alex2376 Jul 24 2009, 17:04
нуженскрипт который бы выводил членов групп
Автор: GhostKU Jul 28 2009, 11:07
Как проще всего из лога телнет клиента найти несколько строк вида А:Б (где А - константа, а Б = разные символы), и скопировать эти строки в другой файл?
Автор: ups Jul 28 2009, 12:02
(GhostKU @ Jul 28 2009, 12:07)
Как проще всего из лога телнет клиента найти несколько строк вида А:Б (где А - константа, а Б = разные символы), и скопировать эти строки в другой файл?
find "A" c:\folder\telnet.log > c:\select.txt
в результате выполнения этой команды все строки содержащие константу A будут скопированы в файл select.txt.
и скорее всего, что если константа в логе будет набрана кирилицей, то поиск осуществить не удастся.
Автор: GhostKU Jul 31 2009, 8:40
(ups @ Jul 28 2009, 13:02)
find "A" c:\folder\telnet.log > c:\select.txt
в результате выполнения этой команды все строки содержащие константу A будут скопированы в файл select.txt.
и скорее всего, что если константа в логе будет набрана кирилицей, то поиск осуществить не удастся.
Спасибо
Сама команда при выполнении ее из командной строки - работате отлично
Но если я пытаюсь ее упаковать в комадный файл - начинаются проблемы
Командный файл "find.cmd" вида :
find "CallDuration" putty.log >> res.txt
При его запуске cmd.exe долго пишет строку вида
find "CallDuration" putty.log 1>> res.txt
Эта же строка многократно записывается в файл res.txt
В чем ошибка?
Автор: DJ_KatSo Jul 31 2009, 16:55
(GhostKU @ Jul 31 2009, 9:40)
Командный файл "find.cmd" вида :
find "CallDuration" putty.log >> res.txt
При его запуске cmd.exe долго пишет строку вида
find "CallDuration" putty.log 1>> res.txt
Эта же строка многократно записывается в файл res.txt
В чем ошибка?
Ошибка в названии cmd-шника - он постоянно вызывает сам себя.
Измени на poisk.cmd и все получится.
Автор: fli Aug 12 2009, 14:48
Подскажите, плз, команду, аналог сочетания клавиш win+L
в гугле искал, не нашел(
спс
Автор: olexande Aug 12 2009, 15:12
Может подойдет - shutdown -l
справка - shutdown /?
Автор: fli Aug 12 2009, 15:35
(olexande @ Aug 12 2009, 16:12)
Может подойдет - shutdown -l
это завершение сеанса...а надо просто заблокировать....или перейти в режим выбора пользователя....
Автор: protrue Aug 13 2009, 8:40
(fli @ Aug 12 2009, 15:48)
Подскажите, плз, команду, аналог сочетания клавиш win+L
в гугле искал, не нашел(
спс
Создать ярлык
%windir%\System32\rundll32.exe user32.dll,LockWorkStation
или lock.bat файл
@echo off
%windir%\System32\rundll32.exe user32.dll,LockWorkStation
cls
Автор: fli Aug 16 2009, 18:00
(protrue @ Aug 13 2009, 9:40)
Создать ярлык
%windir%\System32\rundll32.exe user32.dll,LockWorkStation
или lock.bat файл
@echo off
%windir%\System32\rundll32.exe user32.dll,LockWorkStation
cls
рЕСПект! Работает!
Если кому интерестно для чего это мне надо было...
Короче моя учетка под паролем. В control userpasswords2, я убираю галку "Требовать ввод имени и пароля"...
В автозагрузку бросаю lock.bat.... и вуаля, не надо ждать после ввода пароля, применения личных параметров...сразу все загружено
Автор: jerr Aug 16 2009, 19:58
(fli @ Aug 16 2009, 19:00)
не надо ждать после ввода пароля, применения личных параметров...сразу все загружено
что то не совсем понятно почему...
Автор: olexande Aug 16 2009, 20:42
А на кой ляд снимать галку?
Может тогда стоит почистить автозагрузку? Или комп не выключать?..
Пароль-то все-равно вводить...
Автор: fli Aug 16 2009, 21:14
(olexande @ Aug 16 2009, 21:42)
А на кой ляд снимать галку?
Может тогда стоит почистить автозагрузку? Или комп не выключать?..
Пароль-то все-равно вводить...
почищена...
просто не нужно ждать пока все загрузиться после ввода пароля........
Автор: Muzman Aug 16 2009, 22:02
А перенести всё нужное с HKCU в HKLM?
P.S. Имея физ доступ к компу, я смогу отключить выполнение этого скрипта, зайти под вами автоматом (галка ведь уже снята), и сделать под уже загруженной вашей учёткой всё что мне заблагорассудится. Потом стереть логи, и поменять локальные GPO назад. Вы ничего и не заметите. Вот такой я злой... Это было сказано для того, что бы вы поняли что так делать не очень хорошо.
P.P.S. Если будете конектится по RDP то это тоже не поможет, так как будете грузить другой сеанс этого же пользователя.
Автор: Ischuk Aug 27 2009, 20:28
Здравствуй klez
Подскажите пожалуйста по этому скрипту....
при формировании переменной gSID на шаге &Convert(4,7) почему-то идет различие данных полученным скриптом и то что находиться в ldap учетной записи компьютера... Может ткнете куда смотреть или краткий экскурс по данному скрипту можете провести?
[quote name='klez' date='May 12 2008, 9:21' post='861462']
Получение SID (а) компьютера из AD
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
On Error Resume Next
Dim Tmp, x, b, Sid
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objCmp = GetObject("LDAP://" & strComputerDN)
Sid = objCmp.objectSID
gSID = "S-1-5-"&Convert(16,19)&"-"&Convert(12,15)&"-"&Convert(8,11)&"-"&Convert(4,7)&"-"&Convert(0,3)
Set objGroup = Nothing
function Convert(u,l)
Tmp = ""
For x = UBound(Sid)-u to UBound(Sid)-l Step -1
b = AscB(MidB(SID, x + 1))
Tmp = Tmp & Hex(b \ 16) & Hex(b And 15)
Next
Convert = Clng("&H" & Tmp)
end function
wscript.echo(gSID)
Автор: Nazim Aug 28 2009, 9:12
Кстати кое что можно и тут найти
http://gallery.technet.microsoft.com/ScriptCenter/en-us/
Автор: Pavel Sep 17 2009, 15:34
Задам и я вопрос.
Итак: доменная сеть, имею доступ к АД. И есть нужда определенному ИП вычитстить комп от файлов типа *.mp3, *.avi, *.flv.
Ручками не могу - у него стоит нетвиев, в остальное время комп выключен. Да и не хочу светится. А так - пусть придумает как я ээто сделал, найдет мотив, докажет, а потом еще и попробует пожаловаться.
ПС Он решил НЕАХАТЬ на админа (меня), при чем с телегаминачальству (уладил), вызовами за просто так (приходилось пожходить), грубостью (стоял и придумывал месть) и проч. Естественно, нормальный комп он получит после моего ухода, но музыка человеку тоже не нужна.
ППС Инет уже порезал.
Автор: ups Sep 18 2009, 23:23
Когда сетёвка правильная, то с выключенным компом тоже работать можно.
P.S. Если музыка ненужна вам, это не значит, что она ненужна другим
Автор: Pavel Sep 19 2009, 15:55
(ups @ Sep 19 2009, 0:23)
Когда сетёвка правильная, то с выключенным компом тоже работать можно.
P.S. Если музыка ненужна вам, это не значит, что она ненужна другим
С выключенным? прикольно! почитаю.
Кстати, в принципе можно включить комп, не входя в его пользователя вытереть все лишнее по мнению шефа (мне то че, мне музыка нужна, у меня она есть, её много, но телеги ой как не люблю... писать потом обьяснительные...), потом выключить его комп и вуалля.
Но так не эстетично (зато дешево, надёжно и практично).
спасибо за идею
P.S. А человек тот музыки недостоин, в рабочее время. А в не рабочее его то и нету на работе, в отличии от многих других, которые работают на результат, а не фигнёй страдают...
Автор: Sintorres Sep 26 2009, 16:22
Скрипт для перезапуска ADSL мопеда D-link DSL-2640U
rem Заходим на мопед
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.1.1"
WScript.Sleep 1000
oShell.SendKeys "Имя" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "Пароль" & chr(13)
rem Перезапускаем
WScript.Sleep 1000
oShell.SendKeys "13" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "1" & chr(13)
"telnet.exe 192.168.1.1" - или другой IP на котором сидит модем
Будет работать и на других моделях но возможно придется посмотреть в телнете что писать в oShell.SendKeys "
??" & chr(13) после того как залогинишся
Автор: Tonik Sep 28 2009, 15:12
Добрый день. Нужен скрипт:
нужно в AD добавить юзера в точно такие же группы в которых состоит его коллега. Пересоздать учутку скопировав все параметры у его коллеги - не катит. нужно просто дать ему членство в точно таких же группах как его коллега.
Может кто то сообразить скриптик? Спасибо.
Автор: Sintorres Sep 28 2009, 16:05
2 Tonik
Почитай http://www.compress.ru/article.aspx?id=19156&iid=889
У мня хуже ситуевина.
Нужен скрипт для создания учеток пользователей из списка. (txt, xls)
всего пользователей штук 400.
моет есть у кого умный мысль?
Вот нарыл http://social.technet.microsoft.com/Forums/ru-RU/scrlangru/thread/a95e29b2-6975-45f0-a0f7-b60194f36dca такой скриптец
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Мой скрипт, правда заточенный под наш AD
//////////////////////////////////////////////////////////
// Скрипт создания нового пользователя //
// Язык: JScript //
// Автор: Андрей Мишечкин //
//////////////////////////////////////////////////////////
//Необходимые объекты WSH
var WshShell = WScript.CreateObject("WScript.Shell");
var WshNetwork = WScript.CreateObject("WScript.Network");
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var Args = WScript.Arguments.Named;
//Объявление необходимых переменных
var LoginScript; //login-скрипт пользователя
var OUName; //имя орг. единицы в которой создается учетная запись
var Company; //имя компании
var Email; //E-mail пользователя
//Проверка движка скриптов
if(!IsCScript())
{
WScript.Echo("Warning! WScript using as default script engine. For best result use cscript.");
Wscript.Quit(1);
}
/////////////////////////////////////////////
//Считывание аргументов командной строки //
/////////////////////////////////////////////
//Проверка обязательных аргументов коммандной строки
if(Args.Exists("login")&&
Args.Exists("fullname")&&
Args.Exists("object")&&
Args.Exists("department")&&
Args.Exists("title")&&
Args.Exists("phone"))
{ //При правильных аргументах - создание и присвоение значений необходимых переменных
var LoginName = Args("login").toLowerCase(); //login-name пользователя
var DisplayName = Args("fullname"); //ФИО полльзователя (записывается в атрибут displayName)
var PoladObject = Args("object"); //Объект компании (Центральный офис, производственная база и т.п.)
var Department = Args("department"); //Подразделение в которой работает пользователь
var Title = Args("title"); //Должность пользователя
var Phone = Args("phone"); //Телефон пользователя
}
else
HelpMessage(); //При неправильных аргументах - вывод справки.
//Необязательные аргументы коммандной строки
//E-mail пользователя
if(Args.Exists("email"))
Email = Args("email"); //E-mail пользователя
else
Email = null;
//Login-скрипт пользователя (по умолчанию mls.js)
if(Args.Exists("script"))
LoginScript = Args("script");
else
LoginScript = "mls.js";
//Орг. единица в которой создается пользователь (по умолчанию OU=UsersOfPolad)
if(Args.Exists("ou"))
OUName = Args("ou");
else
OUName = "OU=UsersOfPolad";
//Название компании, в которой работает пользователь ( по умолчанию ЗАО "Полад")
if(Args.Exists("company"))
Company = Args("company");
else
Company = "ЗАО Полад";
////////////////////////////////////////
//Создание учетной записи пользователя //
////////////////////////////////////////
WScript.Echo("Account creation process starting");
try
{
WScript.Echo("Connect to domain local.polad.ru");
var objRootDSE = GetObject("LDAP://rootDSE");
var objOU = GetObject("LDAP://" + OUName + "," + objRootDSE.Get("defaultNamingContext"));
WScript.Echo("Create the account " + LoginName);
var objUser = objOU.Create("user", "CN=" + LoginName); //создание учетной записи пользователя
objUser.Put("samAccountName", LoginName); //присвоение login-name
objUser.SetInfo();
objUser = GetObject("LDAP://CN=" + LoginName + "," + OUName + "," + objRootDSE.Get("defaultNamingContext"));
WScript.Echo("Seting the account password");
objUser.SetPassword("54321"); //установка пароля
WScript.Echo("Writting the attributes of account " + LoginName);
objUser.userPrincipalName = LoginName + "@" + "local.polad.ru"; //установка UPN login name
objUser.displayName = DisplayName; //установка полного имени пользователя (ФИО)
objUser.LoginScript = LoginScript; //установка login-скрипта пользователя
objUser.department = Department; //установка дирекции пользователя
objUser.telephoneNumber = Phone; //установка телефона пользователя
objUser.physicalDeliveryOfficeName = PoladObject; //установка объекта ЗАО "Полад" пользователя
objUser.title = Title; //установка должности пользователя
if(Email)
objUser.mail = Email; //установка e-mail пользователя
objUser.company = Company; //установка компании пользователя
objUser.AccountDisabled = false; //включение учетной записи пользователя
objUser.pwdLastSet = 0; //установка флага смены пароля при следующем входе пользователя
objUser.SetInfo(); //запись атрибутов пользователя
}
catch(e) //обработка ошибок
{
WScript.Echo("ADSI error. " + e.description);
WScript.Quit(1);
}
////////////////////////////////////////
//Создание личного каталога //
////////////////////////////////////////
WScript.Echo("\nNetwork account " + LoginName + " private disk creation process starting");
try
{
WScript.Echo("Connect to server FS2");
WshNetwork.MapNetworkDrive("J:", "\\\\fs2\\Users"); //подключение сетевого диска сервера личных каталогов
WScript.Echo("Create folder "+ LoginName);
fso.CreateFolder("J:\\" + LoginName); //создание личного каталога
WScript.Sleep(1000);
WScript.Echo("Set the folder " + LoginName + " ACL");
var RetValue = WshShell.Run("cacls J:\\" + LoginName + " /E /T /G POLAD\\" + LoginName + ":C",7,true) //установка прав на каталог пользователя
if(RetValue != 0)
WScript.Echo("ACLS Error. Check the ACL of J:\\"+LoginName);
WScript.Echo("Internet access generation");
//Создание учетной записи прокси-сервер
WshShell.Run("iexplore.exe http://www.polad.ru/cgi-bin/admin/newuser.pl.silent?fname="+LoginName+"&sname="+DisplayName+"&g=0");
WshNetwork.RemoveNetworkDrive("J:"); //отключение сетевого диска
WScript.Echo("Operation completed successfuly");
Information(LoginName);
}
catch(e) //обработка ошибок
{
WScript.Echo("Private disk creation error. " + e.description);
WScript.Quit(1);
}
////////////////////////////////////////
// Функция проверки движка скриптов //
////////////////////////////////////////
function IsCScript()
{
return("c" == WScript.FullName.toLowerCase().charAt(WScript.FullName.length - 11));
}
////////////////////////////////////////
// Функция вывода справки //
////////////////////////////////////////
function HelpMessage()
{
WScript.Echo("Use [cscript] adduser[.js] /login:LoginName /fullname:FullUserName /object:PoladObject /department:Department /title:Title /phone:PhoneNumber [/email:Email] [/script:LoginScript] [/ou:OU=OrgUnit] [/company:CompanyName]");
WScript.Quit();
}
function Information(UserName)
{
var WMIServiceObj = GetObject("Winmgmts:");
var ProcEnumerator = new Enumerator(WMIServiceObj.ExecQuery("Select Handle from Win32_Process WHERE Caption = 'cscript.exe' OR Caption = 'wscript.exe'"));
var ProcHandle = ProcEnumerator.item().Handle;
var objWMIProcess = GetObject("winmgmts:Win32_Process.Handle='" + ProcHandle + "'");
var wmiOutParams = objWMIProcess.ExecMethod_("GetOwner");
var AdministratorName = wmiOutParams.User;
var objCurrentDate = new Date;
var CurrentDate = objCurrentDate.getDate();
CurrentDate += "." + (objCurrentDate.getMonth()+1);
CurrentDate += "." + objCurrentDate.getYear() + " ";
var CurrentHour = objCurrentDate.getHours();
if(CurrentHour < 10)
CurrentDate += "0";
CurrentDate += CurrentHour + ":";
var CurrentMinute = objCurrentDate.getMinutes();
if(CurrentMinute < 10)
CurrentDate += "0";
CurrentDate += CurrentMinute;
var objEmail = WScript.CreateObject("CDO.Message");
objEmail.From = "\"Adduser.js script\"
[email protected]";
objEmail.To =
[email protected];
objEmail.Subject = UserName +" is created";
objEmail.Textbody = "User " + UserName + " is created by " + AdministratorName + " in " + CurrentDate;
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();
try
{
objEmail.Send();
}
catch(e)
{
WScript.Echo("Mail system error: " + e.description);
}
}
Можно ли сюда прикрутить чтение переменных из списка?
////////////////////////////////////////
//Создание учетной записи пользователя //
////////////////////////////////////////
......
......
objUser.SetPassword("54321"); //установка пароля
WScript.Echo("Writting the attributes of account " + LoginName);
objUser.userPrincipalName = LoginName + "@" + "local.polad.ru"; //установка UPN login name
objUser.displayName = DisplayName; //установка полного имени пользователя (ФИО)
objUser.LoginScript = LoginScript; //установка login-скрипта пользователя
objUser.department = Department; //установка дирекции пользователя
objUser.telephoneNumber = Phone; //установка телефона пользователя
objUser.physicalDeliveryOfficeName = PoladObject; //установка объекта ЗАО "Полад" пользователя
objUser.title = Title; //установка должности пользователя
if(Email)
objUser.mail = Email; //установка e-mail пользователя
objUser.company = Company; //установка компании пользователя
objUser.AccountDisabled = false; //включение учетной записи пользователя
objUser.pwdLastSet = 0; //установка флага смены пароля при следующем входе пользователя
objUser.SetInfo(); //запись атрибутов пользователя
.....
.....
Автор: ups Sep 28 2009, 20:31
Sintorres, на странице (ссылка на которую вы дали для Tonik'a) уже есть, можно сказать, почти что готовый под ваши нужды скрипт, ну почти готовый...
Import-CSV users.csv | ForEach-Object { New-QADUser -ParentContainer scorpio.local/users -Name ($_.Familia + ‘, ’ + $_.Imya) -samAccountName ($_.Imya[0] + $_.Familia) -Department $_.Department -Title $_.Title}
где файл users.csv должен содержать информацию о юзерах в следующем формате.
Автор: Sintorres Sep 29 2009, 11:28
ups Спасибо.
london Мегареспект за файлики и линк на _http://www.rlmueller.net/CreateUsers.htm
Это то что доХтор прописал
Автор: saen Oct 20 2009, 16:53
Маленький скриптик для Unix систем.
Перезапуск служб apache , mysql , cron , sendmail .
Сорри, запостил не в ту тему
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#!/bin/bash
echo "Services restart: ";
cd /etc/rc.d/init.d/
./httpd restart
./mysqld restart
./crond restart
./sendmail restart
Автор: olexande Nov 11 2009, 15:00
а crond зачем рестартить?
Автор: Fanta Dec 24 2009, 15:57
Народ э скрипт який записує час логон і логоффу юзеря!
підкажіть плз яка змінна відповідає за тривалість сеансу (час між логон і логофф) ??
Автор: protrue Dec 24 2009, 16:08
Що за скрипт, що тобі потрібно, опиши дительніше.
Автор: Fanta Dec 24 2009, 16:14
(protrue @ Dec 24 2009, 16:08)
Що за скрипт, що тобі потрібно, опиши дительніше.
Є КД на Він2008 і кліенти на ХР
Я в user configuration -> user settings -> scripts(logon/logoff) на логон вішаю скрипт logon.bat
@echo %USERNAME% = LOG__ON "%date%_%time%" >>\\esp03\For_IT_jobs\%COMPUTERNAME%-%USERNAME%.txt
і на логофф logoff.bat
@echo %USERNAME% = LOG_OFF "%date%_%time%" >>\\esp03\For_IT_jobs\%COMPUTERNAME%-%USERNAME%.txt
і отримую файло з: іменем юзера і часом логону і логоффу.
А мені ще треба тривалість сеансу - тобто час між логоном і логоффом!
Автор: olexande Dec 25 2009, 14:57
Советую предусмотреть вариант - некорректного отключения ПК.
Ибо у тебя может появиться 2 записи что включился, и ни одной что включился.
И если сервер - получатель не будет доступен ... тоже запись не сохранится ...
Автор: Эдичка Jan 5 2010, 10:15
ребята помогите со скриптами,
1.перезагрузка sql через планировщик заданий
2.выключение компа.
не задаром!
Автор: Sintorres Jan 6 2010, 9:39
(Эдичка @ Jan 5 2010, 10:15)
2.выключение компа.
http://autoit-script.ru/index.php?PHPSESSID=26f0bba10e96b48e9e6ce310497f9f65&topic=82.0 почитай
МИР
Автор: Эдичка Jan 6 2010, 9:49
(Sintorres @ Jan 6 2010, 9:39)
http://autoit-script.ru/index.php?PHPSESSID=26f0bba10e96b48e9e6ce310497f9f65&topic=82.0 почитай МИР
я ламер в скриптах
, лучше сделай а я заплачу.
кстати интересное инфо.
спасибо.
вот жеж )))
я так понял запускаем слип.ехе ставим время и все. ггг
Автор: x1shn1k Jan 6 2010, 10:15
С SQL не работал, но судя по всему первый скрипт будет выглядеть так
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
@ECHO OFF
NET STOP SQLSERVERAGENT
NET STOP MSSQLSERVER
NET START MSSQLSERVER
NET START SQLSERVERAGENT
В Планировщик думаю не составит труда запихнуть его.
Для выключения компьютера тоже хватит стандартных возможностей bat-файлов
shutdown -s -t 0
В самом простом своём варианте эти два скрипта будут выглядеть так =)
Автор: Эдичка Jan 6 2010, 10:42
(x1shn1k @ Jan 6 2010, 10:15)
С SQL не работал, но судя по всему первый скрипт будет выглядеть так
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
@ECHO OFF
NET STOP SQLSERVERAGENT
NET STOP MSSQLSERVER
NET START MSSQLSERVER
NET START SQLSERVERAGENT
В Планировщик думаю не составит труда запихнуть его.
Для выключения компьютера тоже хватит стандартных возможностей bat-файлов
shutdown -s -t 0
В самом простом своём варианте эти два скрипта будут выглядеть так =)
ого, сегодня проверю. а виндоус 2003 при выключении спрашивает типа по какой причине вырубаем, выключение через shutdown проскочит эту процедуру?
Автор: Spectral Jan 6 2010, 10:44
(Эдичка @ Jan 6 2010, 10:42)
через shutdown проскочит эту процедуру?
Там можно вбить в строке причину. В любом случае проскочит - это системный вызов.
Автор: Эдичка Jan 6 2010, 10:52
x1shn1k, с sql чото не получается. сделал файл смд, запустил и оно выдает ошибки.
Автор: x1shn1k Jan 6 2010, 11:19
Вполне возможно. Я понятия не имею какие службы отвечают за SQL. Код этот нашел в интернете =)
Какие ошибки хоть выдает?
Автор: Spectral Jan 6 2010, 11:26
(Эдичка @ Jan 6 2010, 10:52)
с sql
А почему просто не ребутить сервак?
shutdown -r
Он сам погасит все службы, а заодно и апдейты установит.
Автор: Эдичка Jan 6 2010, 11:40
(Spectral @ Jan 6 2010, 11:26)
А почему просто не ребутить сервак?
спасиб.
та хочется малой кровью
Автор: Muzman Jan 6 2010, 12:06
(Spectral @ Jan 6 2010, 11:26)
А почему просто не ребутить сервак?
shutdown -r
Он сам погасит все службы, а заодно и апдейты установит.
Тогда уже
shutdown /r /f /t %needed_time% /e %reason_code%
Если система не R2, то:
shutdown -r -f -t %needed_time% -e %reason_code%
Автор: Nazim Apr 2 2010, 13:48
Скрипт очистки очереди печати и перезапуска диспетчера печати
net stop fax (если эта служба есть)
net stop spooler
@echo off
IF EXIST "\Windows\System32\spool\PRINTERS\" del "\Windows\System32\spool\PRINTERS\*.*" /f /s /q
net start fax (если эта служба есть)
net start spooler
Автор: Blick Apr 2 2010, 13:57
net stop fax и net start fax - удалить, если выдаёт ошибку о том, что служба не установлена.
Автор: Nazim Apr 2 2010, 14:00
(Blick @ Apr 2 2010, 14:57)
net stop fax и net start fax - удалить, если выдаёт ошибку о том, что служба не установлена.
дело в том что у многих она не стоит, но она есть как бы - проверил у себя на 7-ке - полет нормальный
Автор: Fanta Apr 7 2010, 11:06
Комради, потрібен скрипт який моніторить (з заданим інтервалом) вільне місце на вінтах і присилає звіт на е-маіл у вигляді:
Діск С:
Всьго - 100 Гб
Занято - 20% = 20 Гб
Вільно - 80% = 80 Гб
Діск Д:
Всьго - 100 Гб
Занято - 20% = 20 Гб
Вільно - 80% = 80 Гб
Моніторити потрібно як сервера так і ПК
Автор: Alex_GR Apr 7 2010, 15:16
(Эдичка @ Jan 5 2010, 11:15)
ребята помогите со скриптами,
1.перезагрузка sql через планировщик заданий
2.выключение компа.
не задаром!
1. в CMD пишешь
rem для остановки сервиса SQL Server 2005
net stop MSSQLSERVER /y
rem для запуска сервиса SQL Server 2005
net start MSSQLSERVER
net start SQLSERVERAGENT
соответственно бросаешь его в планировщик
а зачем тебе его перезапускать ?
PS и еще посмотри в свойствах сервиса вкладку Recovery...
Автор: -AiD- May 5 2010, 15:43
(klez @ May 12 2008, 9:21)
Поиск аккаунтов в ActiveDirectory с просроченными паролями
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
on Error resume next
DC=getObject("LDAP://RootDSE").get("defaultNamingContext")
dom=getObject("LDAP://" & DC).get("Name")
pwAge=getObject("WinNT://" & dom).get("MaxPasswordAge")/86400
set objConnection=createObject("ADODB.Connection")
objConnection.open "Provider=ADsDSOObject;"
set objCmd=createObject("ADODB.Command")
objCmd.ActiveConnection=objConnection
' -- Command for searching computer accounts
'cmd="<LDAP://" & DC & ">;(objectClass=computer);distinguishedName,samAccountName;subtree"
' -- Command for searching user accounts
cmd="<LDAP://" & DC & ">;(objectCategory=person);distinguishedName,samAccountName;subtree"
objCmd.CommandText=cmd
set col=objCmd.execute
if col.recordCount>0 then
col.moveFirst
while not col.EOF
dn=col.fields(0).value
acc=col.fields(1).value
set obj=getObject("LDAP://" & dn)
accCtrl=obj.get("userAccountControl")
if (accCtrl and &h10000)=0 then
pwChg=obj.PasswordLastChanged
if (Err.Number<>0) then
E=CStr(Err.Number) & " " & Err.Description
' WScript.echo acc & space(16-len(acc)) & " - Error : " & E
Err.clear
else
if (now-pwChg)>pwAge then
WScript.echo acc & space(16-len(acc)) & " - Expired : " & (pwChg+pwAge)
else
' WScript.echo acc & space(16-len(acc)) & " - Expire on : " & (pwChg+pwAge)
end if
end if
else
' WScript.echo acc & space(16-len(acc)) & " - Never Expire"
end if
col.moveNext
wend
end If
objConnection.close
Если NetBIOS имя домена отличается от DNS до первой точки, то руками вместо строки
dom=getObject("LDAP://" & DC).get("Name") присвоить нужное значение
Как настроить данный скрипт на поиск в определенном OU а не во всем домене? Экспорт в файл?
Автор: Blick Jul 13 2010, 9:39
Коллеги, нужен скрипт.
Суть такая.
Допустим, ребутнулся сервак.
Чтобы запустить определённую прогу, мне нужно залогиниваться.
Нужен скрипт, который бы без залогинивания запускал определённую прогу от имени определённого юзера домена.
Автор: klez Jul 13 2010, 20:51
Проще как сервис обернуть
Смотри в сторону sc create
Автор: GhostKU Jul 17 2010, 0:05
Коллеги, подсобите Нужно автоматизировать установку макроса в Outlook. Даже не знаю с какой стороны подойти к задаче.
Есть рабочая группа на 40 машин. Машины на WinXP SP3, MS Outlook 2007
Нужно каждому пользователю установить макрос в Outlook, если по пунктам то:
1 - Создать текстовый файл определенного содержания в Папке Мои Документы. Тут вроде проблем особых не должно быть
2 - Установить сертификат
3 - Создать VBA проект
4 - Подписать его установленным сертификатом
5 - Импортировать в проект готовую форму
6 - Добавить кнопку вызова формы на панель Outlook
Подскажите хоть примерно чем и как можно реализовать вышеописанное
Автор: Sart Aug 12 2010, 18:54
Спасибо за скрипт по уничтожению агента мылорушного
Аналогично склепал на скайп
Автор: nerve Oct 22 2010, 20:19
нужен скрипт или батник для логофф-а сеансов пользователей терминалов.
Автор: whois Oct 23 2010, 20:34
ГП чем не подходит?
Автор: nerve Oct 24 2010, 11:09
тем что ограничений по длительности активного или бездействующего сеанса нет и у некоторых пользователей отключенные сеансы не закрываются автоматически по истечении какого либо времени.
вопрос не в политиках, а в том, как, какой прогой логофнуть все сеансы на терминале. диспетчер служб терминалов не годится. нужен батник или скрипт или что-то еще, чтоб в опред. время это сделать.
Автор: Nazim Oct 25 2010, 9:04
(nerve @ Oct 24 2010, 12:09)
... логофнуть все сеансы на терминале. диспетчер служб терминалов не годится. нужен батник или скрипт или что-то еще, чтоб в опред. время это сделать.
а так?
for /f "tokens=1,3" %%i in ('query session') do echo "%%i" | find "console" || reset session %%j
Автор: nerve Oct 25 2010, 10:08
спасибо. то что нужно. можно подчистить посты
Автор: Sintorres Nov 19 2010, 15:38
Доброго времени суток.
Нужен скрипт/батник рубающий скайп, квип и мышу (the bat) в определенное время.
Запускаемый в шедулере в виде ежедневного задания.
(Склероз замучил, ухожу/убегаю с работы и забываю/нет_времени потушить, а комп работает 24/7. Пришел домой, и пропустил часть инфы свалившейся на работающие сервисы на рабочем компе )
Сори за ламерский вопрос.
Автор: london Nov 19 2010, 16:10
PowerShell, наваял пример для винампа
Get-Process | Where-Object {$_.name -eq "winamp"} | Stop-Process
или несколько процессов
Get-Process | Where-Object {$_.name -eq "opera" -or $_.name -eq "winamp"} | Stop-Process
Автор: hell4ween Dec 10 2010, 12:30
(Nazim @ May 8 2008, 14:32)
Предлагаю выкладывать сюда скрипты для администрирования. Например вот мой для подключения сетевого диска
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Set WshNetwork = CreateObject("WScript.Network")
'Создание объекта типа Network Set Drives = WshNetwork.EnumNetworkDrives
c = 0 'Пременная проверки на наличие хотя бы одного сетевого диска!
i = 0 While i <= Drives.Count-1 'Проверка на наличие сетевых диков
c = 1 'MsgBox " У вас есть сетевой диск " & Drives.Item(i) & " - " & Drives.Item(i+1) i = i+2 Wend if c=0 then
'MsgBox "Нет ни одного подключенного диска"
'MsgBox "Попытка подключить сетевой диск" 'Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "Z:", "\\Имясервера\имя папки"
End if
Сохранил в VBS, выдает ошибку. Может нужно еще что дописать?
Виндовс ХР сп3.
ошибка:строка 4
символ 7
Предполагается наличие окончания инструкции
код 800А0401
источник: Ошибка компиляции Microsoft VBScript.
Автор: Sera Dec 24 2010, 16:40
(Sintorres @ Nov 19 2010, 15:38)
Доброго времени суток.
Нужен скрипт/батник рубающий скайп, квип и мышу (the bat) в определенное время.
Запускаемый в шедулере в виде ежедневного задания.
Впихиваем в батник
taskkill /F /IM Skype.exe
taskkill /F /IM qip.exe
ну и т.д. по аналогии
Автор: danders Feb 12 2011, 10:40
(Sera @ Dec 24 2010, 17:40)
Впихиваем в батник
taskkill /F /IM Skype.exe
taskkill /F /IM qip.exe
ну и т.д. по аналогии
Гораздно проще отключить всякие odnoklassniki, vkontakte, qip и т.п. на уровне firewall.
Автор: Sintorres Feb 12 2011, 11:18
(danders @ Feb 12 2011, 10:40)
Гораздно проще отключить всякие odnoklassniki, vkontakte, qip и т.п. на уровне firewall.
Это о чем? и к чему???
Вы хотя бы озаботьтесь прочтением вопроса, на который даете ответ.
Автор: olex@ Feb 24 2011, 14:35
Прохання допомогти зі скриптом часу w32tm
В домені є станція, що синхронізується із зовнішним NTP-сервером часу.
Потрібно, щоб сервер брав час зі цієї робочої станції і встановлював його для всіх інших клієнтів локальної мережі. Порти для сервера закриті, тому така проблема.
Автор: Taras_J Mar 2 2011, 8:40
VBS скрипт для проверки типа входа пользователя. Если пользователь подключен по RDP или ICA, то скрипт прекращает работу. Полезно для фильтрации пользовательских политик на серверах терминалов
Dim WshShell,WshProcEnv, strSessionName
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshProcEnv = WshShell.Environment("Process")
strSessionName = WshProcEnv("SESSIONNAME")
If Left(strSessionName, 3) = "ICA" OR Left(strSessionName, 3) = "RDP" then
WScript.Quit
End If
Автор: -AiD- Mar 16 2011, 18:08
Получаем список установленного ПО на удаленной машине:
:: Вывод списка установленных программ с дополнительным выводом версии программы
::©2011 -AiD- for 0day.kiev.ua
:: Windows 7 / Vista - OK
:: Windows Server 2008 - OK
:: Windows Server 2003 - OK
:: Windows 2000 - OK
:: Windows XP - OK
:: Формат:
:: ---
:: SOME PROGRAM (IT'S VERSION)
:: ---
@ECHO OFF
CLS
ECHO Usage: %0 ^<Target Host IP or Hostname^>
ECHO You might need to run this script from ELEVATED command prompt!
ECHO.
CHCP 1251 > nul
SET UNINSTALL=\\%1\HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
IF [%1]==[] SET UNINSTALL=HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
ECHO *********List of installed soft on remote machine*********
FOR /f "tokens=7 delims=\" %%a IN ('reg query "%UNINSTALL%"') DO (
FOR /f "tokens=1,2,*" %%b IN ('reg query "%UNINSTALL%\%%a" ^| FIND /I "DisplayName" ^| FIND /V "ParentDisplayName"') DO (
FOR /f "tokens=1,2,*" %%e IN ('reg query "%UNINSTALL%\%%a" ^| FIND /I "DisplayVersion"') DO (
ECHO %%d ^(%%g^)
ECHO ---
)
)
)
Использование: сохранить код в .bat или .cmd файл и запустить указав в качестве входного параметра имя или IP удаленной машины. При запуске без параметра выдаст список для localhost
Автор: amee Apr 5 2011, 15:16
Когда пользователь последний раз входил в систему:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
' LastLogonTime.vbs
' VBScript program to determine when each user in the domain last logged
' on. Domain must be at Windows Server 2003 Functional Level.
Option Explicit
Dim objRootDSE, adoConnection, adoCommand, strQuery
Dim adoRecordset, strDNSDomain, objShell, lngBiasKey
Dim lngBias, k, strDN, dtmDate, objDate
Dim strBase, strFilter, strAttributes, lngHigh, lngLow
' Obtain local Time Zone bias from machine registry.
' This bias changes with Daylight Savings Time.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
& "TimeZoneInformation\ActiveTimeBias")
If (UCase(TypeName(lngBiasKey)) = "LONG") Then
lngBias = lngBiasKey
ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
lngBias = 0
For k = 0 To UBound(lngBiasKey)
lngBias = lngBias + (lngBiasKey(k) * 256^k)
Next
End If
Set objShell = Nothing
' Determine DNS domain from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
Set objRootDSE = Nothing
' Use ADO to search Active Directory.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection
' Search entire domain.
strBase = "<LDAP://" & strDNSDomain & ">"
' Filter on all user objects.
strFilter = "(&(objectCategory=person)(objectClass=user))"
' Comma delimited list of attribute values to retrieve.
strAttributes = "distinguishedName,lastLogonTimeStamp"
' Construct the LDAP syntax query.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
' Run the query.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 60
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute
' Enumerate resulting recordset.
Do Until adoRecordset.EOF
' Retrieve attribute values for the user.
strDN = adoRecordset.Fields("distinguishedName").Value
' Convert Integer8 value to date/time in current time zone.
On Error Resume Next
Set objDate = adoRecordset.Fields("lastLogonTimeStamp").Value
If (Err.Number <> 0) Then
On Error GoTo 0
dtmDate = #1/1/1601#
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
dtmDate = #1/1/1601#
Else
dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow)/600000000 - lngBias)/1440
End If
End If
' Display values for the user.
If (dtmDate = #1/1/1601#) Then
Wscript.Echo strDN & ";Never"
Else
Wscript.Echo strDN & ";" & dtmDate
End If
adoRecordset.MoveNext
Loop
' Clean up.
adoRecordset.Close
adoConnection.Close
С уважением, Andrew V. Golubenkoff
Системный Администратор - OJSС "Bank of Cyprus"
Автор: =>DeViL<= Apr 6 2011, 20:14
(Blick @ Jul 13 2010, 10:39)
Коллеги, нужен скрипт.
Суть такая.
Допустим, ребутнулся сервак.
Чтобы запустить определённую прогу, мне нужно залогиниваться.
Нужен скрипт, который бы без залогинивания запускал определённую прогу от имени определённого юзера домена.
Хоть уже и не актуально, но может кому-то ещё понадобится..
Как раз вчера искал решение.
Самым простым оказалось добавление задания в планировщике "при включении компьютера" и выбор нужного пользователя, от которого запускать.
Работает нормально: при перезагрузке без никакого воздействия со стороны запускается приложение от нужного юзера (без входа в систему).
И не забываем проверить, включена ли служба планировщика
Кстати, по многим вопросам выше советую почитать про WMI - очень мощная вещь..
Автор: -AiD- May 3 2011, 20:08
(amee @ Apr 5 2011, 16:16)
Когда пользователь последний раз входил в систему:» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
' LastLogonTime.vbs
' VBScript program to determine when each user in the domain last logged
' on. Domain must be at Windows Server 2003 Functional Level.
Option Explicit
Dim objRootDSE, adoConnection, adoCommand, strQuery
Dim adoRecordset, strDNSDomain, objShell, lngBiasKey
Dim lngBias, k, strDN, dtmDate, objDate
Dim strBase, strFilter, strAttributes, lngHigh, lngLow
' Obtain local Time Zone bias from machine registry.
' This bias changes with Daylight Savings Time.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
& "TimeZoneInformation\ActiveTimeBias")
If (UCase(TypeName(lngBiasKey)) = "LONG") Then
lngBias = lngBiasKey
ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
lngBias = 0
For k = 0 To UBound(lngBiasKey)
lngBias = lngBias + (lngBiasKey(k) * 256^k)
Next
End If
Set objShell = Nothing
' Determine DNS domain from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
Set objRootDSE = Nothing
' Use ADO to search Active Directory.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection
' Search entire domain.
strBase = "<LDAP://" & strDNSDomain & ">"
' Filter on all user objects.
strFilter = "(&(objectCategory=person)(objectClass=user))"
' Comma delimited list of attribute values to retrieve.
strAttributes = "distinguishedName,lastLogonTimeStamp"
' Construct the LDAP syntax query.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
' Run the query.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 60
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute
' Enumerate resulting recordset.
Do Until adoRecordset.EOF
' Retrieve attribute values for the user.
strDN = adoRecordset.Fields("distinguishedName").Value
' Convert Integer8 value to date/time in current time zone.
On Error Resume Next
Set objDate = adoRecordset.Fields("lastLogonTimeStamp").Value
If (Err.Number <> 0) Then
On Error GoTo 0
dtmDate = #1/1/1601#
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
dtmDate = #1/1/1601#
Else
dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow)/600000000 - lngBias)/1440
End If
End If
' Display values for the user.
If (dtmDate = #1/1/1601#) Then
Wscript.Echo strDN & ";Never"
Else
Wscript.Echo strDN & ";" & dtmDate
End If
adoRecordset.MoveNext
Loop
' Clean up.
adoRecordset.Close
adoConnection.Close
С уважением, Andrew V. Golubenkoff
Системный Администратор - OJSС "Bank of Cyprus"
Ого как у вас там в банке все усложняют!
Проще так:
@echo off
cls
echo For user %1:
net user %1 /domain | find /i "last logon"
где %1 - User Principal Name, передаем входным параметром в батник с вышеозначеными строками.
Пользуйтесь на здоровье, подходит для любого функционального уровня домена
Автор: nerve Jun 7 2011, 21:07
возможен ли скрипт создания (не запуска) впн-подключения?
Автор: stinky Jun 12 2011, 11:43
(nerve @ Jun 7 2011, 22:07)
возможен ли скрипт создания (не запуска) впн-подключения?
наверное, как-то так: http://www.windowsecurity.com/articles/Windows-Server-2008-Connection-Manager-Administration-Kit.html
Автор: -AiD- Jul 3 2011, 13:50
(nerve @ Jun 7 2011, 22:07)
возможен ли скрипт создания (не запуска) впн-подключения?
или так: http://itgalaxy.net/fast-setup-of-vpn-and-dial-up/
Автор: PershaStudia Nov 21 2011, 14:03
Не знаю, повтор или нет, но тоже поделюсь фигнюшкой)
Искал скрипт, так чтобы забросить на все компьютеры домена папку, в итоге соорудили простенькие cmd'шки:
Copy1.cmd:
for /F %%i in (список_компов.txt) do call 2.cmd %%i
Copy2.cmd:
mkdir \\%1\C$\папка
copy C:\исходный_путь\*.* \\%1\C$\итоговый_путь\
В отдельный текстовый файлы выписываем названия всех компьютеров внутри домена, и название txt вписываем в первый cmd.
Автор: -AiD- Dec 20 2011, 12:52
Вместо
список_компов.txt
я бы сделал так:
for /f %%i in ('"net view|findstr \\"') do call 2.cmd %%i
Автор: next1983 Feb 6 2012, 21:09
Помогите со скриптом.
Нужно отслеживать изменения в одном текстовом файле. В случае изменения файла выполнить запустить батник. В идеале с передачей внесенных изменений.
З.Ы. Требуется отслеживание состояния некой Системы. В случае проблем Система пишет лог. Вот часть этого лога нужно отправить СМС. Как отправлять СМС я знаю - http://nhutils.ru/forum/viewtopic.php?f=3&t=16
Upd:
Итоговый скрипт:
:loop
@fc new.txt old.txt
@if %ERRORLEVEL%==1 (
@fc new.txt old.txt /A > nhsms\1.txt
@for /F "tokens=7" %%i in (nhsms\1.txt) do @echo %%i>nhsms\2.txt
nhsms\nhsmscl.exe
del old.txt
sleep 3
copy new.txt old.txt
)
sleep 3
@goto loop
Расшифровка (может кому-то еще понадобится):
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Проверяем есть ли различие в файлах new.txt и old.txt
Если есть,то
>Записываем строку различия (+"служебная" информация) в файл 1.txt (вообще-то выводится первая и последняя строка различий, но у меня отличаются файлы только одной строкой)
>Из файла забираем 7-е слово со строки различия (слова разделены пробелами)
>Запускаем программу отправки СМС
>Инициализирую новый Удаляем старый файл
>Ждем 3с на всякий случай
>Пишем новый old файл.
Ждем 3с затем скрипт выполняется заново
sleep.exe взять http://www.windowsfaq.ru/images/stories/files/sleep.exe
ПО для отправки-приема СМС http://nhutils.ru/sms.htm
Спасибо всем откликнувшимся и отдельный мегареспект
Disconnect
Автор: -13- Feb 7 2012, 9:25
http://tailforwin32.sourceforge.net/
Автор: Disconnect Feb 7 2012, 10:48
fc newfile.txt oldfile.txt
if %ERRORLEVEL%==1 then (......
(next1983 @ Feb 6 2012, 21:09)
Автор: Disconnect Feb 8 2012, 13:19
Как то так:
for /F "tokens=6" %i in (nhsms\1.txt) do echo %i
(next1983 @ Feb 8 2012, 0:51)
4.8. Злоупотребление цитированием - оверквотинг/гиперквотинг (цитирование без необходимости). Также запрещено цитировать/личить линки, которые были скрыты тегом hide.
Цитировать собеседника необходимо по минимуму (иногда можно вообще не цитировать, если ваше сообщение идет сразу после заданного вопроса или сообщения, на которое Вы хотите ответить, достаточно написать, кому адресовано ваше сообщение). Множественные повторы одного и то же текста на одной и той же странице, тем более с изображениями, излишни и только засоряют форум, поэтому при цитировании оставляйте только ту часть сообщения, которую вы хотите прокомментировать.
Автор: olexande Feb 8 2012, 21:17
Для задержки можно еще пинговать 127.0.0.1 с указанием кол-ва пакетов.
Задержка получается порядка 1 пакета на секунду
Автор: next1983 Feb 9 2012, 13:31
Итоговый скрипт:
:loop
@fc new.txt old.txt
@if %ERRORLEVEL%==1 (
@fc new.txt old.txt /A > nhsms\1.txt
@for /F "tokens=7" %%i in (nhsms\1.txt) do @echo %%i>nhsms\2.txt
nhsms\nhsmscl.exe
del old.txt
sleep 3
copy new.txt old.txt
)
sleep 3
@goto loop
Расшифровка (может кому-то еще понадобится):
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Проверяем есть ли различие в файлах new.txt и old.txt
Если есть,то
>Записываем строку различия (+"служебная" информация) в файл 1.txt (вообще-то выводится первая и последняя строка различий, но у меня отличаются файлы только одной строкой)
>Из файла забираем 7-е слово со строки различия (слова разделены пробелами)
>Запускаем программу отправки СМС
>Инициализирую новый Удаляем старый файл
>Ждем 3с на всякий случай
>Пишем новый old файл.
Ждем 3с затем скрипт выполняется заново
sleep.exe взять http://www.windowsfaq.ru/images/stories/files/sleep.exe
ПО для отправки-приема СМС http://nhutils.ru/sms.htm
Спасибо всем откликнувшимся и отдельный мегареспект
Disconnect
Автор: Blick Mar 1 2012, 10:27
Суть.
Есть несколько компов.
Нужен скрипт (ну или батник), который при запуске коннектится к удалённому реестру и вносит правку в одну из веток. Меняет один параметр на другой.
Как реализовать?
Автор: -AiD- Mar 1 2012, 10:43
@echo off
REG DEL \\IP_or_Hostname\HKLM\SYSTEM\SomePath\Path\OurDataHere /v Data /t REG_DWORD /d 1 /f
REG ADD \\IP_or_Hostname\HKLM\SYSTEM\SomePath\Path\OurDataHere /v Data /t REG_DWORD /d 2 /f
Естественно нужно иметь права доступа к удаленному реестру.
Полезно также просмотреть:
wincmd>REG DEL /?
wincmd>REG ADD /?
Автор: Blick Mar 1 2012, 11:02
Спасибо.
Но есть нюанс.
Компы не в домене и требуют авторизации.
Как её прописать в скрипте?
Автор: -AiD- Mar 1 2012, 15:32
Запустите скрипт от имени пользователя на удаленной машине с правами правки реестра.
cmd> runas /noprofile /user:remotemachine\administrator changeregistry.bat
Автор: next1983 Mar 19 2012, 14:48
Программа при запуске выдает окно с вопросом и ответами "ОК", "Отмена". Как мне сделать автоматическое "нажатие" ОК?
upd. Вроде нашел тут http://dslnet.ru/showthread.php?t=78338 с ссылкой на скрипты отсюда: http://www.script-coding.com/AutoHotkeyTranslation.html в частности сюда.
Автор: next1983 Mar 26 2012, 8:37
Как сделать так, чтобы после
fc new.txt old.txt /A > 1.txt
В файле 1.txt оставались только результаты сравнения без служебной информации "Результат сравнения файлов бла-бла-бла"
Автор: fli Apr 25 2012, 19:21
(next1983 @ Mar 26 2012, 9:37)
Как сделать так, чтобы после
fc new.txt old.txt /A > 1.txt
В файле 1.txt оставались только результаты сравнения без служебной информации "Результат сравнения файлов бла-бла-бла"
fc a.txt b.txt | findstr /V Сравнение > ab.txt
так?
Автор: daysleeper May 15 2012, 13:06
Написал бэкап для медка на powershell.
Может кому пригодится.
# Останавливаем сервис медка.
stop-service -name zvitgrp
# Создаем алиас "sz" для 7zip
set-alias sz "C:\Program Files (x86)\7-Zip\7z.exe"
# Создаем переменную "$date" с текущей датой и $backup с путем для архивов
$date = (get-date -uformat %d.%m.%y)
$backup = "R:\SERVERS\medok"
$CurrentDate = Get-Date
# Архивируем каталог медка в фаил с текущей датой
sz a $backup\$date.7z "C:\Documents and Settings\All Users\Application Data\Medoc\Medoc\"
# Запускаем сервис медка.
start-service -name zvitgrp
# Удаляем файлы старше 7 дней
Get-ChildItem $backup | Where-Object { $_.LastWriteTime -lt $CurrentDate.AddDays(-7) } | Remove-Item
Автор: warta Jun 13 2012, 17:17
Ребята тут появилась задачка, нужно найти скрипт/ПО, которое при создании/редактирования документов MS Office, Acrobat и т. д. в поле Title автоматом проставляет дату, названия и автора/редактора документа. Никто не встречал что-то похожее?
Автор: daysleeper Jun 13 2012, 21:09
(warta @ Jun 13 2012, 18:17)
Ребята тут появилась задачка, нужно найти скрипт/ПО, которое при создании/редактирования документов MS Office, Acrobat и т. д. в поле Title автоматом проставляет дату, названия и автора/редактора документа. Никто не встречал что-то похожее?
Тут AD и SharePoint нужны. Тогда версии документа будут учитываться, в зависимости от того, кто что и когда редактировал.
Через скрипты это может и можно, но как по мне это как изобретать велосипед.
Бесплатный skydrive тоже позволяет это делать.
Автор: warta Jun 14 2012, 8:51
Спасибо, но skydrive не вариант! И AD и SharePoint есть! Может еще есть какие то советы! Буду очень признателен!
Всем спасибо - вопрос снят, разобрался!
Автор: artem.ultra Aug 1 2012, 9:33
нашел скрип для мониторинга сервера печати.
так как сам в повершеле ничего не знаю прошу вашей помощи
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
cls
$CurrentDate = Get-date
$date = $CurrentDate.AddDays(-1)
$yesterday = ($CurrentDate) — (new-timespan -day 1)
$a = «<style>»
$a = $a + «BODY{background-color:peachpuff;}»
$a = $a + «TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}»
$a = $a + «TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}»
$a = $a + «TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}»
$a = $a + «</style>»
$EventLog = get-winevent -logname «Microsoft-Windows-PrintService/Operational» | Select UserID, TimeCreated, UserName, MachineName, Message, ID
$EventLog | ForEach-Object {
$_.UserName = $_.UserID.Translate([security.principal.ntaccount])}$EventLog | sort-object -property UserName,TimeCreated | where {$_.ID -eq «307«} | where {$_.timecreated -ge $yesterday} | ConvertTo-Html -head $a -body «<H2>PrintService</H2>» -As TABLE -Property TimeCreated, UserName, MachineName, Message | Out-File -FilePath «C:\PRNLOG\$($yesterday.ToString(«yyyyMMdd»)).html
в нем что то не правильно, помогите с исправлением...
Автор: Spyder3W Aug 1 2012, 11:00
На какой ОС ты это запускаешь?
Автор: artem.ultra Aug 1 2012, 11:28
Windows Server 2008R2
Автор: Spyder3W Aug 1 2012, 11:28
вот что я могу предварительно сказать
нужно включить Microsoft-Windows-PrintService/Operational журнал
не понятный кусок
| ForEach-Object {$_.UserName = $_.UserID.Translate([security.principal.ntaccount])}$EventLog |
ссылку на источник
Автор: artem.ultra Aug 1 2012, 12:07
(Spyder3W @ Aug 1 2012, 12:28)
нужно включить Microsoft-Windows-PrintService/Operational журнал
включил
http://vladimirmalikov.com/%D0%B0%D1%83%D0%B4%D0%B8%D1%82-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0-%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B8-%D0%B2-windows-server-2008r2/(МИР)
Автор: Koka-ftp Aug 1 2012, 12:41
(artem.ultra @ Aug 1 2012, 13:07)
http://vladimirmalikov.com/%D0%B0%D1%83%D0%B4%D0%B8%D1%82-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0-%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B8-%D0%B2-windows-server-2008r2/(МИР)
подправил код, должно работать
зы автор источника "<красаффчик>"
cls
$CurrentDate = Get-date
$date = $CurrentDate.AddDays(-1)
$yesterday = ($CurrentDate) — (new-timespan -day 1)
$a = "<style>"
$a = $a + "BODY{background-color:peachpuff;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}"
$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"
$a = $a + "</style>"
$EventLog = get-winevent -logname "Microsoft-Windows-PrintService/Operational" | Select UserID, TimeCreated, UserName, MachineName, Message, ID
$EventLog | ForEach-Object {
$_.UserName = $_.UserID.Translate([security.principal.ntaccount])}$EventLog | sort-object -property UserName,TimeCreated | where {$_.ID -eq "307"} | where {$_.timecreated -ge $yesterday} | ConvertTo-Html -head $a -body "<H2>PrintService</H2>" -As TABLE -Property TimeCreated, UserName, MachineName, Message | Out-File -FilePath "C:\PRNLOG\$($yesterday.ToString("yyyyMMdd")).html"
Автор: artem.ultra Aug 1 2012, 12:58
создал текстовый файл, туда забил этот скрипт.
переименовал файл в ps1
запустил но ничего не произошло.
что то наверно не так делаю
Автор: Spyder3W Aug 1 2012, 13:01
Koka-ftp
гы-ы-ы-ы, а ты проверял
(artem.ultra @ Aug 1 2012, 13:58)
создал текстовый файл, туда забил этот скрипт.
переименовал файл в ps1
запустил но ничего не произошло.
что то наверно не так делаю
ну кто так делает, ошибку в студию
Автор: artem.ultra Aug 1 2012, 13:29
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
ForEach-Object : Не удается преобразовать "System.Object[]" в тип "System.Management.Automation.ScriptBlock", необходим
ый для параметра "Process". Указанный метод не поддерживается.
C:\testPrint.ps1:12 знак:27
+ $EventLog | ForEach-Object <<<< {
+ CategoryInfo : InvalidArgument: (
[ForEach-Object], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.ForEachObjectCommand
а как правильно запускать скрипт?
Автор: Spyder3W Aug 1 2012, 13:42
в том то и нюанс что проблема в том куске что я писал
Автор: artem.ultra Aug 1 2012, 13:54
вот блин.
а в реальности скрипт бомба, если работать будет
Автор: Spyder3W Aug 1 2012, 13:58
а он и рабочий только автор молоток выложил "верно" что б другие немного погемороились и мозги освежили
вот как для Koka-ftp, у видел кавычки и поправил а остальной код не глядел
Автор: artem.ultra Aug 1 2012, 14:04
ну может поглядишь?
очень нужно, чесно
Автор: Spyder3W Aug 1 2012, 14:14
Здесь вроде все верно, целиком скрипт не проверял
$CurrentDate = Get-date
$date = $CurrentDate.AddDays(-1)
$yesterday = ($CurrentDate) — (new-timespan -day 1)
$a = "<style>"
$a = $a + "BODY{background-color:peachpuff;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}"
$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"
$a = $a + "</style>"
дальше автор использует
$EventLog = get-winevent -logname "Microsoft-Windows-PrintService/Operational" | Select UserID, TimeCreated, UserName, MachineName, Message, ID
хотя я б использовал
$EventLog = get-winevent -ProviderName Microsoft-Windows-PrintService | Select UserID, TimeCreated, UserName, MachineName, Message, ID
ну и завершает это все тем непонятным куском, а точнее там не полный скрипт
$EventLog | ForEach-Object {$_.UserName = (new-object security.principal.securityidentifier $_.UserID).translate([security.principal.ntaccount])}
$EventLog | sort-object -property UserName,TimeCreated | where {$_.ID -eq 307} | where {$_.timecreated -ge $yesterday} | ConvertTo-Html -head $a -body PrintService</H2>» -As TABLE -Property TimeCreated, UserName, MachineName, Message | Out-File -FilePath "C:\PRNLOG\$($yesterday.ToString("yyyyMMdd")).html"
FULL!!!!!
$CurrentDate = Get-date
$date = $CurrentDate.AddDays(-1)
$yesterday = ($CurrentDate) — (new-timespan -day 1)
$a = "<style>"
$a = $a + "BODY{background-color:peachpuff;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:thistle}"
$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"
$a = $a + "</style>"
$EventLog = get-winevent -ProviderName Microsoft-Windows-PrintService | Select UserID, TimeCreated, UserName, MachineName, Message, ID
$EventLog | ForEach-Object {$_.UserName = (new-object security.principal.securityidentifier $_.UserID).translate([security.principal.ntaccount])}
$EventLog | sort-object -property UserName,TimeCreated | where {$_.ID -eq 307} | where {$_.timecreated -ge $yesterday} | ConvertTo-Html -head $a -body "<H2>PrintService</H2>" -As TABLE -Property TimeCreated, UserName, MachineName, Message | Out-File -FilePath "C:\$($yesterday.ToString("yyyyMMdd")).html"
С тебя бутылка пива!
PS: Этот скрипт будет работать на новых ОС 2008, 7, 8 но не в 2003
Автор: artem.ultra Aug 1 2012, 14:28
спасибо большое!
когда и где можно передать бутылку пива (и какого) в твои владения?
---
как нибудь, когда будем собираться
Spyder3W
Автор: Sintorres Aug 2 2012, 11:07
(Spyder3W @ Aug 1 2012, 15:14)
PS: Этот скрипт будет работать на новых ОС 2008, 7, 8 но не в 2003
А можно ли что то сделать чтобы работало на 2003?
Автор: daysleeper Aug 2 2012, 13:04
(Sintorres @ Aug 2 2012, 12:07)
А можно ли что то сделать чтобы работало на 2003?
попробуй поставить powershell
Автор: Spyder3W Aug 2 2012, 13:07
(daysleeper @ Aug 2 2012, 14:04)
попробуй поставить powershell
не решит проблему
Автор: daysleeper Aug 2 2012, 13:24
(Spyder3W @ Aug 2 2012, 14:07)
не решит проблему
у меня работает через батник на 2003. (переделывать на павершел лень и не вижу смысла когда и так все работает)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
dumpel.exe -s localhost -l system -m print -format dts -e 10 -d 360 -t -f c:\printlog.txt
dumpel.exe отдельная прога. надо скачать и положить в system32
умеет парсить виндовые логи. она жутко древняя. находил что то новее, но лень было переделывать.
из текстового файла потом отлично можно в екселе инфу разгребать.
если будет надо, могу помочь с екселем.
Автор: Sintorres Aug 2 2012, 13:28
(daysleeper @ Aug 2 2012, 14:04)
попробуй поставить powershell
Оч смешно.
ПШ установлен.
(Spyder3W @ Aug 2 2012, 14:07)
не решит проблему
Жаль.
(daysleeper @ Aug 2 2012, 14:24)
у меня работает через батник на 2003.
Пасиб за батник. С экселем проблем нет...
Автор: daysleeper Aug 2 2012, 14:30
(Sintorres @ Aug 2 2012, 14:28)
Пасиб за батник. С экселем проблем нет...
Это хорошо.
На самом деле нужные отчеты через сводные таблици построить это самое трудоемкое, но и самое удобное и гибкое решение.
Автор: nerve Aug 17 2012, 11:08
парни помогите решить задачку.
- есть файл1 с содержимым (например 2 или 3 строки)
- есть файл2, куда содержимое первого файла надо добавить в конец
- нужен скрипт, который при наличии обоих файлов копирует содержимое из файла1 (или вообще копирует заданное значение в самом скрипте) в файл2, после чего удаляет себя.
необходимо запускать на винХР
Автор: olexande Aug 17 2012, 16:16
Если file существует, то копируем ...
if exist file copy ...
парни помогите решить задачку.
- есть файл1 с содержимым (например 2 или 3 строки)
копировать нужно ВСЕ или только 2-ю и 3-тю строки? Если все, то это простое объединение файлов командой копи
Автор: javelin Sep 24 2012, 18:41
Вот вам bulletproof скрипт упорядочения рабочего стола
http://www.techrepublic.com/article/organize-windows-desktop-with-virtual-program-groups/5034408
Автор: ArxistratiG Oct 15 2012, 16:37
(ArxistratiG @ Oct 15 2012, 17:05)
Доброго времени суток!
Подскажите скрипт (через выполнения заданий виндовс) чтоб проводить ротацию логов Squid
Спасибо!
(UUVtQD @ Oct 15 2012, 17:22)
Алоха!
Якщо використовується squid для Windows то буде щось типу цього (сам не перевіряв, але кажуть що працює
) :
@echo off
SET SQUID_LOG_PATH=C:\squid\var\logs
net stop pcnetprovider
net stop squidnt
FOR /F "tokens=1-4 delims=/, " %%i in ('date /t') do set YYYYMMDD=%%l-%%k-%%j
ren "%SQUID_LOG_PATH%\access.log" "access-%YYYYMMDD%.log"
net start squidnt
net start pcnetprovider
Зупиняє squid, акркйменовує лог в access-YYYY-MM-DD.log і стартує squid. Юзати через Windows Task Scheduler.
Enjoy!
@echo off
REM
REM Squid Log Rotation Script by PaperCut Software Int. Pty Ltd
REM
REM The location of the squid log files
SET SQUID_LOG_PATH=E:\Storage\Logs\Squid
REM Stop the squid service
net stop squid
FOR /F "tokens=1-4 delims=/, " %%i in ('date /t') do set YYYYMMDD=%%l-%%k-%%j
REM Rename the log file
ren "%SQUID_LOG_PATH%\access.log" "access-%YYYYMMDD%.log"
ren "%SQUID_LOG_PATH%\store.log" "store-%YYYYMMDD%.log"
скрипт роботает только место даты файлу присваивает access-----.log
Подскажите как ету строку(FOR /F "tokens=1-4 delims=/, " %%i in ('date /t') do set YYYYMMDD=%%l-%%k-%%j
) заставить брать правильное время и дату
Автор: fli Oct 16 2012, 9:04
Есть ли в cmd аналог unix команды echo $?
?
Автор: ArxistratiG Oct 16 2012, 10:37
Скрипт ротаци и архивирывания лог файлов сквида Windows.
@echo off
REM
REM Squid Log Rotation Script by PaperCut Software Int. Pty Ltd
REM
REM Stop the squid service
net stop squid
@SET CPATH=E:\Storage\Logs\Squid
@SET BCPATH=E:\Storage\Logs\Squid
@SET RARSTR=D:\Progra~2\winrar\winrar.exe a -ac -idp -m5 -md4096 -os -r -t -y -ep1 -ms -df -ag+YYYY_MM_DD_A_NN -ilogd:\windows\log_sq.log
@SET FILENAME=-access
@SET FILENAME1=-store
@%RARSTR% %BCPATH%\%FILENAME%.rar %CPATH%\access.log
@%RARSTR% %BCPATH%\%FILENAME1%.rar %CPATH%\store.log
REM Restart the squid service
net start squid
__________________________________________________________________________
#@SET RARSTR (Место где у Вас седит Winrar)
#log d:\windows\log_sq.log (место кудада ложиться лог рара)
#@SET CPATH, @SET BCPATH деректори откуда будут браться и куда будут складываться файлы
#SET FILENAME имена файлов + дата время месяц создания и прядковй номер (ag+YYYY_MM_DD_A_NN ) _01 _02 есле запускать несколько раз в день
#Progra~2 ето на х64 винде Program Files х86, Progra~1 обычная Program Files
Автор: zlobster Nov 26 2012, 23:07
Нужен Спец, который поможет или объяснит, как написать скрипт VB, PS, CMD.
Идея такая:
Есть файл в котором записаны:
- полный путь файла
- размер файла который прочитан, т.е. если он прочитан до конца, то соответствует размеру файла указанному в пути
и так много раз файл/прочитанный размер
Есть каталог, в котором эти файлы.
Надо из файла взять записи и сверяя их перемещать те которые прочитаны до конца в папку.
Что курить, где копать?!
Автор: fli Dec 14 2012, 15:33
подскажите как зеркалировать папку bat скриптом?
аналог rsync -av --delete
Автор: olexande Dec 29 2012, 14:00
robocopy /mir
Умеет еще докачивать и ограничивать нагрузку на канал. Используем найденный почти максимум - 2050
Автор: -AiD- Dec 29 2012, 14:28
(fli @ Oct 16 2012, 9:04)
Есть ли в cmd аналог unix команды echo $?
?
echo %errorlevel%
Автор: -AiD- Jan 31 2013, 15:48
Проверить, входит ли Username в группу Active Directory Groupname:
NET GROUP "Groupname" /DOMAIN | find /I /C "Username"
Возвращает "1" если входит и "0" - если нет.
Автор: PRIHOD Feb 5 2013, 11:41
буду благодарен тем, у кого есть готовое решение(скрипт).
задача слить с фтп бекапы(архивы).
сверить список директорий локального и удаленного пк.
слить файлы, которых нет на локальном пк.
Автор: mzk Mar 13 2013, 15:32
Есть файл типа .xml - там всякая херня не нужная и нужные ссылки. Ссылки в тегах <href>http://site.name</href>. Их довольно таки много, около 2к сайтов и надо их достать оттуда. Есть ли скрипт, который будет дергать то, что в тегах и писать в отдельный файлик ?
Автор: Sintorres Mar 13 2013, 15:34
http://yandex.ua/yandsearch?text=%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80%20xml&clid=1771360&lr=143&ncrnd=426 Не?
Автор: mzk Mar 14 2013, 15:11
В общем такое решение моей задачи: самописный скрипт на php, вдруг кому пригодится.
<?php
$buff = file_get_contents("shops.xml");
$result = "";
$second_pos = 0;
$first_pos = strpos($buff, "<href>", $second_pos);
while ($first_pos != FALSE)
{
$first_pos = $first_pos + 6;
$second_pos = strpos($buff, "</href>", $first_pos);
if ($second_pos == FALSE)
break;
$str_size = $second_pos - $first_pos;
$str = substr($buff, $first_pos, $str_size);
$result = $result.$str."\r\n";
$first_pos = strpos($buff, "<href>", $second_pos + 7);
}
$to_file = fopen('g:\test.txt', 'a+');
fwrite($to_file,$result);
fclose ($p);
?>
Автор: olexande Mar 17 2013, 19:34
(PRIHOD @ Feb 5 2013, 11:41)
буду благодарен тем, у кого есть готовое решение(скрипт).
задача слить с фтп бекапы(архивы).
сверить список директорий локального и удаленного пк.
слить файлы, которых нет на локальном пк.
для заливки\скачки файлов по ftp пользовался штатной утилиткой с аналогичным названием.
Умеет работать из .bat-файлов, по т. н. скриптам, в которых указываются параметры авторизации и с чего сделать.
синхронизировать каталоги не пробовал
Автор: Freestyler May 31 2013, 9:12
Была потребность сделать скрипт на винде, который будет блочить учетки, lastlogin которых больше 90 дней.
Можно добавлять исключения, есть лог файл, который по выполнении скрипта отправляется на почту.
Делалось это все не для домена.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Set wshShell = WScript.CreateObject( "WScript.Shell" )
Dim strComputer
Dim objIADsContainer
Dim objIADsUser
Dim dtLastLogon
Dim objDictExcludeUsers
Dim i
dateStamp = Now()
Set objDictExcludeUsers = WScript.CreateObject("Scripting.Dictionary")
'****сюда добавляются учетные записи, которые не будут заблокрованы****'
With objDictExcludeUsers
.Add "bilanda", ""
.Add "ctl", ""
.Add "dejurn", ""
.Add "usesr", ""
End With
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Set objLog = objFSO.CreateTextFile("C:\blocked_users_log.txt")
objLog.WriteLine (cstr(dateStamp))
i=0
StrComputer = wshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
Set objIADsContainer = GetObject("WinNT://" & strComputer & ",computer")
objIADsContainer.Filter = Array("user")
For Each objIADsUser In objIADsContainer
On Error Resume Next
dtLastLogon = CDate(objIADsUser.LastLogin)
If Err.Number = 0 Then
On Error Goto 0
If DateDiff("d", dtLastLogon, Now()) > 90 And (objIADsUser.AccountDisabled = False) Then
If Not objDictExcludeUsers.Exists(objIADsUser.Name) Then
objLog.WriteLine "Blocked account: " & objIADsUser.Name & " Last login: " & dtLastLogon & vbNewLine
objIADsUser.AccountDisabled = True
objIADsUser.SetInfo
i=i+1
End If
End If
End If
Next
objLog.Close
if i=0 Then
WScript.Quit 0
End If
On Error Goto 0
Set S = CreateObject("Wscript.Shell")
set FSO=createobject("scripting.filesystemobject")
Call SendPost("smtp.server","to mail","from mail","Accounts blocked due to inactivity on "&StrComputer,"")
Function SendPost(strSMTP_Server,strTo,strFrom,strSubject,strBody)
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/smtpauthenticate")=0
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername")="blabla"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword")="xXx"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.server"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=25
Flds.Update
iMsg.Configuration=iConf
iMsg.To=strTo
iMsg.From=strFrom
iMsg.Subject=strSubject
iMsg.TextBody=strBody
Const FileToBeUsed = "C:\blocked_users_log.txt"
Set objLog = objFSO.OpenTextFile(FileToBeUsed)
iMsg.Textbody = objLog.ReadAll
objLog.Close
Set objLog = Nothing
iMsg.Send
End Function
Set iMsg=Nothing
Set iConf=Nothing
Set Flds=Nothing
Set i=Nothing
WScript.Quit 0
Автор: Neuromancer Sep 4 2013, 10:07
В каждой учетке домена прописано выполнение скрипта:
On Error Resume Next
Dim objNetwork, strDrive, objShell, objUNC
Dim strRemotePath, strDriveLetter, strNewName
strDriveLetter = "z:"
strRemotePath = "\\сервер\Шара$"
strNewName = "Общая папка"
mapped = false
Set objNetwork = CreateObject("WScript.Network")
Set oDrives=objNetwork.EnumNetworkDrives
For i = 0 to oDrives.Count - 1 Step 2
If oDrives.Item(i)=strDriveLetter Then mapped = true
Next
If mapped Then objNetwork.RemoveNetworkDrive strDriveLetter
If mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
If Not mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
Set objShell = CreateObject("Shell.Application")
objShell.NameSpace(strDriveLetter).Self.Name = strNewName
WScript.Quit
Он подключает сетевой диск.Кто может объяснить?Нужно чтобы вместе с папкой "Общая папка" монтировалься еще один диск "\\Общая папка\Договора" если у юзера есть доступ к ней. (Да я понимаю что Общая папка уже содержит папку договора,но нужен отдельный сетевой диск).
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Автор: lSnakel Oct 3 2013, 14:26
(Neuromancer @ Sep 4 2013, 11:07)
В каждой учетке домена прописано выполнение скрипта:
...
Set objNetwork = CreateObject("WScript.Network")
Set oDrives=objNetwork.EnumNetworkDrives
Отримує список при'єднаних мережевих дисків
For i = 0 to oDrives.Count - 1 Step 2
If oDrives.Item(i)=strDriveLetter Then mapped = true
Next
Перевіряє, чи є серед них z:
If mapped Then objNetwork.RemoveNetworkDrive strDriveLetter
If mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
If Not mapped Then objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
Якщо z: підключений, то відключити його, і перепідключити з заданими параметрами. Якщо ні, просто підключити(тут, як на мене, правильніше було б обійтися одним if-then-else)
Set objShell = CreateObject("Shell.Application")
objShell.NameSpace(strDriveLetter).Self.Name = strNewName
Присвоює диску ім'я.
В принципі, можна просто зкопіпастити код від
strDriveLetter до
objShell.NameSpace(strDriveLetter).Self.Name, тільки присвоїти нові значення потрібним змінним.
Щодо перевірки доступа, тут скоріше за все доведеться лізти в WMI, якщо питання ще актуальне, стукни в ПМ, спробую допомогти.
Автор: BANDIT(filmmaniac) Oct 18 2013, 9:02
Может у кого есть готовый скрипт для следующей задачи:
- периодически делать копии одного и того же файла на файловом сервере
ОС - WinSrv 2012
Просто не хочется из-за такой мелочи какой-то софт ставить.
Автор: Celin Oct 18 2013, 9:17
(BANDIT(filmmaniac) @ Oct 18 2013, 10:02)
Может у кого есть готовый скрипт для следующей задачи:
- периодически делать копии одного и того же файла на файловом сервере
ОС - WinSrv 2012
Просто не хочется из-за такой мелочи какой-то софт ставить.
С этим справится планировщик заданий и командная строка. Можно ещё архиватор вцепить для сжатия.
Автор: Sintorres Oct 18 2013, 9:43
Включить фичу Windows Server Backup, настроить, пользоваться.
Можно заюзать Robocopy из Windows Resource Kit (с WS2K8 должна быть доступна в как стандартный компонент) + планировщик.
ПС Ротация архивов нужна?
Автор: BANDIT(filmmaniac) Oct 18 2013, 9:45
Та не, там всё проще. Один файл где-то мб 10.
Планировщик + cmd подходят. Буду пробовать.
Спасибо.
Автор: Sintorres Oct 18 2013, 9:49
Robocopy с примерами скриптов http://www.cyberforum.ru/cmd-bat/thread792016.html
Автор: armageddon Nov 19 2013, 12:29
Ребят, помогите скриптиком, пожалуйста Нужно проверять доступность компа в сети по пингу, и если он не доступен в течении, скажем, 10-20 минут бутать комп, на котором запущен скрипт. Спасибо
Автор: olexande Dec 18 2013, 20:57
Пингал, потом "смотрел" ERRORLEVEL - покажет "уровень ошибки завершения последней задачи, используется в батниках" в аналогичных ситуациях.
По памяти:
ping 127.0.0.1 -n 1
echo ERRORLEVEL
Пропингует себя 1-м пакетом и выплюнет оную.
По желанию можно прикрутить условие и дальше действовать по обстоятельствам.
Автор: Toyota Feb 18 2014, 0:22
Добрый вечер, помогите сделать батник чтоб:
- С папки HP копировались все файлы в папку STD
- А в папке log создавался файлик txt с названием файлов, а также с датой и временем когда был скопирован каждый файл.
*Надо чтоб выводилось время копирования каждого файла по отдельности.
Так как файлы по несколько гигов, так и время появления в папке у них разное должно быть.
Автор: Neuromancer May 13 2014, 11:11
Исправил
Автор: daysleeper Jul 28 2014, 11:46
powershell
нужно оставлять 4 последних файла бэкапа, и удалять те, которые старше.
удалять старше 4х дней непроблема. как оставлять последние 4 файла, что-бы на выходные и на праздники не перекрывались?
Get-ChildItem $backup | Where-Object { $_.LastWriteTime -lt $CurrentDate.AddDays(-4) } | Remove-Item
Автор: daysleeper Jul 29 2014, 17:31
(daysleeper @ Jul 28 2014, 11:46)
powershell
нужно оставлять 4 последних файла бэкапа, и удалять те, которые старше.
удалять старше 4х дней непроблема. как оставлять последние 4 файла, что-бы на выходные и на праздники не перекрывались?
Get-ChildItem $backup | Where-Object { $_.LastWriteTime -lt $CurrentDate.AddDays(-4) } | Remove-Item
разобрался.
может кому пригодится.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
$sorce = "C:\source"
$N = 3
$a = Get-ChildItem $sorce | Sort-Object creationtime
$b = $a.length
if ($b -gt $N)
{while ($b -gt $N)
{ Get-ChildItem $sorce | Sort-Object creationtime | Select-Object -First 1 | Remove-Item
$a = Get-ChildItem $sorce | Sort-Object creationtime
$b = $a.length}}
Автор: I00matolog Feb 26 2015, 11:45
Задача банальна - раскидать всем юзерам на рабочий стол ярлык
Сервер 2008 вынь без домена.
т.е.
copy /y c:\tmp\LINK.lnk C:\Users\$I\Desktop
где $I - это перебор файлика с именами профилей
как это на винде делается?
for $i (cat list.txt)
do
copy /y c:\tmp\LINK.lnk C:\Users\$I\Desktop
done
?
Автор: Spectral Feb 26 2015, 11:51
(I00matolog @ Feb 26 2015, 11:45)
где $I - это перебор файлика с именами профилей
Не туда копаешь. В винде есть такой юзер, как дефолтный профиль Default. Его ярлыки будут у всех юзеров. Так проще, если у тебя нет отдельных юзеров, кому этот ярлык нельзя.
Автор: I00matolog Feb 26 2015, 11:54
(Spectral @ Feb 26 2015, 11:51)
Не туда копаешь. В винде есть такой юзер, как дефолтный профиль Default. Его ярлыки будут у всех юзеров. Так проще, если у тебя нет отдельных юзеров, кому этот ярлык нельзя.
дело в том - что мне необходимо заменить уже существующий ярлык у пользователей.
Через defult юзера - не получится.
Так юзера уже залогинились
Автор: Dr.Sydorenko Feb 26 2015, 12:02
(I00matolog @ Feb 26 2015, 11:45)
Задача банальна - раскидать всем юзерам на рабочий стол ярлык
Сервер 2008 вынь без домена.
т.е.
copy /y c:\tmp\LINK.lnk C:\Users\$I\Desktop
где $I - это перебор файлика с именами профилей
как это на винде делается?
for $i (cat list.txt)
do
copy /y c:\tmp\LINK.lnk C:\Users\$I\Desktop
done
?
Ну, FOR /?
Терминальник с кучей профилей?
Как-то так:
for /F %i IN ('dir /AD /B c:\users') DO copy /y c:\tmp\LINK.lnk "C:\Users\%i\Desktop\"
хмм...
должно быть (а не странный значек вместо слешей):
for /F %i IN ('dir /AD /B c:\users') DO copy /y c:\tmp\LINK.lnk "C:\Users\%i\Desktop\"
Автор: I00matolog Feb 26 2015, 12:21
так, термінальнік
Непредвиденное появление IN
(Dr.Sydorenko @ Feb 26 2015, 12:02)
for /F %i IN ('dir /AD /B c:\users') DO copy /y c:\tmp\LINK.lnk "C:\Users\%i\Desktop\"
хмм...
должно быть (а не странный значек вместо слешей):
for /F %i IN ('dir /AD /B c:\users') DO copy /y c:\tmp\LINK.lnk "C:\Users\%i\Desktop\"
Автор: Dr.Sydorenko Feb 26 2015, 12:24
если в cmd/bat-файле, то должно быть %%i
В пакетных файлах для команды FOR используется запись %%переменная вместо %переменная. Имена переменных учитывают регистр букв (%i отличается от %I).
Автор: I00matolog Feb 26 2015, 12:34
(Dr.Sydorenko @ Feb 26 2015, 12:24)
если в cmd/bat-файле, то должно быть %%i
а теперь рисует что "Ошибка в синтаксисе команды"
и выводит строку команды
C:\Users>for /F %i IN ('dir /AD /B C:\Users\')
Автор: Koka-ftp Feb 26 2015, 21:19
мож сюды копнуть)?
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$Home\Desktop\bla.lnk")
$Shortcut.TargetPath = "C:\Program Files (x86)\blabla\bla.exe"
$Shortcut.Save()
ну и как вариант
strDesktop = WshShell.SpecialFolders("AllUsersDesktop" )
set oShellLink = WshShell.CreateShortcut(strDesktop & "\bla.lnk" )
oShellLink.TargetPath = "c:\bla\bla.exe"
oShellLink.WindowStyle = 1
oShellLink.IconLocation = "c:\bla\bla.ico"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = "c:\bla"
oShellLink.Save
зы нужно создать всем или неким из файла?
Автор: Dr.Sydorenko Feb 26 2015, 23:04
(I00matolog @ Feb 26 2015, 12:34)
а теперь рисует что "Ошибка в синтаксисе команды"
и выводит строку команды
C:\Users>for /F %i IN ('dir /AD /B C:\Users\')
Странно, должно работать (это из 7-ки, 2008-й нет под рукой - нужно в справке перепроверить):
Microsoft Windows [Version 6.1.7601]
© Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
C:\Windows\system32>for /F %i IN ('dir /AD /B c:\users') DO dir "C:\Users\%i\Desktop\"
C:\Windows\system32>dir "C:\Users\All\Desktop\"
Системе не удается найти указанный путь.
C:\Windows\system32>dir "C:\Users\Classic\Desktop\"
Системе не удается найти указанный путь.
C:\Windows\system32>dir "C:\Users\Default\Desktop\"
Том в устройстве C не имеет метки.
Серийный номер тома: 20E0-9137
Содержимое папки C:\Users\Default\Desktop
14.07.2009 04:34 <DIR> .
14.07.2009 04:34 <DIR> ..
0 файлов 0 байт
2 папок 4 157 923 328 байт свободно
...
Автор: Dr.Sydorenko Feb 26 2015, 23:17
судя по https://technet.microsoft.com/en-us/library/cc754900.aspx в 2008-й тоже можно в in (<Set>) указывать выполнение команд
Автор: olexande May 13 2015, 11:20
Як варіант - через пошук (адміном) можна їх усі знайти та видалити, а 1-н потрібний "правильно" покласти ...
Автор: mukolaich May 16 2015, 19:39
Успешно и много пишу на PowerShell, напишу Форумчанам за наличие его потом в портфолио
Автор: Fanta May 16 2015, 22:45
(mukolaich @ May 16 2015, 20:39)
Успешно и много пишу на PowerShell, напишу Форумчанам за наличие его потом в портфолио
можно бросать заявки на скрипты?
Если да то вот один
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Есть AD и VPN построенный на Cisco. Они "дружат" между собой и если у юзера активирован Network Access Permison на вкладке Dial-In (скрин http://joxi.ru/8An0vjOcqXKzmO ) то он может пользоваться ВПНом используя свой доменный логин/пароль.
Но вся соль в том что ВПН разрешается только на определенный срок: день/неделя/декада/месяц.
Нужно автоматизировать прекращение доступа к ВПН.
Как я это вижу:
1) создается новый атрибут (или используется существующий) в котором указывается срок действия ВПН
2) При активации ВПНа пользователь добавляется в группу VPN
3) каждый день запускается скрипт который:
а) получает список юзеров группы VPN
б) проверяет каждого юзера и получает значение данного атрибута
в) если атрибут = сегодняшней дате то скрипт меняет значение Network Access Permison и удаляет юзера из группы
4) как опция: шлет мыло со списком удаленных юзеров.
Автор: olexande May 21 2015, 9:33
Де плануєте зберігати строк дії vpn-доступу?
Автор: Fanta May 21 2015, 9:49
(olexande @ May 21 2015, 10:33)
Де плануєте зберігати строк дії vpn-доступу?
це проблема
щоб не городити городи вирішили створювати групу на кожен день
тобто якщо юзеру дають ВПН до 01.12.2015 то в окремій ОУ створюється група "01-12-2015" і туди вноситься юзер
кожного вечора в 23.50 запускається скрипт який бере сьогоднішню дату і порівнює її з назвою групи.
якщо така група є то скрипт всім юзерам цієї групи виключає Network Access Permison і (опціонально) видаляє юзера з групи
ось такий велосипед який "централізує" все це діло.
Автор: olexande May 21 2015, 11:46
Теоретично, Вам може допомогти розширення схеми MS AD дублікатом поля користувача, як приклад "whenCreated".
Там як раз формат дата-час. Питання залишаэться, як зручно продивлятись, редагувати та слідкувати за "цими" датами...
Як варіант, можна створити і свою оснастку, чи тіпа сайту ...
Автор: Fanta May 21 2015, 11:57
(olexande @ May 21 2015, 12:46)
Теоретично, Вам може допомогти розширення схеми MS AD дублікатом поля користувача, як приклад "whenCreated".
Там як раз формат дата-час. Питання залишаэться, як зручно продивлятись, редагувати та слідкувати за "цими" датами...
Як варіант, можна створити і свою оснастку, чи тіпа сайту ...
так в тому то і фішка що можна кучу всього наворотити
але простіше тупо ставити юзеру галку і додавати його в групу. все інше має бути автоматизовано
Автор: Fanta May 26 2015, 10:13
(mukolaich @ May 16 2015, 20:39)
Успешно и много пишу на PowerShell, напишу Форумчанам за наличие его потом в портфолио
ще один:
вивести список файлів (і їх розташування) у яких довжина шляху більше 256 символів
Автор: biqbo Jul 13 2015, 21:04
Доброго времени суток.
Возникла проблема что сетка ложится по 5-6 раз в день, на минуты 3-4.
Устройсва которые подключены по wi-fi остаются подключены к точкам доступа, но "теряют" свои сетевые адреса. Тоже самое и на ПК которые подключены шнурком.
Есть ли у кого скрипт cmd/bat для пинга и сохранения результатов в текствой файл?
Поделитесь пожалуйста, с меня "+"
Заранее спасибо.
ПС. Паралельно гуглю в поисках )
Автор: gonivo Jul 13 2015, 23:10
ping i.ua >c:\1
Автор: HEAVY Jul 13 2015, 23:47
ping i.ua >c:\1.txt
Автор: mak_v_ Aug 5 2015, 11:42
Господа, нужен батник (под Шиндовс 2003) следующего содержимого:
1) Имеем список файлов в директории.
2) Необходимо пройтись по списку файлов и составить текстовй файл.
Например: имеем 3 файла:
file1, file2, file3
Необходимо на выходе получить текстовый файл с таким содержанием:
client.exe --sql="UPDATE row_files SET val='added_rowfile1' WHERE val='skipped_rowfile1' and type='well'"
client.exe --sql="UPDATE row_files SET val='added_rowfile2' WHERE val='skipped_rowfile2' and type='well'"
client.exe --sql="UPDATE row_files SET val='added_rowfile3' WHERE val='skipped_rowfile3' and type='well'"
Просю помощи....
Автор: Dr.Sydorenko Aug 5 2015, 12:03
(mak_v_ @ Aug 5 2015, 12:42)
Господа, нужен батник (под Шиндовс 2003) следующего содержимого:
Как-то так (для всех файлов в директории):
for /F %i IN ('dir /A /B c:\dir') DO @echo client.exe --sql="UPDATE row_files SET val='added_row%i' WHERE val='skipped_row%i' and type='well'" >> file.txt
Если в батнике, то заменить на %%i
если список файлов хранится в файле, то как-то так:
for /F %i IN (c:\dir\list.txt) DO @echo client.exe --sql="UPDATE row_files SET val='added_row%i' WHERE val='skipped_row%i' and type='well'" >> file.txt
Автор: mzk Aug 18 2015, 8:18
Ребята, нужна помощь в написании скрипта на PowerShell
Копирование файлов по сети (порядка 30-40 тысяч мелких файлов)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
$source = "c:\source\Библиотека"
$dest1 = "\\host1\c$\Program Files (x86)\P0\"
$dest1_1 = "\\host2\c$\Program Files (x86)\P0\Библиотека"
$dest2 = "\\host2\c$\Program Files (x86)\P0\"
$dest2_1 = "\\host2\c$\Program Files (x86)\P0\Библиотека"
$exclude = @('*.db','*.config')
Write-Output "Deleting from pc1..."
Remove-Item $dest1_1 -Recurse
Write-Output "Copying on pc1..."
Copy-Item $source -Destination $dest1 -Force -Recurse -Exclude $exclude
Write-Output "Complete pc1"
Write-Output "Deleting from pc2..."
Remove-Item $dest2_1 -Recurse
Write-Output "Copying on pc2..."
Copy-Item $source -Destination $dest2 -Force -Recurse -Exclude $exclude
Write-Output "Complete pc2"
Write-Output "Replacement fully completed."
Сначала нужно удалить всю папку "Библиотека" а потом скопировать новую из $source в $dest1 и $dest2 и тд... (всего 6).
Удаление происходит нормально, копирование тоже, но как только скрипт доходит до $dest2 удаляет там, то удаление происходит так же и в $dest1, одновременно короче.
Как это сделать по очереди?
Сначала $dest1, потом $dest2 и тд ?
В PowerShelle не силен, поэтому прошу помощи
Автор: Spyder3W Aug 18 2015, 10:41
(mzk @ Aug 18 2015, 9:18)
В конце каждого добавь
| Out-Null
Автор: mukolaich Aug 28 2015, 20:12
(mzk @ Aug 18 2015, 9:18)
Ребята, нужна помощь в написании скрипта на PowerShell
Копирование файлов по сети (порядка 30-40 тысяч мелких файлов)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
$source = "c:\source\Библиотека"
$dest1 = "\\host1\c$\Program Files (x86)\P0\"
$dest1_1 = "\\host2\c$\Program Files (x86)\P0\Библиотека"
$dest2 = "\\host2\c$\Program Files (x86)\P0\"
$dest2_1 = "\\host2\c$\Program Files (x86)\P0\Библиотека"
$exclude = @('*.db','*.config')
Write-Output "Deleting from pc1..."
Remove-Item $dest1_1 -Recurse
Write-Output "Copying on pc1..."
Copy-Item $source -Destination $dest1 -Force -Recurse -Exclude $exclude
Write-Output "Complete pc1"
Write-Output "Deleting from pc2..."
Remove-Item $dest2_1 -Recurse
Write-Output "Copying on pc2..."
Copy-Item $source -Destination $dest2 -Force -Recurse -Exclude $exclude
Write-Output "Complete pc2"
Write-Output "Replacement fully completed."
Сначала нужно удалить всю папку "Библиотека" а потом скопировать новую из $source в $dest1 и $dest2 и тд... (всего 6).
Удаление происходит нормально, копирование тоже, но как только скрипт доходит до $dest2 удаляет там, то удаление происходит так же и в $dest1, одновременно короче.
Как это сделать по очереди?
Сначала $dest1, потом $dest2 и тд ?
В PowerShelle не силен, поэтому прошу помощи
В принципе все правильно в скрипте, все отрабатывает последовательно и по очереди.
Единственное, нужно поменять Write-Output на Write-Host, это разные командлеты по принципу, использовать их тоже нужно в разных кейсах.
Out-Null нигде писать не надо.
(biqbo @ Jul 13 2015, 22:04)
Доброго времени суток.
Возникла проблема что сетка ложится по 5-6 раз в день, на минуты 3-4.
Устройсва которые подключены по wi-fi остаются подключены к точкам доступа, но "теряют" свои сетевые адреса. Тоже самое и на ПК которые подключены шнурком.
Есть ли у кого скрипт cmd/bat для пинга и сохранения результатов в текствой файл?
Поделитесь пожалуйста, с меня "+"
Заранее спасибо.
ПС. Паралельно гуглю в поисках )
Для этого есть 2 командлета:
Test-NetConnection -ComputerName www.contoso.com -InformationLevel Detailed | Out-File 'C:\Path\to\file.txt
Test-Connection -ComputerName www.contoso.com -Count 100500 | Out-File 'C:\Path\to\file.txt
Автор: Aleha Sep 8 2015, 11:33
Привет всем.
Нужна помощь со скриптом на vbs.
Задача стоит такая: есть пользователи в AD, есть компьютеры там же. Надо чтобы при логине пользователя на компьютер, в поле Description пользователя прописывалось имя компьютера.
Пока пришел к такому решению:
Dim adsinfo, ThisComp, oUser
' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
' Заносим данные в AD
'В поле Description учетки пользователя пишем имя компьютера
oUser.put "Description", ThisComp.cn
oUser.Setinfo
wscript.quit
Но так не подходит т.к. пользователи своими доменными УЗ заходят и на терминальные сервера, т.е. надо как то исключить их.
Все компьютеры названы одним и тем же паттерном (LND-WS0001, CPR-WS0001 и так далее, у нас четыре локации) а вот сервера бывают разные.
Думаю про какой то if then else, но язык vbs знаю из рук вон плохо.
Автор: Fanta Sep 8 2015, 14:05
(Aleha @ Sep 8 2015, 12:33)
Но так не подходит т.к. пользователи своими доменными УЗ заходят и на терминальные сервера, т.е. надо
Зазвичай такі скрипти треба "вішати" на ОУ де є ПК і зазвичай для ПК і Севрерів юзаються різні ОУ.
Якщо ж все погано то ви на ГПО де юзається цей скрипт повісьте ВМІ-фільтр який буде фільтрвувати ТС і на них ця політика не буде примінятися!
Автор: Aleha Sep 9 2015, 13:48
(Fanta @ Sep 8 2015, 15:05)
Зазвичай такі скрипти треба "вішати" на ОУ де є ПК і зазвичай для ПК і Севрерів юзаються різні ОУ.
Якщо ж все погано то ви на ГПО де юзається цей скрипт повісьте ВМІ-фільтр який буде фільтрвувати ТС і на них ця політика не буде примінятися!
Так скрипт предназначен для пользователя же, это logon-скрипт, потому отфильтровать так не получится, ни первым ни вторым способом.
Автор: lAero Dec 4 2015, 21:26
(Aleha @ Sep 8 2015, 11:33)
Привет всем.
Нужна помощь со скриптом на vbs.
Задача стоит такая: есть пользователи в AD, есть компьютеры там же. Надо чтобы при логине пользователя на компьютер, в поле Description пользователя прописывалось имя компьютера.
Пока пришел к такому решению:
Dim adsinfo, ThisComp, oUser
' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
' Заносим данные в AD
'В поле Description учетки пользователя пишем имя компьютера
oUser.put "Description", ThisComp.cn
oUser.Setinfo
wscript.quit
Но так не подходит т.к. пользователи своими доменными УЗ заходят и на терминальные сервера, т.е. надо как то исключить их.
Все компьютеры названы одним и тем же паттерном (LND-WS0001, CPR-WS0001 и так далее, у нас четыре локации) а вот сервера бывают разные.
Думаю про какой то if then else, но язык vbs знаю из рук вон плохо.
было бы логично и в компьютер прописывать пользователя, кто залогинен. у нас есть куча компьютеров и мы не знаем чьи они. идеи?
Автор: olexande Dec 10 2015, 21:02
Через пакет psexec можна дистанційно збирати за потребою ...
Без перезавантаження при перелогоні відпрацює правильно?
Автор: romchikss Jan 28 2016, 17:46
Приветствую!
OS Windows 2012 R2. Есть каталог с подкаталогами (очень много), у каждой папки нарезаны свои права, унаследование отключено. Нужно через powershell нарезать на каждый каталог/подкаталог доменному пользователю право Read only. Есть возможность ? Спасибо
Автор: mak_v_ Jan 28 2016, 18:33
https://technet.microsoft.com/ru-ru/library/cc753525(WS.10).aspx
Автор: artem.ultra Aug 26 2016, 14:58
нужен батник
1. подключаем сетевую шару с логином и паролем доменным \\192..168.150.150\back
2. проверяем файлы в этой шаре, если старше 30 дней - удаляем что там есть
3. копируем в эту шару файлы C:\Back
4. очищаем шару
5. размонтируем шару
как то так
запускать хочется через планировщика
Автор: Dik Aug 29 2017, 16:11
Господа, подмогните! Может кто где то видел или знает скрипт, который позволит делать выборки:
пользователи.тхт --->выборка AD ---> User+PC.txt
PC.txt ---> выборка AD ---> PC+User.txt
Тоесть выборка из АД данных на основе списков.
Автор: Koka-ftp Aug 29 2017, 16:32
не совсем понятнo описана задача)
если смотреть в сторону PS, то выборку из списка\текста можно делать командлетом Import-CSV
далее как-то так)
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Import-Module ActiveDirectory
$results = @()
$Users = Get-ADUser -Filter * -Properties *
foreach ($User in $Users) {
$GroupMembership = ($user.memberof | % { (Get-ADGroup $_).Name; } | Sort-Object) -join ';'
$results += $User.SamAccountName + ';' + (Get-ADGroup $user.PrimaryGroup).Name + ';' + $GroupMembership
}
$results | out-file ('C:\blar_{0}-{1:yyyyMMddHHmm}.csv' -f $env:userdomain,(Get-Date))
или
$results | Export-Csv -path ('C:\all_ad_groups_{0}-{1:yyyyMMddHHmm}.csv' -f $env:userdomain, (Get-Date)) -Encoding 'UTF8' -force -NoTypeInformation -UseCulture
Автор: Dik Aug 30 2017, 9:50
(Koka-ftp @ Aug 29 2017, 17:32)
не совсем понятнo описана задача)
если смотреть в сторону PS, то выборку из списка\текста можно делать командлетом
Имеется в виду, что есть список пользователей (например 100 имен), все учетки с указанными дескрипшинами (например есть логин Pupkin.V с дескрипшином Пупкин Василий).
Список записан в файл, тхт или csv ...
И вот задача вытащить из АД, по очереди используя список, и создать список в виде логин/дескрипшн юзера/имя ПК/время входа и записать это в файл.
Или наоборот, по имени ПК вытащить то же самое но про пользователя.
Автор: mak_v_ Sep 28 2017, 9:30
Можт у кого-то есть под рукой скриптик для АД (2к3) выгребающий список локальных админов со всех раб.станций?
Ну и в идеале конечно смена паролей для них-же.
Автор: Morftimg Apr 20 2018, 10:32
Помогите сделать людский скрипт для копирования профиля и данных пользователя и всех данных с диска Д.
Наваял скриптец но он не универсальный и не делает что я хочу.
NET USE \\Server\IPC$ /u:Server\user *password*
@echo off
set day=%date:~0,2%
set month=%date:~3,2%
set year=%date:~6,4%
Robocopy c:\users\Karpov \\Server\UserBackup\karpov%day%%month%%year%\ /E /A /DCOPY:T /R:2 /W:5 /MT:64
Что надо чтоб было СИСТЕМА WIN 10:
Авторизация на сетевой шаре и после бекапа размонтирование шары.
1. Универсальный скрипт, чтоб копировал профиль пользователя (только профили реальных пользователей, а не всех юзеров типа администратор и тд)
2. Все содержимое раздела D:\ исключая системный папки корзины и тд
3. К названию конечной папки чтоб дописывалась текущая дата, и вообще класно было бы если б было доступ 5 папок с датам допустим Karpov20042018 Karpov21042018 Karpov22042018 чтоб когда пишет 6 папку самая старая удалялась.
4. Хочется чтоб был батник, чтоб можно было вставить в обычный планировщик.
Очень надо срочно ) Спасибо.
Автор: Morftimg Apr 22 2018, 21:29
Помогите со скриптом, уже срочно надо
Автор: olexande Sep 9 2018, 20:19
Что надо чтоб было СИСТЕМА WIN 10:
Авторизация на сетевой шаре и после бекапа размонтирование шары.
Чим не влаштовує збережені системно паролі / мережеві диски ?
Простим перейменуванням можна організувати "глибину історії збереження" чи аналізувати дату створення
Рекомендую дату як частину імені файлу вивести в підкаталог (чи продублювати).
Автор: Morftimg Jan 18 2019, 16:45
Напомните простой скрип для удаления файлов с датой более надцать дней от сегодня?
Автор: qazzy Jan 18 2019, 22:28
(Morftimg @ Jan 18 2019, 16:45)
Напомните простой скрип для удаления файлов с датой более надцать дней от сегодня?
Как-то так
find /path/to/files -type f -mtime +5 -exec rm {} \;
Должно удалять старше 5 дней. Перед использованием проверить где-то, память она такая - лучше перепроверить.
Автор: mak_v_ Jan 18 2019, 23:35
(qazzy @ Jan 18 2019, 22:28)
Как-то так
find /path/to/files -type f -mtime +5 -exec rm {} \;
Должно удалять старше 5 дней. Перед использованием проверить где-то, память она такая - лучше перепроверить.
Люто плюсую!
Автор: Sintorres Jan 19 2019, 9:53
(Morftimg @ Jan 18 2019, 16:45)
Напомните простой скрип для удаления файлов с датой более надцать дней от сегодня?
Опубликовано sv (не проверено) в Пнд, 2015-03-09 16:40.
Раньше тоже так делал. Пока не пришло осознание, что лучше старый бекап, чем никакого. Все бывает, верно? И если по каким-то причинам бекап перестал выполняться, то find все также будет удалять файлы, пока не останется ни одного. При этом сообщение об ошибке при выполнении бекапа, например, на тот же email, также не помешает.
(qazzy @ Jan 18 2019, 22:28)
Как-то так
find /path/to/files -type f -mtime +5 -exec rm {} \;
Должно удалять старше 5 дней. Перед использованием проверить где-то, память она такая - лучше перепроверить.
А это вообще законно, для винды?
https://sysadmin-note.ru/udalenie-fajlov-starshe-n-dnej/ и https://bdseo.ru/kak-udalyat-fajly-starshe-10-dnej-na-windows
И для винды "http://forum.oszone.net/thread-263677.html"
Автор: qazzy Jan 19 2019, 14:35
(Sintorres @ Jan 19 2019, 9:53)
А это вообще законно, для винды?
https://sysadmin-note.ru/udalenie-fajlov-starshe-n-dnej/ и https://bdseo.ru/kak-udalyat-fajly-starshe-10-dnej-na-windows
И для винды "http://forum.oszone.net/thread-263677.html"
Упс, не обратил внимание
Автор: Alekssander Oct 23 2021, 9:23
Помогите плиз со скриптом.
Нужен скрипт для создания локального пользователя с правами администратора.
Десяток перепробовал, не работают.
Автор: Sub Focus Nov 4 2021, 19:55
Привет, ребята! пытаюсь локально расшарить скрипт на работе по установке драйверов и деплоя принтера с параметрами на машину.....все выходит кроме установки драйвера получаю вечно отказ в доступе
Делал через Powershell
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
# Get the ID and security principal of the current user account
$myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID);
# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;
# Check to see if we are currently running as an administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
# We are running as an administrator, so change the title and background colour to indicate this
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)";
$Host.UI.RawUI.BackgroundColor = "DarkBlue";
Clear-Host;
}
else {
# We are not running as an administrator, so relaunch as administrator
# Create a new process object that starts PowerShell
$newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";
# Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it's path
$newProcess.Arguments = "& '" + $script:MyInvocation.MyCommand.Path + "'"
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
# Start the new process
[System.Diagnostics.Process]::Start($newProcess);
# Exit from the current, unelevated, process
Exit;
}
# Run your code that needs to be elevated here...
Write-Host
Write-Host ″Menu″ -BackgroundColor White -ForegroundColor Red
Write-Host
Write-Host ″1. Kyocera TR1 in a center″ -ForegroundColor Green
Write-Host ″2. Kyocera TR2 near exit″ -ForegroundColor Green
Write-Host ″3. HP Color M477 in a center″ -ForegroundColor Green
Write-Host ″4. Exit″ -ForegroundColor Green
Write-Host
$choice = Read-Host ″Select the menu item″
Switch($choice){
1{$driver = "Kyocera Ecosys M2540dn KX"
$address = "10.252.128.18"
$name = "Kyocera TR1"
$sleep = "3"
$DriverLocation = Join-Path $pwd "\KX_Universal_Printer_Driver\64bit\OEMSETUP.INF"
# The invoke command can be added to specify a remote computer by adding -computername. You would need to copy the .inf file to the remote computer first though.
# This script has it configured to run on the local computer that needs the printer.
# The pnputil command imports the .inf file into the Windows driverstore.
# The .inf driver file has to be physically on the local or remote computer that the printer is being installed on.
$DriverLocation2 = Join-Path $pwd "\KX_Universal_Printer_Driver\"
Get-ChildItem $DriverLocation2 -Recurse -Filter "*inf" | ForEach-Object { PNPUtil.exe /add-driver $_.FullName /install }
#Invoke-Command {pnputil.exe /add-driver (Join-Path $pwd "\KX_Universal_Printer_Driver\64bit\OEMSETUP.INF") /install }
#Add-PrinterDriver -Name $driver
Start-Sleep $sleep
# This creates the TCP\IP printer port. It also will not use the annoying WSD port type that can cause problems.
# WSD can be used by using a different command syntax though if needed.
Add-PrinterPort -Name $address -PrinterHostAddress $address
start-sleep $sleep
Add-Printer -DriverName $driver -Name $name -PortName $address
Start-Sleep $sleep
# This prints a list of installed printers on the local computer. This proves the newly added printer works.
get-printer |Out-Printer -Name $name }
2{$driver = "Kyocera Ecosys M2540dn KX"
$address = "10.120.4.5"
$name = "Kyocera TR2 NE"
$sleep = "3"
# The invoke command can be added to specify a remote computer by adding -computername. You would need to copy the .inf file to the remote computer first though.
# This script has it configured to run on the local computer that needs the printer.
# The pnputil command imports the .inf file into the Windows driverstore.
# The .inf driver file has to be physically on the local or remote computer that the printer is being installed on.
$DriverLocation2 = Join-Path $pwd "\KX_Universal_Printer_Driver\"
Get-ChildItem $DriverLocation2 -Recurse -Filter "*inf" | ForEach-Object { PNPUtil.exe /add-driver $_.FullName /install }
#Invoke-Command {pnputil.exe /add-driver (Join-Path $pwd "\KX_Universal_Printer_Driver\64bit\OEMSETUP.INF") /install}
#Add-PrinterDriver -Name $driver
Start-Sleep $sleep
# This creates the TCP\IP printer port. It also will not use the annoying WSD port type that can cause problems.
# WSD can be used by using a different command syntax though if needed.
Add-PrinterPort -Name $address -PrinterHostAddress $address
start-sleep $sleep
Add-Printer -DriverName $driver -Name $name -PortName $address
# This prints a list of installed printers on the local computer. This proves the newly added printer works.
get-printer |Out-Printer -Name $name }
3{$driver = "Kyocera Ecosys M2540dn KX"
$address = "10.120.4.5"
$name = "Kyocera TR2 NE"
$sleep = "3"
# The invoke command can be added to specify a remote computer by adding -computername. You would need to copy the .inf file to the remote computer first though.
# This script has it configured to run on the local computer that needs the printer.
# The pnputil command imports the .inf file into the Windows driverstore.
# The .inf driver file has to be physically on the local or remote computer that the printer is being installed on.
Invoke-Command {pnputil.exe /add-driver (Join-Path $pwd "\KX_Universal_Printer_Driver\64bit\OEMSETUP.INF") /install}
#Add-PrinterDriver -Name $driver
Start-Sleep $sleep
# This creates the TCP\IP printer port. It also will not use the annoying WSD port type that can cause problems.
# WSD can be used by using a different command syntax though if needed.
Add-PrinterPort -Name $address -PrinterHostAddress $address
start-sleep $sleep
Add-Printer -DriverName $driver -Name $name -PortName $address
# This prints a list of installed printers on the local computer. This proves the newly added printer works.
get-printer |Out-Printer -Name $name $driver = "HP Color LaserJet MFP M477 PCL6"
$address = "10.252.128.17"
$name = "HP Color TR"
$sleep = "3"
# The invoke command can be added to specify a remote computer by adding -computername. You would need to copy the .inf file to the remote computer first though.
# This script has it configured to run on the local computer that needs the printer.
# The pnputil command imports the .inf file into the Windows driverstore.
# The .inf driver file has to be physically on the local or remote computer that the printer is being installed on.
Invoke-Command {pnputil.exe /add-driver (Join-Path $pwd "\KX_Universal_Printer_Driver\64bit\OEMSETUP.INF") /install}
#Add-PrinterDriver -Name $driver
Start-Sleep $sleep
# This creates the TCP\IP printer port. It also will not use the annoying WSD port type that can cause problems.
# WSD can be used by using a different command syntax though if needed.
Add-PrinterPort -Name $address -PrinterHostAddress $address
start-sleep $sleep
Add-Printer -DriverName $driver -Name $name -PortName $address
# This prints a list of installed printers on the local computer. This proves the newly added printer works.
get-printer |Out-Printer -Name $name
}
4{Write-Host ″Exit″; exit}
default {Write-Host ″Wrong choice, try again.″ -ForegroundColor Red}
}
Write-Host -NoNewLine "Press any key to continue...";
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown");
когда проводишь это с правами админа, принтер не сетапит, а если без, то драйвер....я уже устал читать одно и тоже и может кто-то тыкнет пальцем мне что я не так сделал
Invision Power Board
© Invision Power Services