Автор Тема: Скрипты для автоматизации административных задач.  (Прочитано 84479 раз)

0 Пользователей и 7 Гостей просматривают эту тему.

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4402
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Здесь размещаем скрипты. Обсуждение в других темах.
Первая строка каждого поста должна быть представлена в следующем формате:
Наименование скрипта#Язык программирования#автор

Например:
Подключение сетевого принтера и установка его принтером по умолчанию#JScript#ShS

« Последнее редактирование: 13 ноября 2010, 11:47:39 от Shurikz »

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4402
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: Скрипты.
« Ответ #1 : 26 октября 2010, 11:04:11 »
Подключение сетевого принтера и установка его принтером по умолчанию#JScript#ShS


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

Комментарии к скрипту см. здесь: http://shserg.ru/2009/12/01/script-add-network-shared-printer-set-as-default-printer/
 
PS Добавлю по просьбам трудящися: использование логон скрипта для подключения принтера - морально устаревшее решение. Для счатсливых обладателей (хотябы одного компьютера) с win Vistа и выше на борту, православнее будет использовать GPP
[color=#003399]http://technet.microsoft.com/en-us/library/cc731892(WS.10).aspx[/color]
и [color=#003399]http://www.techdays.ru/videos/1066.html[/color]
 
« Последнее редактирование: 09 января 2011, 22:18:26 от shs »

Оффлайн Fray

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6724
  • Рейтинг: 58
  • Пол: Мужской
    • Просмотр профиля
    • IT-Бложек
  • Откуда: Петербург
Re: Скрипты.
« Ответ #2 : 26 октября 2010, 11:14:35 »
Создание подписи в Microsoft Outlook. Изменение html-шаблона#VBScript#ivc

Const APPLICATION_DATA = &H1a&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(APPLICATION_DATA)
Set objFolderItem = objFolder.Self

'On Error Resume Next

ParentFolder = objFolderItem.Path &"\Microsoft"

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(ParentFolder)
objFolder.NewFolder "Signatures"

'On Error Resume Next

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(APPLICATION_DATA)
Set objFolderItem = objFolder.Self

'Копирование графики в папку пользователя
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
strCopyFrom = "\\adm\Софт\Шаблон подписи Microsoft Office Outlook\VSV\"
objFSO.CopyFile strCopyFrom & "new-logo_go.gif", WshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Application Data\Microsoft\Signatures\"
objFSO.CopyFile strCopyFrom & "new-ugolok.gif", WshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Application Data\Microsoft\Signatures\"
objFSO.CopyFile strCopyFrom & "re-ugolok.gif", WshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Application Data\Microsoft\Signatures\"
objFSO.CopyFile strCopyFrom &  "newcompany.htm", WshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Application Data\Microsoft\Signatures\"
objFSO.CopyFile strCopyFrom & "recompany.htm", WshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\Application Data\Microsoft\Signatures\"

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.IgnoreCase = False ' учитывать регистр символов
objRegExp.Multiline  = True ' многострочный объект
objRegExp.Global  = True ' Ищем по всему тексту

'Подключаем ADSystemInfo'
Set objSysInfo = CreateObject("ADSystemInfo")
 strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)

'New Фамилия Имя'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "Фамилия Имя"
strName = objUser.FullName
strName = InputBox ("Добро пожаловать в программу настройки подписи Outlook. Измените ФИО так как они должны выглядеть в подписи", "ФИО", strName)
strTextFile = objRegExp.Replace(strTextFile,strName)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'RE Фамилия Имя'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "Фамилия Имя"
strTextFile = objRegExp.Replace(strTextFile,strName)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'New Email'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "href='mailto:mymail@company.ru'>mymail@company.ru"
strEmail = objUser.mail
strEmail = "href='mailto:" & strEmail & "'>" & strEmail
strTextFile = objRegExp.Replace(strTextFile,strEmail)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'Re Email'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "href='mailto:mymail@company.ru'>mymail@company.ru"
strTextFile = objRegExp.Replace(strTextFile,strEmail)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'New Должность'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "Должность"
strTitle = InputBox ("Введите Вашу должность, например: Системный администратор", "Должность")
strTextFile = objRegExp.Replace(strTextFile,strTitle)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'Re Должность'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "Должность"
strTextFile = objRegExp.Replace(strTextFile,strTitle)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'New Телефон'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "Тел.:"
strPhone = InputBox ("Введите номер внутреннего телефона (четыре цифры, например, 7550)", "Телефон")
If strPhone <> "" then
    strPhone = "Тел.: +7 (812) 111-11-11 (доб. " & strPhone & ")"
 else
   strPhone = "Тел.: +7 (812) 111-11-11"
end if
strTextFile = objRegExp.Replace(strTextFile,strPhone)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'Re Телефон'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "Тел.:"
strTextFile = objRegExp.Replace(strTextFile,strPhone)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'New Мобильный Телефон'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "<!--Mobile-->"
strMobile = InputBox ("Введите номер мобильного телефона или оставьте поле пустым, если он не нужен", "Мобильный телефон")
If strMobile <> "" then
    strMobile = "<span style=""font-size:8.5pt;font-family:'Arial Narrow','sans-serif'; color:#C80000"">Моб.: " & strMobile & "</span><br>"   
end if
strTextFile = objRegExp.Replace(strTextFile,strMobile)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\newcompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'Re Мобильный Телефон'
Set objTextFile = objFSO.OpenTextFile (objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForReading, False)
strTextFile = objTextFile.ReadAll
objTextFile.Close
objRegExp.Pattern = "<!--Mobile-->"
strTextFile = objRegExp.Replace(strTextFile,strMobile)
Set objTextFile = objFso.OpenTextFile(objFolderItem.Path &"\Microsoft\Signatures\recompany.htm", ForWriting, False)
objTextFile.Write strTextFile
objTextFile.Close

'Прописываем подпись в реестре

Const HKEY_CURRENT_USER = &H80000001

strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
   strComputer & "\root\default:StdRegProv")

'Получаем профиль по умолчанию'
strProfilesPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"
intRes = objReg.GetStringValue(HKEY_CURRENT_USER,strProfilesPath,"DefaultProfile",strValue)

'Заносим в реестр подписи'
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\" & strValue & "\9375CFF0413111d3B88A00104B2A6676\00000002"
strValueName = "New Signature"
strValueName2 = "Reply-Forward Signature"
aValueData = Array(&H6e,&H00,&H65,&H00,&H77,&H00,&H6e,&H00,&H65,&H00,&H6f,&H00,&H70,&H00,&H72,&H00,&H69,&H00,&H6e,&H00,&H74,&H00)
aValueData2 = Array(&H72,&H00,&H65,&H00,&H6e,&H00,&H65,&H00,&H6f,&H00,&H70,&H00,&H72,&H00,&H69,&H00,&H6e,&H00,&H74,&H00,&H00,&H00)
objReg.SetBinaryValue HKEY_CURRENT_USER,strKeyPath,strValueName,aValueData
objReg.SetBinaryValue HKEY_CURRENT_USER,strKeyPath,strValueName2,aValueData2
MsgBox ("Подпись настроена. Перезапустите Outlook чтобы применились настройки")
« Последнее редактирование: 15 ноября 2010, 13:44:14 от shs »
MCSE: Messaging, MCSE: Communication, MCSE: Productivity, MCSA: Office 365, MCPS
my blog - http://it-blojek.ru

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4402
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Re: Скрипты.
« Ответ #3 : 26 октября 2010, 11:53:21 »
Поиск устаревших учетных записей в AD#PowerShell#ShS


$InactiveDays = New-TimeSpan -days 56
$LastLogonTimeMark= (get-date) - $InactiveDays
#
Get-QADComputer -IncludedProperties lastLogontimeStamp, useraccountcontrol|
?{$_.lastLogontimeStamp -lt $LastLogonTimeMark}|
select name, lastLogontimeStamp, whenCreated, @{Name="Disabled"; Exp={$_.useraccountcontrol -band 2}}|
?{$_.Disabled -eq 0}|
sort lastLogontimeStamp| ft Name,lastLogonTimeStamp, whenCreated, Disabled -AutoSize

Комментарии к скрипту см. здесь: http://shserg.ru/2010/03/11/search-old-computer-user-accounts-in-ad/
« Последнее редактирование: 09 января 2011, 22:19:03 от shs »

Оффлайн Retif

  • Администраторы
  • Олдфаг
  • *****
  • Сообщений: 9177
  • Рейтинг: 88
  • Пол: Мужской
  • Афтар
    • Просмотр профиля
    • Мой блог
  • Откуда: Орёл

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4402
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
Получение отчета о событиях входа/выхода на компьютерах домена#PowerShell#ShS

<# Скрипт Get-LogOnOffEvts.ps1 shs 20101112
.Synopsis   
   Скрипт проводит опрос компьютеров, чьи учетные записи находятся в заданном параметрами запуска OU,
   собирая информацию о событиях входа/выхода и сохраняя их в файл отчета
   
    Get-LogOnOffEvts.ps1 [SearchRoot] [SearchScope] [DateBefore] [DateAfter] <ReportFileName>
   
.Parameters

   SearchRoot -   задает корневой контейнер, с которого будет начат поик учетных записей компьютеров,
               подлежащих опросу
               Если не задано иное, то по умолчанию принимает значение "$(([ADSI]"LDAP://rootDSE").rootDomainNamingContext)",
               которое равно DN корневого домена леса.
                   
   SearchScope -   область поиска, может принимать одно из 3х возможных значений:
               'Base'     -   ограничивает область поиска базовым объектом (SearchRoot)
               'OneLevel' -   поиск только прямых потомков базового объекта (SearchRoot),
                           за исключением самого базового объекта
               'Subtree' -      поиск по всему поддереву, начиная с базового объекта (SearchRoot),
                           включая сам базовый объект
               Если не задано иное, то по умолчанию принимает значение 'Subtree'
                     
   DateBefore -   верхня граница даты искомых событий (по умолчанию - начало следующих суток)
   
   DateAfter -      нижняя граница даты искомых событий (по умолчанию - начало текущих суток)
   
   ReportFileName -полное имя файла отчета
   
.Examples
    Get-LogOnOffEvts.ps1 -ReReportFileName c:\temp\report.csv
    Get-LogOnOffEvts.ps1 -SearchBase "domain.local/MyOU/Workstations" -ReReportFileName c:\temp\report.csv
    Get-LogOnOffEvts.ps1 -SearchBase "domain.local/MyOU/Workstations" -SearchScope 'OneLevel' -ReReportFileName c:\temp\report.csv
    Get-LogOnOffEvts.ps1 -SearchBase "CN=MyComp,OU=Workstations,OU=MyOU,DC=domain,DC=local" -DateAfter "30/04/2010" -ReReportFileName c:\temp\report.csv
#>
#================================================================================================================
param($SearchRoot="dom.local/RTA/Workstations", [DirectoryServices.SearchScope]$SearchScope="Subtree",`
      [DateTime]$DateBefore=(Get-Date).AddDays(1).Date, [DateTime]$DateAfter=(Get-Date).Date, $ReportFileName)
#================================================================================================================     
<###############################################################################

 Function Show-Help.   Выыодит на экран первый блочный коментарий скрипта,
                  заданного в качестве параметра вызова.

.Parameter <ScriptFullName>
   Полное имя скрипта, чей первый блочный коментарий будет выведен на экран.

#################################################################################>
Function Show-Help ($ScriptFullName){
   if ($ScriptFullName) {
      $IsHelpLine=$false
      switch -file $ScriptFullName {
         {$_ -match "<#"}     {Write-Host $_;$IsHelpLine=$true;continue}
         {$_ -match "#>"}     {Write-Host $_;$IsHelpLine=$false;break}
         {$IsHelpLine}        {Write-Host $_;}
      }
   }
}
<###############################################################################
 Функция Get-LogonLogoffEvts предназначена для получения массива объектов,
   содержащих информацию о событиях входа/ выхода на заданном компьютере
   (Будет собрана информация о событиях с event id равными 528,528,540)
   
.Parameters
   CompName -   Имя опрашиваемого компьютера
   Before -   Верхняя граница даты искомых событий
   After  -   Нижняя граница даты искомых событий
   
###############################################################################>
Function Get-LogonLogoffEvts ($CompName, $Before=$DateBefore, $After=$DateAfter) {
   #массив, в который будем собирать информацию входа/выхода для заданного компьютера
   $arrLogOnOffEvts=@()
   #Перебираем все события с EventID равными 528|538 в заданном диапазоне даты/времени
   #Get-EventLog -ComputerName $CompName -InstanceId 528,538 -LogName Security -After $After -Before $Before|%{
   $filter="logfile='Security' and (eventcode='528' or eventcode='540' or eventcode='538') and TimeGenerated >= '$([System.Management.ManagementDateTimeConverter]::ToDMTFDateTime($After))'"
   $filter+= " and TimeGenerated <= '$([System.Management.ManagementDateTimeConverter]::ToDMTFDateTime($Before))'"
   gwmi -ComputerName $CompName -Class Win32_NTlogEvent -Filter $filter -ErrorAction Stop|%{
      #создадим новый объект, в который будем записывать информацию об очередном событии входа/выхода
      $objLogOnOffEvt=New-Object PSObject -Property @{
         CompName=$CompName;
         TimeGenerated=$null;
         User=$null;
         Domain=$null;
         EventIdentifier=$null;
         LogonType=$null;
      }
      #и сохраняем всю полезную информацию о событии в объете $objLogOnOffEvt
      $objLogOnOffEvt.TimeGenerated=[datetime]$_.TimeGenerated
      $objLogOnOffEvt.EventIdentifier=$_.EventIdentifier
      switch -regex ($_.Message) {
         "Пользователь:\t+(\w+(?:\s?[\w-]+)*)" {$objLogOnOffEvt.User=$Matches[1]}
         "Домен:\t+(\w+(?:\s?[\w-]+)*)"       {$objLogOnOffEvt.Domain=$Matches[1]}
         "Тип входа:\t+(\d+)"  {$objLogOnOffEvt.LogonType=$Matches[1]}
      }
      #добавляем информацию об очередном событии в массив
      #$objLogOnOffEvt
      $arrLogOnOffEvts+=$objLogOnOffEvt
   }
   #возвращаем, как результат работы функции, информацию о всех собранных событиях
   $arrLogOnOffEvts
}
#
#====================================== Точка входа скрипта ==================================
#если полное имя файла отчета задано и задано правильно (путь в полном имени файла указывает на папку,
#которая реально существует), то начинаем работу
if (($ReportFileName) -and (Test-Path ($ReportFileName|Split-Path))) {
   #Массив, в который будем собирать информацию о событиях входа/выхода, собранную со всех опрашиваемых компьютеров
   $arrReport=@()
   #Выбираем из заданной ветки все неотключенные учетные записи компьютеров
   $arrComps = Get-QADComputer -ErrorAction SilentlyContinue -SearchRoot $SearchRoot -SearchScope $SearchScope -SizeLimit 0 |
      select name, @{Name="Disabled"; Exp={$_.useraccountcontrol -band 2}}|
      ?{$_.Disabled -eq 0}| select -ExpandProperty name
   #можно было бы и далше продолжать передавать данные по конвейеру, но мы не будем этого делать
   #(чтобы упростить отладку и облегчить восприятие)
   #для каждого компьютера из списка...
   $arrComps|foreach {
      ##...если компьютер доступен (пингуется)...
      if (Test-Connection $_ -Count 1 -Quiet) {
         Write-Host "`n$_" -NoNewline
         try {
            ###...добавляем информацию о событиях входа/выхода опрашиваемого компьютера к общему отчету
            $arrReport+=Get-LogonLogoffEvts $_
         }
         catch {
            Write-Host "`t-->`t Ошибка доступа!" -ForegroundColor Red -NoNewline
         }
      }
   }
   #Выгружаем сформированный отчет в файл-csv, который удобно обрабатывать в excel
   $arrReport|Export-Csv -Path $ReportFileName -UseCulture -Encoding Default
}
else {
   #Выводим на экран первый блочный комментарий этого скрипта в качестве справки
   Show-Help $MyInvocation.MyCommand.Path 
}

Комментарии к скрипту см. здесь: http://shserg.ru/2010/11/24/script_to_get_windows_logon_logoff_events_from_domain_computers/
« Последнее редактирование: 09 января 2011, 22:20:16 от shs »

Оффлайн risc

  • Модератор
  • Старожил
  • *****
  • Сообщений: 848
  • Рейтинг: 7
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: раша
На удаленной машине убить необходимый процесс#VB#risc
strComputer = InputBox("Имя компа?") 
strProctarget    = InputBox("имя_процесса")

Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
    "root\CIMV2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = '" _
 & strProctarget  & "'")

For Each objProcess in colProcessList
    objProcess.Terminate()
Next
Кто понял жизнь, тот не торопится...

Оффлайн makc

  • Постоялец
  • ***
  • Сообщений: 170
  • Рейтинг: 3
  • Генератор случайных чисел
    • Просмотр профиля
Я, конечно, не программер на VBS, да и знаю его хреново, но тем не менее, ввиду того, что я человек ленивый и каждый раз придумывать новые пароли мне надоело, а на виндах простого генератора паролей без заморочек я не нашёл (unix way), то собрал себе вот такой скрипт для генерации паролей (длина, количество) в файл passwords.txt, который создаётся в той же папке, что и скрипт.

Так как я только надёргал, поэтому: #VBS

Код: pwgen.vbs [Выделить]

Set fso = CreateObject("Scripting.FileSystemObject")
Set Text = fso.CreateTextFile("passwords.txt")

dim a, DesiredLength, DesiredCount

DesiredLength = inputbox ("Введите длину пароля")
DesiredCount = inputbox ("Введите количество паролей")

FOR a=1 to DesiredCount

Randomize( )

    dim CharacterSetArray
    CharacterSetArray = Array( _
      Array( DesiredLength, "~!@#$%^&*()_+-=[]{};':,./<>?0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ) _
    )

    dim i
    dim j
    dim Count
    dim Chars
    dim Index
    dim Temp

      Count = CharacterSetArray( 0 )( 0 )
      Chars = CharacterSetArray( 0 )( 1 )

      for j = 1 to Count

        Index = Int( Rnd( ) * Len( Chars ) ) + 1
        Temp = Temp & Mid( Chars, Index, 1 )

      next

    dim TempCopy

    do until Len( Temp ) = 0

      Index = Int( Rnd( ) * Len( Temp ) ) + 1
      TempCopy = TempCopy & Mid( Temp, Index, 1 )
      Temp = Mid( Temp, 1, Index - 1 ) & Mid( Temp, Index + 1 )

    loop

    RandomString = TempCopy

Text.WriteLine(RandomString)

TempCopy=""
Rnd( )
next
Text.Close

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "notepad.exe passwords.txt"
Set WSHShell = Nothing

'Wscript.Sleep 1000
'FSO.DeleteFile("passwords.txt")


Содержание файла после генерации 10 паролей по 32 символа:
Цитата: passwords.txt
l>Xm}~phBqBO+.ar^*W.97u5N;%cADK^
T#*[o1pDO?yq5~s:@CV*BUB/1bU9BOA!
r@WKgV;b_nNA$:ll0*$}Rcc-rJ5rRZoT
N2('q1@<31N9+ul!RFMXSwl;@XB>Vtc%
I]u='FW^Vx;z{,v4{Gkh+A]T{{+(dD!;
09H%#[U1=m3^au{C,.4bAG3@da}_1x3H
ID/w}fN&xt:OJI/Vt='KZp4}}23d;NW&
+mB*<5iezdoeOK@<yu)%r&M{2Tdq<j_J
O*g>%-YkZ<19c/#?0as4W2+V9l>K%.gt
J/d'grTx4Sw')t8l@(d_E5NG=rqx;kSF

UPD:
v 1.2. Добавил открытие файла с паролями блокнотом после его создания и возможность его удаления (нужно убрать апострофы в начале последних 2-х строчек, тогда созданный файл будет удаляться через 1 секунду).
v 1.1. Исправил баг циклического повторения групп паролей.
« Последнее редактирование: 01 ноября 2011, 12:03:59 от makc »

Оффлайн TIGRIS

  • Новичок
  • *
  • Сообщений: 6
  • Рейтинг: 0
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: от Верблюда
Скрипт использующий регулярные выражения - находка для тех кому надо разобрать логи например. Строка objRegExp.Pattern = "([\d]+\.[\d]+\.[\d]+)[\s]+([\w]+)[\s]+([\d]+)[\s]+([\d]+)[\s]+(.+)$" - собственно сам шаблон.
Option Explicit
Dim oFSO, oFso1, objFile, objFile1, objRegExp
dim strFileName, strOutputFilename, strLine
dim objMatches, objSubmatches

strFilename="input.txt" 'Исходный файл
strOutputFilename="out.txt" 'Файл для вывода


Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFSO1 = CreateObject("Scripting.FileSystemObject")
Set objRegExp = CreateObject("VBScript.RegExp") 'Создается объект регулярных выражений

objRegExp.Pattern = "test" 'Указывается ключевые слова поиска
objRegExp.IgnoreCase = True 'Указывается независимость от регистра символов
   
Set objFile = oFSO.OpenTextFile(strFileName, 1) ' Открываем файл на чтение
Set objFile1 = oFSO1.OpenTextFile(strOutputFileName, 2, True) ' Открываем файл на перезапись
 
   Do Until objFile.AtEndOfStream
      strLine = objFile.ReadLine 'Читаем 1 строку файла

objRegExp.Pattern = "([\d]+\.[\d]+\.[\d]+)[\s]+([\w]+)[\s]+([\d]+)[\s]+([\d]+)[\s]+(.+)$"
Set objMatches = objRegExp.Execute(StrLine)

if objMatches.count=1 then

objFile1.Writeline ( _
objMatches.item(0).Submatches(0) & " " & _
objMatches.item(0).Submatches(1) & " " & _
objMatches.item(0).Submatches(2) & " " & _
objMatches.item(0).Submatches(4) _


end if

     
    Loop
objFile.Close ' Закрываем файл
objFile1.Close ' Закрываем файл

Оффлайн iura

  • Начинающий
  • *
  • Сообщений: 27
  • Рейтинг: 1
  • Пол: Мужской
    • iura77@jabber.ru
    • iuricuznetov
    • Просмотр профиля
Может кому пригодится.

<#***************************************************
PowerShell 2012 iura

Создание папок для хранения перемещаемых профилей пользователей Active Directory.
Актуально для сетевых хранилищ под управлением *nix-систем


Logon Name пользователя берётся из файла,
где каждая учётная запись начинается с новой строки

Пример содержания файла users.txt:
user1
user2
...
userN

При использовании другого форматирования или форматов данных,
пожалуйста, используйте параметры команды Get-Content и опцию -Delimeter
***************************************************** #>

#Открываем нужный нам файл
$users = Get-Content Disk:\Folder\users.txt

foreach ($user in $users) {

#Создаём папку в каталоге для хранения папок пользоватлей:
New-Item -path \\NetworkShare\ProfileFolder -name $user -type directory

#Получаем параметры доступа для этой папки в переменную $acl
$acl = get-acl "\\NetworkShare\ProfileFolder\$user"

#Удаляем все существующие права доступа на папку
$acl.SetAccessRuleProtection($true,$false)

#Даём полные права для группы Enterprise admins
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\Enterprise admins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")))

#Даём полные права пользователю, для которого создаём папку
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\$user","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")))

#Важный момент! Применяем заданные права доступа
Set-Acl "\\NetworkShare\ProfileFolder\$user" $acl

<#Ввиду того, что у меня не получилось задать владельца папки, отличного от
того, от имени которого, запускется скрипт при помощи метода SetOwner для get-acl,
мне пришлось использовать icacls#>
icacls "\\NetworkShare\ProfileFolder\$user" /setowner "DOMAIN\$user" /T

#Здесь тоже самое, чтои выше, но уже для папки username.v2, которая используется Vista & 7
New-Item -path \\NetworkShare\ProfileFolder -name "$user.v2" -type directory
$acl = get-acl "\\NetworkShare\ProfileFolder\$user.v2"
$acl.SetAccessRuleProtection($true,$false)
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\Enterprise admins","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")))
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\$user","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")))
Set-Acl "\\NetworkShare\ProfileFolder\$user.v2" $acl
icacls "\\NetworkShare\ProfileFolder\$user.v2" /setowner "DOMAIN\$user" /T
}

Оффлайн dinovasya

  • Постоялец
  • ***
  • Сообщений: 380
  • Рейтинг: -1
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: Камские поляны
Вот этот скрипт удалит стандартные игры в виндовсе?

Dim Fso : Set Fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
sPrograms = WshShell.SpecialFolders("AllUsersPrograms")
If (Fso.FolderExists(sPrograms & "\Игры")) Then
' Create file for uninstalling games
Set f = Fso.CreateTextFile("c:\windows\inf\wmdtocm.txt", True)
f.WriteLine("[Components]")
f.WriteLine("freecell=off")
f.WriteLine("hearts=off")
f.WriteLine("minesweeper=off")
f.WriteLine("msnexplr=off")
f.WriteLine("pinball=off")
f.WriteLine("solitaire=off")
f.WriteLine("spider=off")
f.WriteLine("zonegames=off")
f.Close
WshShell.Run "sysocmgr.exe /i:c:\windows\inf\sysoc.inf /u:""c:\windows\inf\wmdtocm.txt"" /q", 1, True
Fso.DeleteFolder(sPrograms & "\Игры"), True
End If

Оффлайн goro

  • Старожил
  • ****
  • Сообщений: 512
  • Рейтинг: 0
  • Пол: Мужской
    • romeo_2205
    • Просмотр профиля
  • Откуда: Киев
нужен скрипт для смены пароля локального админа...

Оффлайн Fray

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6724
  • Рейтинг: 58
  • Пол: Мужской
    • Просмотр профиля
    • IT-Бложек
  • Откуда: Петербург
goro, net user Admin pass в политику автозагрузки компьютера
MCSE: Messaging, MCSE: Communication, MCSE: Productivity, MCSA: Office 365, MCPS
my blog - http://it-blojek.ru

Оффлайн goro

  • Старожил
  • ****
  • Сообщений: 512
  • Рейтинг: 0
  • Пол: Мужской
    • romeo_2205
    • Просмотр профиля
  • Откуда: Киев
goro, net user Admin pass в политику автозагрузки компьютера
с некоторых пор эта политика не работает, ее сам мелкософт посчитал не безопасной...

Оффлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4402
  • Рейтинг: 89
    • Просмотр профиля
    • ShS's blog
  • Откуда: Default city
goro, net user Admin pass в политику автозагрузки компьютера
с некоторых пор эта политика не работает, ее сам мелкософт посчитал не безопасной...
MS "отменил" политику смены паролей при помощи gpp, логон скрипты никто отменять не собирается.



 

SMF spam blocked by CleanTalk