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

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

Онлайн shs

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

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

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

Онлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4351
  • Рейтинг: 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

  • Администратор
  • Олдфаг
  • *****
  • Сообщений: 6011
  • Рейтинг: 53
  • Пол: Мужской
    • fray@sysadminz.ru
    • lushikafu
    • lushikafu
    • Просмотр профиля
    • 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

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4351
  • Рейтинг: 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

  • Администраторы
  • Олдфаг
  • *****
  • Сообщений: 7810
  • Рейтинг: 77
  • Пол: Мужской
  • Афтар
    • Просмотр профиля
    • Мой блог
  • Откуда: Орёл-Москва
Залогиненные пользователи на компьютерах в консоли Active Directory онлайн.

Часто бывает нужно определить, за каким компьютером находится тот или иной пользователь. Собственно для этого и предназначен этот скрипт, авторство не мое, но так как он весьма полезный, я решил разместить его у себя в блоге, надеюсь автор не обидится 

При выполнении скрипта происходит запись в атрибут Description (объекта – компьютера в Active Directory) имени текущего залогиненного пользователя. Это делается при логоне/логоффе пользователя.

Как все делается. Есть два скрипта, один для Logon, другой для Logoff. Скрипты эти помещаются соответственно в Logon и Logoff скрипты в групповую политику для OU, в котором находятся учетные записи пользователей.
Далее, группе… скажем Domain Users делегируем на OU, содержащий компьютеры, следующие разрешения: Computer Objects > Write Description.

Сами скрипты (логофф отличается от логон только парой слов в предпоследней строке):

writeComputerDescription_Logon.vbs

On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

writeComputerDescription_Logoff.vbs

On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
Thiscomp.put "description", ">> Logged off: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

Выглядит это примерно так:
ila_rendered
Естественно, для того, чтобы совсем онлайн было, нужно все время жать F5 :)
Сам скрипт отсюда: http://www.dbforums.com/archive/index.php/t-1106587.html

Онлайн shs

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 4351
  • Рейтинг: 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

  • Модераторы
  • Постоялец
  • *****
  • Сообщений: 169
  • Рейтинг: 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

  • Постоялец
  • ***
  • Сообщений: 372
  • Рейтинг: -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

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

Оффлайн Fray

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

Оффлайн goro

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

Онлайн shs

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