Форум системных администраторов: Библиотека скриптов - Форум системных администраторов

Перейти к содержимому

  • (4 Страниц)
  • +
  • 1
  • 2
  • 3
  • Последняя »
  • Вы не можете начинать новые темы
  • Вы не можете отвечать в этой теме

Библиотека скриптов Наша с вами общая коллекция скриптов Оценить тему: ***** 7 Голосов

#1 Пользователь не на сайте   Xaegr 

  • PowerShell addict
  • PipPipPipPipPipPipPip

  Отправлено 27 December 2007 - 08:47

Сюда постим скрипты :D
Найденные в интернете (с указанием копирайтов и желательно ссылок на источник) и свои.

Ну и на всякий случай еще раз отмечу: :lol:
Сюда только скрипты! запросы, вопросы и обсуждения - в другие темы.
Обязательно указываем язык скрипта. Если в скрипте применяются какие либо сторонние программы - тоже указываем.
Важно! Если вы будете в первую строку поста выводить краткое описание (краткое - одна-две строчки) и (при необходимости) копирайт то я буду иметь возможность до некоторой степени автоматизировать составление этого индекса, да и перенос в wiki :lol: Типа так:

Цитата

Скрипт для удаления всех файлов на диске цэ (VB Script) (с) Доктор Зло

Если копирайт не нужен (скрипты народное творчество! :P ) то просто:

Цитата

Скрипт для удаления всех файлов на диске цэ (VB Script)

Имя запостившего писать не нужно - и так вытащу. Скриптовые языки у нас VB Script, Java Script, Batch Script, PowerShell. Вольнодумие типа VBS не приветствуюется :P
Это не рекомендация. Все начиная со второй страницы должно быть оформлено таким образом. Спасибо.

Скрипты с Scripting Center не пишем, они и так на стабильном хостинге ;) Хватит ссылки в топике ссылок.



#2 Пользователь не на сайте   Andy_user 

  • Новичок
  • Pip

Отправлено 27 December 2007 - 11:36

'-------------------------------------------------------------------
' Необходимо получить в виде таблицы Excell с каждого 
' доменного компа значения всех параметров ветки реестра
' HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
' дабы узнать, что запускается на каждом компе в момент старта ОС. 
' Также получаем информацию о Userinit и модеме
' Полученную информацию раскидываем по 3 листам книги Excell
'
'-------------------------------------------------------------------
' Требуется наличие библиотеки regobj.dll (с сайта Microsoft)
' и ее регистрация:
'				   regsvr32 regobj.dll
'--------------------------------------------------------------------
On Error Resume Next 
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'описываем раздел реестра из которого происходит извлечение информации
Const key2 = "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Const key1 = "\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName"
Const key_Hostname = "\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
Const Key_UserInit = "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Const Key_Modem = "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ras\Tapi Devices\Unimodem"
'---- Functions ----
Function My_Connect (Comp,Domain,User,Pass)
Dim My_String
Dim oShell
My_String = "cmd /c net use \\" & Comp & "\ipc$ "
My_String = My_String & Pass & " /user:"
My_String = My_String & Domain & "\" & User
Set oShell = CreateObject("WScript.Shell") 
My_Connect = oShell.Run (My_String,0,True)
End Function
'---- End Functions ---
'--- выдача сообщения о начале работы скрипта
Wscript.Echo "Начало работы скрипта"
'--- от имени кого будем запускать скрипт
Dim Comp
Dim Domain
Dim User
Dim Pass
Dim Net
'--- Филиал (10.10.10.x)----
Net = "10.10.10."  ' !!! - изменить
Domain = "XXXX"  ' !!! - изменить
User = "Administrator"  '!!! - изменить
Pass = "12345678"  '!!! - изменить
'-----------------
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set fld = oFSO.GetFolder(".") '--- Получаем текущую директорию
'--- Cоздание объекта - ссылки на Regobj.dll
Set objReg = WScript.CreateObject("RegObj.Registry")
'--- Запуск Excel
Set oEx = CreateObject ("Excel.Application")
oEx.Visible = True
oEx.Workbooks.Add '--- По умолчанию добавляется пустая книга с 3-мя листами
Set s1 = oEx.Sheets(1) '--- Выбираем первый лист
Set s2 = oEx.Sheets(2) '--- Второй лист ---
Set s3 = oEx.Sheets(3) '--- Третий лист ---
i_1 = 1
i_2 = 1
i_3 = 1
For nn = 1 To 254 Step 1
   Comp1 = Net & nn
   qqq = 0
   qqq = My_Connect (Comp1,Domain,User,Pass)
   If qqq = 0 Then '--- Удачно подключились к IPC$ ---
	  ' Wscript.Echo Comp1
	  '--- Подключаемся к реестру хоста
	  Err.Clear '--- Сбросили ошибку ---
	  Set objRemote = objReg.RemoteRegistry("\\" & Comp1)
	  If Err.Number = 0 Then '--- Ошибки подключения к реестру нет ---
		 '--- Определяем имя хоста ---
		 Err.Clear '--- Сбросили ошибку ---
		 Set RootKey = objRemote.RegKeyFromString(key_Hostname)
		 If Err.Number = 0 Then '--- Ошибки получения ветки реестра нет ---
			For Each oVal In RootKey.Values   ' Цикл по элементам набора
			  If oVal.Name = "Hostname" Then
				Comp_Name = oVal.Value
			  End If
			Next
			'--- Получаем свойства объекта "раздел"
			Set RootKey = objRemote.RegKeyFromString(key2)
			For Each oVal In RootKey.Values   ' Цикл по элементам набора
			  s1.Cells(i_1,1) = Comp1
			  s1.Cells(i_1,2) = Comp_Name
			  s1.Cells(i_1,3) = oVal.Name
			  s1.Cells(i_1,4) = oVal.Value
			  s1.Columns("A:D").Columns.AutoFit  ' установка автоподбора ширины
			  i_1 = i_1 + 1
			Next
		 End If
		 '--- Определяем параметр "Userinit" ---
		 Err.Clear '--- Сбросили ошибку ---
		 Set RootKey = objRemote.RegKeyFromString(Key_UserInit)
		 If Err.Number = 0 Then '--- Ошибки получения ветки реестра нет ---
			For Each oVal In RootKey.Values   ' Цикл по элементам набора
			  If oVal.Name = "Userinit" Then
				 s2.Cells(i_2,1) = Comp1
				 s2.Cells(i_2,2) = Comp_Name
				 s2.Cells(i_2,3) = oVal.Value
				 s2.Columns("A:D").Columns.AutoFit  ' установка автоподбора ширины
				 i_2 = i_2 + 1
			  End If
			Next
		 End If  
		 '--- Определяем параметр "Modem" ---
		 Err.Clear '--- Сбросили ошибку ---
		 Set RootKey = objRemote.RegKeyFromString(Key_Modem)
		 If Err.Number = 0 Then '--- Ошибки получения ветки реестра нет ---
			For Each oVal In RootKey.Values   ' Цикл по элементам набора
				 s3.Cells(i_3,1) = Comp1
				 s3.Cells(i_3,2) = Comp_Name
				 s3.Cells(i_3,3) = oVal.Name
				 s3.Cells(i_3,4) = oVal.Value
				 s3.Columns("A:D").Columns.AutoFit  ' установка автоподбора ширины
				 i_3 = i_3 + 1
			Next
		 End If  
	  End If '--- Конец IF по подключению к удаленному реестру ---
   Set objRemote = Nothing
   End If '--- Конец IF по подключению к IPC$ ---
Next '--- Закрываем цикл по IP-адресам ---
'--- Закрываем Excell ---
s1.Columns("A:D").Columns.AutoFit  ' установка автоподбора ширины
oEx.DisplayAlerts = False ' чтобы не было вопросов
oEx.ActiveWorkbook.SaveAs fld & "/" & "Test_2.xls" '--- Сохраняем в нашей директории ---
oEx.DisplayAlerts = True
oEx.Quit '--- Покидаем Excell ---
'--- выдача сообщения о завершении работы скрипта
Wscript.Echo "Конец работы скрипта"
Wscript.Quit


#3 Пользователь не на сайте   Хэлкар 

  • Участник
  • PipPip

Отправлено 27 December 2007 - 11:43

Просмотреть сообщениеXaegr, 27.12.2007, 8:47, сказал(а):

Сюда постим скрипты :D
Найденные в интернете (с указанием копирайтов и желательно ссылок на источник) и свои.

Потом надеюсь перенесем в Wiki, но начинать можно уже сейчас :lol:

Ну и на всякий случай еще раз отмечу: :lol:
Сюда только скрипты! запросы, вопросы и обсуждения - в другие темы.

Обязательно указываем язык скрипта. Если в скрипте применяются какие либо сторонние программы - тоже указываем.

Скрипты с Scripting Center не пишем, они и так на стабильном хостинге :P Хватит ссылки в топике ссылок.
Попробуем. Итак, классика жанра - записть событий логона и логоффа пользователей домена.
Пишем события в SQL, используя любой вариант движка, лишь бы по сети была возможность подключиться.
Создаем базу и пользователя SQL-сервера (в примере используется небазопасный вариант реализации данного решения). Язык - tSQL, выполняется, например, в Query Analyzer
USE master
GO
if exists (select * from dbo.sysdatabases where name = 'ITStatistics') 
DROP DATABASE ITStatistics
GO
CREATE DATABASE ITStatistics
GO
USE ITStatistics
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UserLogon]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[UserLogon]
GO
CREATE TABLE [dbo].[UserLogon] (
	[ID] [int] IDENTITY (1, 1) NOT NULL ,
	[Machine_Name] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
	[User_Name] [varchar] (50) COLLATE Cyrillic_General_CI_AS NULL ,
	[User_FullName] [varchar] (500) COLLATE Cyrillic_General_CI_AS NULL ,
	[User_Profile] [varchar] (500) COLLATE Cyrillic_General_CI_AS NULL ,
	[EventType] [int] NULL ,
	[EventTime] [datetime] NULL 
) ON [PRIMARY]
GO
Select 'Все отработало, БД и табличку для записи сделали.'
USE Master
if exists (select * from dbo.sysxlogins where name = 'ITStatAgent') 
EXEC sp_droplogin 'ITStatAgent'
GO
EXEC sp_addlogin 'ITStatAgent', 'Hard_Pass', 'ITStatistics'
GO
Select 'Пользователя базы то ли создали, то ли пересоздали.'
USE ITStatistics
EXEC sp_grantdbaccess 'ITStatAgent'
EXEC sp_addrolemember 'db_datareader', 'ITStatAgent'
EXEC sp_addrolemember 'db_datawriter', 'ITStatAgent'
Select 'И права ему на базу дали.'


Далее создаем VBS-скрип, который назначаем политикой на вход пользователей.

dim wsh_Network
dim objCurrentUser
dim ADOConn

On Error Resume Next
Set wsh_Network = CreateObject("WScript.Network")  
Set ADOConn = CreateObject("ADODB.Connection")
Set objCurrentUser = GetObject("WinNT://" & wsh_Network.UserDomain & "/" & wsh_Network.UserName & ",user")
ADOConn.ConnectionTimeout = 2
ADOConn.Open "Provider=SQLOLEDB.1;User ID=ITStatAgent;Password=Hard_Pass;Initial Catalog=ITStatistics;Data Source=DB_server_IP_Or_Name"
ADOConn.Execute "INSERT INTO UserLogon VALUES('" & wsh_Network.ComputerName & "','" & wsh_Network.UserName & "','" & objCurrentUser.FullName & "','" & objCurrentUser.Profile & "',1,GETDATE())"
ADOConn.Close

Строит обратить внимание на строку:
ADOConn.Open "Provider=SQLOLEDB.1;User ID=ITStatAgent;Password=Hard_Pass;Initial Catalog=ITStatistics;Data Source=DB_server_IP" - в нее вписываются используемые параметры соединения, как сервер, куда пишутся события, так и параметры пользователя, созданого в первом скрипте (на tSQL).
На события выхода, опять же политикой, вписываем аналогичный скрипт, меняя строку записи данных в базу - обозначаем событие выхода "0".
dim wsh_Network
dim objCurrentUser
dim ADOConn

On Error Resume Next
Set wsh_Network = CreateObject("WScript.Network")  
Set ADOConn = CreateObject("ADODB.Connection")
Set objCurrentUser = GetObject("WinNT://" & wsh_Network.UserDomain & "/" & wsh_Network.UserName & ",user")
ADOConn.ConnectionTimeout = 2
ADOConn.Open "Provider=SQLOLEDB.1;User ID=ITStatAgent;Password=Hard_Pass;Initial Catalog=ITStatistics;Data Source=DB_server_IP_Or_Name"
ADOConn.Execute "INSERT INTO UserLogon VALUES('" & wsh_Network.ComputerName & "','" & wsh_Network.UserName & "','" & objCurrentUser.FullName & "','" & objCurrentUser.Profile & "',0,GETDATE())"
ADOConn.Close

В итоге в базу будут записываться приблизительно следующие строки:
Номер события Имя компьютера Логин пользователя Фулл нейм пользователя Тип события (в примере - логофф) Дата и время.
24 WS57 ws54 Иванова Ольга 0 07.12.2006 18:51:33

#4 Пользователь не на сайте   Andy_user 

  • Новичок
  • Pip

Отправлено 27 December 2007 - 11:47

'------------------------------------------------
'Пинг 254 компа и по ARP нахождение нужного MAC
'------------------------------------------------
'On Error Resume Next
Const ForReading = 1

Find_MAC = "00-0c-76-8a-15-f2" 'MAC, который нужно найти 

Set oShell = WScript.CreateObject ("WScript.Shell")
For i = 1 To 254 Step 1 ' Перебор 254 IP-адресов
   Return = oShell.Run ("ping -n 1 -w 1 193.125.1." & i , 0, False) ' Начальный IP
Next
WScript.Sleep(8000)
Return = oShell.Run ("cmd /C arp -a > .\Rezult.txt"  , 0, True)
Set Fso = CreateObject("Scripting.FileSystemObject")
Set My_File = Fso.OpenTextFile( ".\Rezult.txt", ForReading, True)
Do While My_File.AtEndOfStream <> True
	ReadLineTextFile = My_File.ReadLine	
	If InStr(ReadLineTextFile,Find_MAC) <> 0 Then
		WScript.Echo ReadLineTextFile
   End If
Loop
My_File.Close
WScript.Quit(0)


#5 Пользователь не на сайте   Dr.Night 

  • Ум, честь и совесть нашей эпохи.
  • PipPipPipPipPipPipPip

Отправлено 27 December 2007 - 12:31

скрипт экспорта почтового ящика в PST и удаления его с сервера Exchange.
Для работы требуется Exchange 2007 с установленным SP1.
Так же, подрузумевается, что если логин запускающего пользователя - vpupkin, то существует административный логин vpupkin_adm , имеющий право "Exchange Organization Administrator role"
Язык - PowerShell
$Base_StartInfo_Arguments='-PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1"'
$Base_PSTFolderPath = "\\backup-server\Backup_share"

# Получение имени польователя и имени админского аккаунта.
$strDomainDNS = $env:USERDNSDOMAIN
$user_cur = $env:USERNAME + "@" + $strDomainDNS
$user_adm = $env:USERNAME + "_adm" + "@" + $strDomainDNS

# Запрос административного пароля
$credentials_adm = Get-Credential $user_adm

$StartInfo = new-object System.Diagnostics.ProcessStartInfo
$StartInfo.FileName = "${PSHOME}\powershell.exe"
$StartInfo.UserName = $credentials_adm.UserName
$StartInfo.Password = $credentials_adm.Password
$StartInfo.Domain = $credentials_adm.Domain
$StartInfo.CreateNoWindow = $true
$StartInfo.LoadUserProfile = $false
$StartInfo.UseShellExecute = $false
$StartInfo.WorkingDirectory = (get-location).Path

$a = new-object -comobject MSScriptControl.ScriptControl
$a.language = "vbscript"
$a.addcode("function getInput() getInput = inputbox(`"Введите логин, имя или E-mail пользователя. Внимание! Почтовый ящик пользователя будет забекаплен и удалён!`",`"Message Box Title`") end function" )


#Запрос данных о ящике

$mbowner = $a.eval("getInput")

while ($mbowner.length -gt 0)
	{
	#Установка необходимых прав доступа
	$StartInfo.Arguments = $Base_StartInfo_Arguments + ' -command "Add-MailboxPermission -Identity ' + "'" +  $mbowner + "'" + ' -User ' + $user_cur + ' -AccessRights FullAccess"'
	$p = [System.Diagnostics.Process]::Start($StartInfo)
	$p.WaitForExit();

	#Экспорт почтового ящика
	$result = Export-Mailbox -Identity $mbowner -PSTFolderPath ($Base_PSTFolderPath + "\" + (Get-Mailbox $mbowner).PrimarySmtpAddress + " " + (get-date).Year + "." + (get-date).Month + "." + (get-date).Day + ".pst")

	If  ($result.MoveStage -eq "Completed")
		{
		Write-Host "Почтовый ящик г-на(жи)" $result.DisplayName "забекплен"

		#Удаление почтового ящика
		$StartInfo.Arguments = $Base_StartInfo_Arguments + ' -command "Disable-Mailbox ' + "'" +  $mbowner + "'" + ' -confirm:$false"'
		$p = [System.Diagnostics.Process]::Start($StartInfo)
		$p.WaitForExit();
		}
	Else
		{
		Write-Warning ("Почтовый ящик " + $mbowner + " забекапить НЕ удалось")
		}
	$mbowner = $a.eval("getInput")
	}


Write-Host "Ничего введено не было"


#6 Пользователь не на сайте   karbofos 

  • Аксакал
  • PipPipPipPipPip

Отправлено 27 December 2007 - 14:39

простенькое автоподключение дисков у клиента в зависимости от членства в группах.
в описании группы пишем строку подключения вида: connect:,letter:,unc-path[%USERNAME%]
пример:

Цитата

connect,x:,\\server.domain.local\share$

Цитата

connect,y:,\\server.domain.local\%USERNAME%$

[%USERNAME%] - выполняет подстановку сооветствующей переменной. Можно доработать для использования дополнительных переменных окружения на клиенте.

Цитата

dim groupsettings,envsettings
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objNetwork = WScript.CreateObject("Wscript.Network")
Set ADSystemInfo = CreateObject("ADSystemInfo")
strUserDN = ADSystemInfo.UserName
dim strGroup
Set objUser = GetObject("LDAP://"& strUserDN)
For Each strGroup in objUser.GetEx("MemberOf")
strGroupPath = "LDAP://" & strGroup
Set objGroup = GetObject(strGroupPath)
if instr(objGroup.description,"connect:") Then
groupsettings = Split(objGroup.description,",",-1)
if instr(groupsettings(2),"%") Then
envsettings=Split(groupsettings(2),"%",-1)
path = envsettings(0) + objWshShell.ExpandEnvironmentStrings("%username%") + envsettings(2)
else
path = groupsettings(2)
end if
if not isconnected(groupsettings(1)) Then objNetwork.MapNetworkDrive groupsettings(1), path
end if
next
function isconnected(letter)
isconnected = False
Set oDrives = objNetwork.EnumNetworkDrives
For i = 0 to oDrives.Count - 1 Step 2
if oDrives.Item(i) = letter Then isconnected = True
Next
end function


#7 Пользователь не на сайте   Kazak-S 

  • КТО НАДО!
  • PipPipPipPip

Отправлено 27 December 2007 - 14:57

©4u3u

Скрипт для облегчения анализа дамп-файлов, создаваемых Windows при STOP ошибках (BSoD).


В большинстве случаев анализ дампов позволяет быстро определить конкретный драйвер, вызвавший ошибку.

[UPDATE] Пара необходимых замечаний:
1. Дебаггеру для своей работы необходимы символьные файлы и, возможно, исполняемые файлы, отмеченные в дампе. Символы можно скачать там же, где и Debugging Tools for Windows, но это довольно объемный download. Символы также доступны на Microsoft Symbols Web Site. KDFE конфигурирует дебаггер так, чтобы он скачивал с этого сайта только необходимые ему для работы с конкретным дампом символы, которые сохраняются в локальную папку и могут быть использованы позже. Если вы не скачивали все файлы символов заранее и не указали папку символов в скрипте, будьте готовы к тому, что KDFE "полезет" на Microsoft Symbols Web Site за необходимыми файлами.
2. Бывает, драйверы производят ошибочные действия, которые не приводят к немедленному BSoD, но впоследствии могут вызвать сбой в другом, совершенно нормальном драйвере. В этом случае необходим более глубокий анализ, возможно, с использованием встроенной утилиты Windows verifier.exe. Очень рекомендую почитать ссылки и посмотреть webcast, упомянутые в kdfe /?

синтаксис:
c:\>kdfe.cmd /? 

Kernel Debugger Front End v1.1 

SYNTAX: 

  kdfe.cmd [dump_file] [-v] 

  dump_file  - Crash dump file. If omitted, KDFE will search for crash 
			   dump files in locations configured on your computer and 
			   let you select a file to analyze. 
  -v		 - Verbose output. By default KDFE shows only basic crash 
			   information and debugger's guess about crash cause. 
			   This switch will show full debugger session output. 

EXAMPLES: 

  kdfe.cmd "c:\my dumps\memory.dmp" -v 

REQUIREMENTS: 

  Debugging Tools for Windows 

REFERENCES: 

Debugging Tools for Windows: 
  http://www.microsoft.com/whdc/devtools/debugging/default.mspx 

Windows Hang and Crash Dump Analysis webcast by Mark Russinovich: 
  http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032298075 

How to read small memory dump files: 
  http://support.microsoft.com/kb/315263 

How to Use Driver Verifier to Troubleshoot Windows Drivers: 
  http://support.microsoft.com/Default.aspx?kbid=244617


Скрипт:
::===================================================================== 
:: Name: KDFE.CMD 
:: 
:: Purpose: Kernel debugger Front End. 
:: 
:: Usage: kdfe.cmd [dump_file] [-v] 
:: 
:: Version: 1.1 
:: 
:: Technology: Windows Command Script 
:: 
:: Requirements: Windows 2000+ 
:: Debugging Tools for Windows 
:: reg.exe: 
:: Windows XP: built-in 
:: Windows 2000: install Windows Support Tools 
:: 
:: Authors: Alexander Suhovey (asuhovey@gmail.com) 
::===================================================================== 
@echo off 
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 
if "%~1"=="-debug" (echo on&set debug=1&shift /1) 
set sver=1.1 
echo. 

::========================== 
:: Variables 
::========================== 

::Kernel debugger path. Default is: 
::C:\Program Files\Debugging Tools for Windows 
set dbgpath=C:\Program Files\Debugging Tools for Windows 

::Symbols and executable images folders. If folders do not contain 
:: required files, kd.exe will download them from Microsoft Symbols 
:: Server as needed. 
set smbpath=c:\symbols 
set imgpath=%smbpath% 

::Microsoft Symbols Server URL. 
set smburl=http://msdl.microsoft.com/download/symbols 
set imgurl=%smburl% 

::Windows Crash Control registry settings path. 
set ccregpath="HKLM\SYSTEM\CurrentControlSet\Control\CrashControl" 

::Debugger parameters. 
set dbgparams=-y srv*"%smbpath:"=%"*%smburl% -i srv*"%imgpath:"=%"*%imgurl% -c 
if "%debug%"=="1" ( 
set dbgparams=%dbgparams% "^^^!sym noisy; .reload; ^^^!analyze -v; q" 
) else ( 
set dbgparams=%dbgparams% "^^^!analyze -v; q" 
) 

::========================== 
:: Parse arguments 
::========================== 
set dumpfile=&set v=& 
:PARSE 
set arg=%~1& 
shift /1 
if not defined arg goto NEXT 
if defined v (if defined dumpfile goto NEXT) 
if "%arg%"=="/?" (goto SYNTAX) else (if "%arg%"=="-?" goto SYNTAX) 
if "%arg%"=="-v" (set verbose=1&goto PARSE) 
if not defined dumpfile (set dumpfile="%arg%"&goto PARSE) 
:NEXT 

::========================== 
:: Checks 
::========================== 
set dbgpath=%dbgpath:"=% 
for %%i in (reg.exe,"%dbgpath%\kd.exe") do ( 
if "%%~$PATH:i"=="" ( 
if not exist %%i ( 
echo ERROR: Cannot find required file '%%~i' 
goto :EOF 
) 
) 
) 

::========================== 
:: Main section 
::========================== 
set /a n=0 
if defined dumpfile ( 
if exist !dumpfile! ( 
for %%z in (!dumpfile!) do (set dumpfile="%%~dpnxz") 
call :ANALYZE !dumpfile! %verbose% 
) else ( 
echo ERROR: Cannot find dump file !dumpfile! 
) 
) else ( 
for /f "tokens=2*" %%i in ('reg query %ccregpath% /v DumpFile 2^>^&1 ^| find "DumpFile"') do set kdump=%%j 
for /f "tokens=2*" %%k in ('reg query %ccregpath% /v MinidumpDir 2^>^&1 ^| find "MinidumpDir"') do set minidir=%%l 
if "!kdump!!minidir!"=="" echo ERROR: Cannot find required registry information^^!&goto :EOF 
call :ENUMD "!kdump!" "!minidir!" 
if !n!==0 ( 
echo No crash dump files found with following search filter: 
echo !kdump! 
echo !minidir!\*.dmp 
) else ( 
echo Following crash dump files found: 
echo. 
for /l %%n in (1,1,!n!) do (call :GETD %%n& echo %%n. !dumpfile!) 
echo. 
set /p foo="Which one would you like to analyze?[1-!n!] " 
for /l %%s in (1,1,!n!) do ( 
if !foo!==%%s ( 
call :GETD %%s 
call :ANALYZE !dumpfile! %verbose% 
goto :EOF 
) 
) 
echo. 
echo What was that? Have some coffee and try again. 
) 
) 
goto :EOF 

::========================== 
:: Subroutines 
::========================== 
:ANALYZE 
pushd "%dbgpath%" 
if "%2"=="1" (kd.exe -z %1 %dbgparams% 2>&1) else ( 
echo. 
set /p bar="Analyzing %1, please wait..."<nul 
for /f "delims=" %%r in ('kd.exe -z %1 %dbgparams% 2^>^&1') do ( 
set out=%%r 
if not "!out:PROCESS_NAME:=!"=="!out!" (set process=!out:PROCESS_NAME: =!) 
if not "!out:BUGCHECK_STR:=!"=="!out!" (set crashcode=!out:BUGCHECK_STR: =!) 
if not "!out:Debug session=!"=="!out!" (set crashdate=!out:Debug session time: =!) 
if "!out:~0,18!"=="Probably caused by" (set guess=%%r) 
) 
echo Done.&echo. 
if defined guess ( 
echo. 
echo Crash date: !crashdate! 
echo Stop error code: !crashcode! 
if defined process echo Process name: !process! 
echo !guess: :=:! 
) else ( 
echo Didn't find the answer. Try again with '-v' switch. 
) 
) 
popd 
goto :EOF 

:ENUMD 
if exist %1 (set /a n+=1&set !n!=%1) 
for %%m in ("%~2\*.dmp") do (set /a n+=1&set !n!="%%m") 
goto :EOF 

:GETD 
for /f "tokens=2 delims==" %%o in ('set %1 ^| find "%1="') do (set dumpfile=%%o&goto :EOF) 
goto :EOF 

:SYNTAX 
echo. 
echo Kernel Debugger Front End v%sver% 
echo. 
echo SYNTAX: 
echo. 
echo %~nx0 [dump_file] [-v] 
echo. 
echo dump_file - Crash dump file. If omitted, KDFE will search for crash 
echo dump files in locations configured on your computer and 
echo let you select a file to analyze. 
echo -v - Verbose output. By default KDFE shows only basic crash 
echo information and debugger's guess about crash cause. 
echo This switch will show full debugger session output. 
echo. 
echo EXAMPLES: 
echo. 
echo %~nx0 "c:\my dumps\memory.dmp" -v 
echo. 
echo REQUIREMENTS: 
echo. 
echo Debugging Tools for Windows 
echo. 
echo REFERENCES: 
echo. 
echo Debugging Tools for Windows: 
echo [url="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"]http://www.microsoft.com/whdc/devtools/deb...ng/default.mspx[/url] 
echo. 
echo Windows Hang and Crash Dump Analysis webcast by Mark Russinovich: 
echo [url="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032298075"]http://msevents.microsoft.com/CUI/WebCastE...ntID=1032298075[/url] 
echo. 
echo How to read small memory dump files: 
echo [url="http://support.microsoft.com/kb/315263"]http://support.microsoft.com/kb/315263[/url] 
echo. 
echo How to Use Driver Verifier to Troubleshoot Windows Drivers: 
echo [url="http://support.microsoft.com/Default.aspx?kbid=244617"]http://support.microsoft.com/Default.aspx?kbid=244617[/url] 
goto :EOF 

::========================== 
:: End of script 
::==========================


P.S. при копировании внимательно проверьте код на наличие лишщних пробелов.

#8 Пользователь не на сайте   Andy_user 

  • Новичок
  • Pip

Отправлено 27 December 2007 - 16:30

Скрипт для поиска некоторых ошибок в прямых и обратных зонах DNS-сервера от Microsoft.

'******************************************** 
'* Используется утилита dnscmd.exe 
'* из состава support tools дистрибутива 
'* Windows 2000 Server 
'******************************************** 
'On error Resume Next ' Ошибки пока не обрабатываем 

DNS_Server = "193.125.1.95" 
'DNS_Server = "193.125.10.250" 

'--- Subroutines and Functions --- 
'------------------------------------ 
Sub Sub_1 (My_String) 
'--- Замещаем совокупности подряд расположенных пробелов одним пробелом --- 
Do While InStr(1,My_String,"  ") >= 1 AND InStr(1,My_String,"  ") <= Len(My_String) 
   My_String = Replace (My_String,"  "," ") 
Loop 
End Sub '--- End of Sub_1 --- 
'------------------------------------ 
Sub Sub_2 (My_String) 
'--- Замещаем символ табуляции одним пробелом --- 
Do While InStr(1,My_String,vbTab) >= 1 AND InStr(1,My_String,vbTab) <= Len(My_String) 
   My_String = Replace (My_String,vbTab," ") 
Loop 
End Sub '--- End of Sub_2 --- 
'------------------------------------ 
Sub Sub_3 (Record_A, Zone_Name, Last_Host) 
'--- Формирование строки для записи в файл Forward_Records.txt --- 
Dim Str_IP 
Dim Str_Host 
Dim Str_Zone 
Str_Zone = Zone_Name 
If Mid(Record_A,1,1) = " " Then 
   '--- Имени нет --- 
   Str_IP = Mid (Record_A,InStr(1,Record_A," A ")+3,Len(Record_A)-InStr(1,Record_A," A ")-2 ) 
   Str_Host = Last_Host 
Else 
   '--- Имя есть --- 
   Str_IP = Mid (Record_A,InStr(1,Record_A," A ")+3,Len(Record_A)-InStr(1,Record_A," A ")-2 ) 
   Str_Host = Mid (Record_A,1,InStr(1,Record_A," ")-1) 
End If 
Last_Host = Str_Host '--- Запоминаем предыдущее имя --- 
Record_A = Str_IP & " " & Str_Host & " " & Str_Zone 
End Sub '--- End of Sub_3 --- 
'------------------------------------ 
Sub Sub_4 (Record, Zone_Name, Last_IP) 
'--- Формирование строки для записи в файл Reverse_Records.txt --- 
Dim Str_IP 
Dim Str_Host 
Dim Str_Zone 
Dim Pos 
Str_Zone = Zone_Name 
Str_IP = "" 
Pos = 0 
Do While InStr(Pos+1,Zone_Name,".") >= 1 AND Mid(Zone_Name,InStr(Pos+1,Zone_Name,".")+1,1) <> "a" 
   Str_IP = Mid(Zone_Name,Pos+1,InStr(Pos+1,Zone_Name,".")-Pos) & Str_IP 
   Pos = InStr(Pos+1,Zone_Name,".") 
Loop 
If Mid(Record,1,1) = " " Then 
   '--- IP нет --- 
   Str_IP = Last_IP 
   Str_Host = Mid (Record,InStr(1,Record," PTR ")+5,Len(Record)-InStr(1,Record," PTR ")-4 ) 
Else 
   '--- IP есть --- 
   Str_IP = Str_IP & Mid (Record,1,InStr(1,Record," ")-1) 
   Str_Host = Mid (Record,InStr(1,Record," PTR ")+5,Len(Record)-InStr(1,Record," PTR ")-4 ) 
End If 
Last_IP = Str_IP '--- Запоминаем предыдущий IP --- 
Record = Str_IP & " " & Str_Host & " " & Str_Zone 
End Sub '--- End of Sub_4 --- 
'------------------------------------ 
Function Function_5(Str_1,Str_2) 
'--- Проверка на совпадение IP в зоне --- 
Dim P1_1 '--- Позиция в строке первого пробела 
Dim P1_2 '--- Позиция в строке второго пробела 
Dim P2_1 '--- Позиция в строке первого пробела 
Dim P2_2 '--- Позиция в строке второго пробела 
Dim Temp_IP_1 
Dim Temp_IP_2 
Dim Temp_Name_1 
Dim Temp_Name_2 
Function_5 = False 
P1_1 = InStr(1,Str_1," ") 
P1_2 = InStr(InStr(1,Str_1," ")+1,Str_1," ") 
P2_1 = InStr(1,Str_2," ") 
P2_2 = InStr(InStr(1,Str_2," ")+1,Str_2," ") 
Temp_IP_1 = Mid(Str_1,1,P1_1-1) 
Temp_IP_2 = Mid(Str_2,1,P2_1-1) 
Temp_Name_1 = Mid(Str_1, P1_1 + 1, P1_2 - P1_1 -1) 
Temp_Name_2 = Mid(Str_2, P2_1 + 1, P2_2 - P2_1 -1) 
If Temp_IP_1 = Temp_IP_2 Then 
   Function_5 = True 
End If 
If Temp_Name_1 = "@" OR Temp_Name_2 = "@" Then 
   Function_5 = False 
End If 
End Function 
'------------------------------------ 
Function Function_6(Str_1,Str_2) 
'--- Проверка на совпадение имен в зоне --- 
Dim P1_1 '--- Позиция в строке первого пробела 
Dim P1_2 '--- Позиция в строке второго пробела 
Dim P2_1 '--- Позиция в строке первого пробела 
Dim P2_2 '--- Позиция в строке второго пробела 
Dim Temp_IP_1 
Dim Temp_IP_2 
Dim Temp_Name_1 
Dim Temp_Name_2 
Function_6 = False 
P1_1 = InStr(1,Str_1," ") 
P1_2 = InStr(InStr(1,Str_1," ")+1,Str_1," ") 
P2_1 = InStr(1,Str_2," ") 
P2_2 = InStr(InStr(1,Str_2," ")+1,Str_2," ") 
Temp_IP_1 = Mid(Str_1,1,P1_1-1) 
Temp_IP_2 = Mid(Str_2,1,P2_1-1) 
Temp_Name_1 = Mid(Str_1, P1_1 + 1, P1_2 - P1_1 -1) 
Temp_Name_2 = Mid(Str_2, P2_1 + 1, P2_2 - P2_1 -1) 
If Temp_Name_1 = Temp_Name_2 Then 
   Function_6 = True 
End If 
If Temp_Name_1 = "@" OR Temp_Name_2 = "@" Then 
   Function_6 = False 
End If 
End Function 
'------------------------------------ 
Function Function_7(Str_1,Str_2) 
'--- Проверка на соответствие между прямой и обратной зонами --- 
Dim P1_1 '--- Позиция в строке первого пробела 
Dim P1_2 '--- Позиция в строке второго пробела 
Dim P2_1 '--- Позиция в строке первого пробела 
Dim P2_2 '--- Позиция в строке второго пробела 
Dim Temp_IP_1 
Dim Temp_IP_2 
Dim Temp_Name_1 
Dim Temp_Name_2 
Function_7 = False 
P1_1 = InStr(1,Str_1," ") 
P1_2 = InStr(InStr(1,Str_1," ")+1,Str_1," ") 
P2_1 = InStr(1,Str_2," ") 
P2_2 = InStr(InStr(1,Str_2," ")+1,Str_2," ") 
Temp_IP_1 = Mid(Str_1,1,P1_1-1) 
Temp_IP_2 = Mid(Str_2,1,P2_1-1) 
Temp_Name_1 = Mid(Str_1, P1_1 + 1, P1_2 - P1_1 -1) 
Temp_Name_2 = Mid(Str_2, P2_1 + 1, P2_2 - P2_1 -1) 
If Temp_IP_1 = Temp_IP_2 AND  Temp_Name_1 <> Temp_Name_2 Then 
   Function_7 = True 
End If 
If Temp_IP_1 <> Temp_IP_2 AND  Temp_Name_1 = Temp_Name_2 Then 
   Function_7 = True 
End If 
End Function 
'------------------------------------ 

'--- Используемые переменные --- 
Dim Command_String ' Командная строка 
Dim Current_Dir	' Текущая директория, где находится данный скрипт 
Dim oFileSystem	' Объект типа FileSystem 
Dim oFolder		' Объект типа Folder 
Dim oShell		 ' Объект типа Shell 
Dim DNS_Server	 ' IP-адрес проверяемого DNS сервера 
Dim oF_In		  ' Объект типа File 
Dim oF_Out		 ' Объект типа File 
Dim Work_String	' Рабочая переменная типа строка 
Dim Pos_0		  ' Позиция символа в строке 
'--- Список констант --- 
Const ForReading = 1 
Const ForWriting = 2 
Const ForAppending = 8 

'DNS_Server = "193.125.1.95" 
'DNS_Server = "193.125.10.250" 

Set oFileSystem = CreateObject("Scripting.FileSystemObject") 
Set oFolder = oFileSystem.GetFolder(".\") 
Current_Dir = oFolder.Path 
Set oShell = WScript.CreateObject("WScript.Shell") 

'--- Получаем список команд утилиты dnscmd (просто так) --- 
Command_String = "cmd /C " 
Command_String =Command_String & Current_Dir & "\" & "dnscmd.exe" 
Command_String =Command_String & " > " & Current_Dir & "\" & "Command_List.txt" 
Return = oShell.Run (Command_String, 0, True) 

'--- Получаем список зон с проверяемого DNS сервера --- 
Command_String = "cmd /C " 
Command_String =Command_String & Current_Dir & "\" & "dnscmd.exe" 
Command_String =Command_String & " " & DNS_Server 
Command_String =Command_String & " " & "/EnumZones" 
Command_String =Command_String & " > " & Current_Dir & "\" & "EnumZones.txt" 
Return = oShell.Run (Command_String, 0, True) 

'--- Получаем список Forward зон --- 
Set oF_In = oFileSystem.OpenTextFile (".\" & "EnumZones.txt", ForReading, True) 
Set oF_Out = oFileSystem.OpenTextFile (".\" & "Forward_Zones.txt", ForWriting, True) 
Do While oF_In.AtEndOfStream <> True '--- Перебор строк входного файла 
   Work_String = oF_In.ReadLine 
   Pos_0 = InStr(1,Work_String,"DS") 
   If Pos_0 >= 1 Then 
	  Pos_0 = InStr(1,Work_String,"Rev") 
	  If Pos_0 = 0 Then '--- Это НЕ реверсивная зона --- 
		 '--- Замещаем совокупности подряд расположенных пробелов одним пробелом --- 
		 Call Sub_1(Work_String) 
		 '--- Удаляем если нужно первый пробел --- 
		 If Mid (Work_String,1,1) = " " Then 
			Work_String = Mid (Work_String,2,Len(Work_String)-1) 
		 End If 
		 '--- Получаем только название зоны --- 
		 Pos_0 = InStr(1,Work_String," ") 
		 Work_String = Mid (Work_String,1,Pos_0-1) 
		 '--- Если название зоны ".", то НЕ пишем --- 
		 Pos_0 = InStr(1,Work_String,".") 
		 If Pos_0 <> 1 Then 
			oF_Out.Write Work_String & vbCrLf 
		 End If 
	  End If 
   End If 
Loop '--- Конец перебора строк входного файла со списком зон --- 
oF_Out.Close 
oF_In.Close 
'--- Получаем список Reverse зон --- 
Set oF_In = oFileSystem.OpenTextFile (".\" & "EnumZones.txt", ForReading, True) 
Set oF_Out = oFileSystem.OpenTextFile (".\" & "Reverse_Zones.txt", ForWriting, True) 
Do While oF_In.AtEndOfStream <> True '--- Перебор строк входного файла 
   Work_String = oF_In.ReadLine 
   Pos_0 = InStr(1,Work_String,"DS") 
   If Pos_0 >= 1 Then 
	  Pos_0 = InStr(1,Work_String,"Rev") 
	  If Pos_0 >= 1 Then '--- Это реверсивная зона --- 
		 '--- Замещаем совокупности подряд расположенных пробелов одним пробелом --- 
		 Call Sub_1(Work_String) 
		 '--- Удаляем если нужно первый пробел --- 
		 If Mid (Work_String,1,1) = " " Then 
			Work_String = Mid (Work_String,2,Len(Work_String)-1) 
		 End If 
		 '--- Получаем только название зоны --- 
		 Pos_0 = InStr(1,Work_String," ") 
		 Work_String = Mid (Work_String,1,Pos_0-1) 
		 oF_Out.Write Work_String & vbCrLf 
	  End If 
   End If 
Loop '--- Конец перебора строк входного файла со списком зон --- 
oF_Out.Close 
oF_In.Close 
'--- Получаем все A-записи из прямых зон и пишем их в файл Forward_Records.txt --- 
'--- в формате : IP-адрес, пробел, имя хоста, пробел, имя зоны --- 
Set oF_In = oFileSystem.OpenTextFile (".\" & "Forward_Zones.txt", ForReading, True) 
Set oF_Out = oFileSystem.OpenTextFile (".\" & "Forward_Records.txt", ForWriting, True) 
Do While oF_In.AtEndOfStream <> True '--- Перебор строк входного файла 
   Work_String = oF_In.ReadLine '--- Имя прямой зоны (текущее) --- 
   '--- Получаем список записей текущей зоны с проверяемого DNS сервера --- 
   Command_String = "cmd /C " 
   Command_String =Command_String & Current_Dir & "\" & "dnscmd.exe" 
   Command_String =Command_String & " " & DNS_Server 
   Command_String =Command_String & " " & "/EnumRecords" 
   Command_String =Command_String & " " & Work_String 
   Command_String =Command_String & " " & "@" 
   Command_String =Command_String & " > " & Current_Dir & "\" & "Temp_For.txt" 
   Return = oShell.Run (Command_String, 0, True) 
   '--- Начинаем разбирать полученный файл (Temp_For.txt) и собирать нужные записи --- 
   Set oF_In_For = oFileSystem.OpenTextFile (".\" & "Temp_For.txt", ForReading, True) 
   Temp_String_For = " " '--- Для хранения предыдущей записи -- 
   Do While oF_In_For.AtEndOfStream <> True '--- Перебор строк входного файла 
	  Work_String_For = oF_In_For.ReadLine '--- Текущая запись --- 
	  '--- Замещаем символ табуляции одним пробелом --- 
	  Call Sub_2(Work_String_For) 
	  '--- Замещаем совокупности подряд расположенных пробелов одним пробелом --- 
	  Call sub_1(Work_String_For) 
	  Pos_0 = InStr(1,Work_String_For," A ") 
	  If Pos_0 >= 1 Then '--- Это запись типа А --- 
		 Call Sub_3 (Work_String_For, Work_String, Temp_String_For)		  
		 oF_Out.Write Work_String_For & vbCrLf 
	  End If 
   Loop '--- Конец перебора записей типа А --- 
   oF_In_For.Close 
Loop '--- Конец перебора строк входного файла со списком прямых зон --- 
oF_Out.Close 
oF_In.Close 
'--- Получаем все PTR-записи из обратных зон и пишем их в файл Reverse_Records.txt --- 
'--- в формате : IP-адрес, пробел, имя хоста, пробел, имя зоны --- 
Set oF_In = oFileSystem.OpenTextFile (".\" & "Reverse_Zones.txt", ForReading, True) 
Set oF_Out = oFileSystem.OpenTextFile (".\" & "Reverse_Records.txt", ForWriting, True) 
Do While oF_In.AtEndOfStream <> True '--- Перебор строк входного файла 
   Work_String = oF_In.ReadLine '--- Имя прямой зоны (текущее) --- 
   '--- Получаем список записей текущей зоны с проверяемого DNS сервера --- 
   Command_String = "cmd /C " 
   Command_String =Command_String & Current_Dir & "\" & "dnscmd.exe" 
   Command_String =Command_String & " " & DNS_Server 
   Command_String =Command_String & " " & "/EnumRecords" 
   Command_String =Command_String & " " & Work_String 
   Command_String =Command_String & " " & "@" 
   Command_String =Command_String & " > " & Current_Dir & "\" & "Temp_Rev.txt" 
   Return = oShell.Run (Command_String, 0, True) 
   '--- Начинаем разбирать полученный файл (Temp_Rev.txt) и собирать нужные записи --- 
   Set oF_In_Rev = oFileSystem.OpenTextFile (".\" & "Temp_Rev.txt", ForReading, True) 
   Temp_String_Rev = " " '--- Для хранения предыдущей записи -- 
   Do While oF_In_Rev.AtEndOfStream <> True '--- Перебор строк входного файла 
	  Work_String_Rev = oF_In_Rev.ReadLine '--- Текущая запись --- 
	  '--- Замещаем символ табуляции одним пробелом --- 
	  Call Sub_2(Work_String_Rev) 
	  '--- Замещаем совокупности подряд расположенных пробелов одним пробелом --- 
	  Call Sub_1(Work_String_Rev) 
	  Pos_0 = InStr(1,Work_String_Rev," PTR ") 
	  If Pos_0 >= 1 Then '--- Это запись типа PTR --- 
		 Call Sub_4 (Work_String_Rev, Work_String, Temp_String_Rev)		  
		 oF_Out.Write Work_String_Rev & vbCrLf 
	  End If 
   Loop '--- Конец перебора записей типа PTR --- 
   oF_In_Rev.Close 
Loop '--- Конец перебора строк входного файла со списком обратных зон --- 
oF_Out.Close 
oF_In.Close 
'--- Анализируем файлы с записями зон на наличие различных ошибок (несоответствий) --- 
'--- и ошибки пишем в файл ошибок --- 
Set oF_Err_Log = oFileSystem.OpenTextFile (".\" & "Error_Log.txt", ForWriting, True) 
'--- 1. Ищем дубликаты записей в прямой зоне (зонах) --- 
oF_Err_Log.Write "Проверка дубликатов в прямой зоне" & vbCrLf 
oF_Err_Log.Write "----------------------" & vbCrLf 
Set oF_In_1 = oFileSystem.OpenTextFile (".\" & "Forward_Records.txt", ForReading, True) 
Do While oF_In_1.AtEndOfStream <> True '--- Перебор записей --- 
   Work_String_1 = oF_In_1.ReadLine '--- Текущая запись --- 
   Set oF_In_2 = oFileSystem.OpenTextFile (".\" & "Forward_Records.txt", ForReading, True) 
   Do While oF_In_2.AtEndOfStream <> True '--- Перебор записей --- 
	  Work_String_2 = oF_In_2.ReadLine '--- Текущая запись --- 
	  If Work_String_1 <> Work_String_2 Then 
		 If Function_5 (Work_String_1, Work_String_2) Then '--- Проверка по IP --- 
			oF_Err_Log.Write "Совпадение по IP" & vbCrLf 
			oF_Err_Log.Write  Work_String_1 & vbCrLf 
			oF_Err_Log.Write  Work_String_2 & vbCrLf 
			oF_Err_Log.Write "-----------------" & vbCrLf 
		 End If '--- Проверка по IP --- 
		 If Function_6 (Work_String_1, Work_String_2) Then '--- Проверка по именам --- 
			oF_Err_Log.Write "Совпадение по имени" & vbCrLf 
			oF_Err_Log.Write  Work_String_1 & vbCrLf 
			oF_Err_Log.Write  Work_String_2 & vbCrLf 
			oF_Err_Log.Write "-----------------" & vbCrLf 
		 End If '--- Проверка по имени --- 
	  End If 
   Loop 
   oF_In_2.Close 
Loop 
oF_In_1.Close 
'--- 2. Ищем дубликаты записей в обратной зоне (зонах) --- 
oF_Err_Log.Write "Проверка дубликатов в обратной зоне (зонах)" & vbCrLf 
oF_Err_Log.Write "----------------------" & vbCrLf 
Set oF_In_1 = oFileSystem.OpenTextFile (".\" & "Reverse_Records.txt", ForReading, True) 
Do While oF_In_1.AtEndOfStream <> True '--- Перебор записей --- 
   Work_String_1 = oF_In_1.ReadLine '--- Текущая запись --- 
   Set oF_In_2 = oFileSystem.OpenTextFile (".\" & "Reverse_Records.txt", ForReading, True) 
   Do While oF_In_2.AtEndOfStream <> True '--- Перебор записей --- 
	  Work_String_2 = oF_In_2.ReadLine '--- Текущая запись --- 
	  If Work_String_1 <> Work_String_2 Then 
		 If Function_5 (Work_String_1, Work_String_2) Then '--- Проверка по IP --- 
			oF_Err_Log.Write "Совпадение по IP" & vbCrLf 
			oF_Err_Log.Write  Work_String_1 & vbCrLf 
			oF_Err_Log.Write  Work_String_2 & vbCrLf 
			oF_Err_Log.Write "-----------------" & vbCrLf 
		 End If '--- Проверка по IP --- 
		 If Function_6 (Work_String_1, Work_String_2) Then '--- Проверка по именам --- 
			oF_Err_Log.Write "Совпадение по имени" & vbCrLf 
			oF_Err_Log.Write  Work_String_1 & vbCrLf 
			oF_Err_Log.Write  Work_String_2 & vbCrLf 
			oF_Err_Log.Write "-----------------" & vbCrLf 
		 End If '--- Проверка по имени --- 
	  End If 
   Loop 
   oF_In_2.Close 
Loop 
oF_In_1.Close 
'--- 3. Ищем несоответствие между прямой и обратной зоной (зонами) --- 
oF_Err_Log.Write "Проверка несоответствия между прямой и обратной зонами" & vbCrLf 
oF_Err_Log.Write "------------------------------------------------------" & vbCrLf 
Set oF_In_1 = oFileSystem.OpenTextFile (".\" & "Forward_Records.txt", ForReading, True) 
Do While oF_In_1.AtEndOfStream <> True '--- Перебор записей --- 
   Work_String_1 = oF_In_1.ReadLine '--- Текущая запись --- 
   Set oF_In_2 = oFileSystem.OpenTextFile (".\" & "Reverse_Records.txt", ForReading, True) 
   Do While oF_In_2.AtEndOfStream <> True '--- Перебор записей --- 
	  Work_String_2 = oF_In_2.ReadLine '--- Текущая запись --- 
	  If Function_7 (Work_String_1, Work_String_2) Then '--- Проверка между прямой и обратной зонами --- 
			oF_Err_Log.Write "Нет соответствия между прямой и обратной зонами" & vbCrLf 
			oF_Err_Log.Write  Work_String_1 & vbCrLf 
			oF_Err_Log.Write  Work_String_2 & vbCrLf 
			oF_Err_Log.Write "-----------------------------------------------" & vbCrLf 
	  End If '--- Проверка между прямой и обратной зонами --- 
   Loop 
   oF_In_2.Close 
Loop 
oF_In_1.Close 
'--- Завершаем работу --- 
oF_Err_Log.Close '--- Закрываем журнал ошибок --- 
Wscript.Echo "Завершение проверок записей в DNS сервере " & DNS_Server 
Wscript.Quit (0) ' Exit from script


#9 Пользователь не на сайте   Xaegr 

  • PowerShell addict
  • PipPipPipPipPipPipPip

Отправлено 27 December 2007 - 16:31

Offer Remote Assistance без запроса разрешения пользователя. (VBS) © DGrundel, Lewis Roberts, Rob Dunn

'Unsolicited Remote Assistance version 1.1_RD - 11/20/07
'
'Remotely control a computer via Remote Assistance without requiring the user
' to either accept the incoming connection or grant the 'Expert' remote
' control permissions.
'
'*** Description:
'
'This script allows you to connect to a computer via Remote Assistance without
' requiring remote assistance solicitation from the user needing help.
'
'The script asks you for a computer name, and will ping the remote
' computer via WMI, then copy three modified help center htm files to the
' remote station (as well as the local station) which allows the unsolicited
' connection to be made.  On the remote user's side, the updated htm file
' will automatically select the 'allow control' option for the remotely
' connected expert.
'
'Once the connection is made, the expert can click 'Take Control' without
' prompting the user to do anything further.
'
'Once the expert has finished with the session to the remote machine,
' an original copy of the htm files are sent back to the computer.
'
'*** Credits:
'
'http://dgrundel.wordpress.com/2007/10/04/unsolicited-remote-assistance/
'http://www.lewisroberts.com/?p=40
'
'This script was primarily written by 'DGrundel', and the changes to the
' HTM files were made by 'DGrundel' and Lewis Roberts.  I made some
' changes to the vbscript below that allows for systems that have Windows
' installed in a folder other than the c:\ drive.
'
'Modifed by: Rob Dunn
'Email: uphold at (two-thousand-one) @ hotmail dot com
'Website: [url="http://www.vbshf.com"]http://www.vbshf.com[/url]
'
'*** What you need to get started:
'
'In addition to this script, you need the following modified files:
' * helpeeaccept.htm
' * TakeControlMsgs.htm
' * UnSolicitedRCUI.htm
'
'You can copy the originals (search your %windir%\pchealth folders for them)
' and modify them per the instructions specified at DGrundel's website:
' http://dgrundel.wordpress.com/2007/10/04/u...ote-assistance/


Сам скрипт, измененные файлы и прочее в приаттаченном зипе. Очень там всё длинно, да и всё равно измененные файлы аттачить пришлось бы.

Вложений



#10 Пользователь не на сайте   Andy_user 

  • Новичок
  • Pip

Отправлено 28 December 2007 - 13:51

'------------------------------------
'   Обнаруживает в локальной сети
'   появление новых MAC-ов :
'
' - запоминает текущее соответствие MAC - IP; 
' - с некоторой периодичностью "берет" содержимое ARP-кэша; 
' - сравнивает и обнаруживает расхождения; 
' - сообщает (ведет лог) об обнаруженных расхождениях.
'-----------------------------------------------
On Error Resume Next '--- При ошибке переходить на следующий оператор --- 
'--- Константы ------------------------------ 
Const ForReading = 1, ForWriting = 2, ForAppending = 8 
Const My_Network = "193.125.1." 
Const My_Interface = "193.125.1.179" 
'--- Функции и подпрограммы ----------- 
Function Is_MAC_In_List(MAC_In) 
Dim Fso 
Dim File_MAC_List 
Dim String_0 
Dim String_1 
Dim Priz_0 
Is_MAC_In_List = False 
Set Fso = CreateObject("Scripting.FileSystemObject") 
Set File_MAC_List = Fso.OpenTextFile( ".\MAC_List.txt", ForReading, True) 
Priz_0 = 0 ' Такого MAC-а в списке нет 
Do While File_MAC_List.AtEndOfStream <> True 
   String_0 = File_MAC_List.ReadLine 
   String_1 = Mid(String_0,1,17) 
   If String_1=MAC_In Then 
	  Priz_0 = 1 ' Такой MAC в списке "хороших" - есть 
	  If Mid(String_0,19,1)="+" Then 
		 Is_MAC_In_List = True 
	  End If 
	  Exit Do 
   End If 
Loop 
File_MAC_List.Close 
If Priz_0 = 0 Then 
  Set File_MAC_List = Fso.OpenTextFile( ".\MAC_List.txt", ForAppending, True) 
  String_0 = MAC_In & "  " 
  File_MAC_List.WriteLine String_0 
  File_MAC_List.Close 
End If 
End Function 
'------------------ 
Sub My_send(To_dest, Message) 
Dim Comand_String 
Dim aaa 
Set aaa = WScript.CreateObject("WScript.Shell") 
Comand_String ="NET SEND " & To_dest & " " 
Comand_String =Comand_String & Message 
Return = aaa.Run (Comand_String, 0, True) 
End Sub 
'-------- 
Sub PingForArp 
Dim Comand_String 
Set oShell = WScript.CreateObject ("WScript.Shell") 
For i = 1 To 254 Step 1 ' Перебор 254 IP-адресов 
  Comand_String = "ping -n 1 -w 1 " & My_Network 
  Return = oShell.Run (Comand_String & i , 0, False) 
Next 
End Sub 
'-------- 
Sub My_Work 
Dim Fso 
Dim File_ARP 
Dim File_MAC_0 
Dim File_MAC_1 
Dim File_LOG 
Dim String_0 
Dim String_MAC_0 
Dim String_MAC_1 
Dim String_IP_0 
Dim String_IP_1 
Dim Priz 
Set Fso = CreateObject("Scripting.FileSystemObject") 
Set File_ARP = Fso.OpenTextFile( ".\ARP.txt", ForReading, True) 
Set File_MAC_1 = Fso.OpenTextFile( ".\MAC_1.txt", ForWriting, True) 
Set File_LOG = Fso.OpenTextFile( ".\LOG.txt", ForAppending, True) 
'--- Формируем файл MAC_1.txt --- 
Do While File_ARP.AtEndOfStream <> True 
   String_0 = File_ARP.ReadLine 
   If (InStr (1, String_0, "  " & My_Network) = 1) Then 
	  Do While InStr(1,String_0,"  ") >= 1 AND InStr(1,String_0,"  ") <= Len(String_0) 
		  String_0 = Replace (String_0,"  "," ") 
	  Loop 
	  String_MAC_1 = Mid(String_0,InStr(3,String_0," ")+1,17) 
	  String_IP_1 = Mid(String_0,2, InStr(3,String_0," ")-2) 
	  File_MAC_1.WriteLine String_MAC_1 & " " & String_IP_1 
   End If 
Loop 
File_ARP.Close 
File_MAC_1.Close ' Файл MAC_1.txt готов 
'--- Проверяем ПОЯВЛЕНИЕ новых MAC-ов (в MAC_0.txt - нет, в MAC_1.txt - есть) 
Set File_MAC_1 = Fso.OpenTextFile( ".\MAC_1.txt", ForReading, True) 
Do While File_MAC_1.AtEndOfStream <> True 
   Priz = 0 ' Признак того, что среди предыдщ. MAC-ов этого не было 
   String_MAC_1 = File_MAC_1.ReadLine 
   String_IP_1 = Mid(String_MAC_1,InStr(2,String_MAC_1," ")+1,Len(String_MAC_1)-InStr(2,String_MAC_1," ")) 
   String_MAC_1 = Mid(String_MAC_1,1,17) 
   If Is_MAC_In_List(String_MAC_1)=False Then 
	 Set File_MAC_0 = Fso.OpenTextFile( ".\MAC_0.txt", ForReading, True) 
	 Do While File_MAC_0.AtEndOfStream <> True 
		String_MAC_0 = File_MAC_0.ReadLine 
		String_MAC_0 = Mid(String_MAC_0,1,17) 
		If String_MAC_1 = String_MAC_0 Then 
		   Priz = 1 'Такой MAC на предыдущем шаге был 
		End If 
	 Loop 
	 File_MAC_0.Close 
	 If Priz = 0 Then 
		File_LOG.WriteLine "Появился MAC " & String_MAC_1 & "; IP = " & String_IP_1 & "   " & Date() & "  " & Time() 
		Call My_send ("193.125.1.179","!! НЕИЗВЕСТНЫЙ КОМП !!  IP = "& String_IP_1) 
	 End If 
   End If 
Loop 
File_MAC_1.Close 
'--- Проверяем ИСЧЕЗНОВЕНИЕ старых MAC-ов (в MAC_0.txt - есть, в MAC_1.txt - нет) 
Set File_MAC_0 = Fso.OpenTextFile( ".\MAC_0.txt", ForReading, True) 
Do While File_MAC_0.AtEndOfStream <> True 
   Priz = 0 ' Признак того, что среди нынешних MAC-ов этого не было 
   String_MAC_0 = File_MAC_0.ReadLine 
   String_MAC_0 = Mid(String_MAC_0,1,17) 
   If Is_MAC_In_List(String_MAC_0)=False Then 
	 Set File_MAC_1 = Fso.OpenTextFile( ".\MAC_1.txt", ForReading, True) 
	 Do While File_MAC_1.AtEndOfStream <> True 
		String_MAC_1 = File_MAC_1.ReadLine 
		String_MAC_1 = Mid(String_MAC_1,1,17) 
		If String_MAC_1 = String_MAC_0 Then 
		   Priz = 1 'Такой MAC на предыдущем шаге был 
		End If 
	 Loop 
	 File_MAC_1.Close 
	 If Priz = 0 Then 
		File_LOG.WriteLine "Исчез " & String_MAC_0 & "  " & Date() & "  " & Time() 
	 End If 
   End If 
Loop 
File_MAC_0.Close 
'-- Надо переименовать MAC_1.txt в MAC_0.txt --- 
Set File_MAC_1 = Fso.GetFile(".\MAC_1.txt") 
File_MAC_1.Copy(".\MAC_0.txt") 
'----------- 
File_LOG.Close 
Set Fso = Nothing 
End Sub 
'--- Переменные --- 
Dim Fso 
Dim Priznak_Change_Time	' 0 - change yes; 1 - change no 
Dim Fso1 
Dim Current_Time 
'--- Путь до рабочей папки --- 
Path_Work = ".\" '--- промежуточное хранение --- 
'**************************************** 
Err.Clear 
'--- Start --- 
Priznak_Change_Time = 0 
Set Fso1 = CreateObject("Scripting.FileSystemObject") 
'--- Удаляем файл "END.end" 
Set My_End = CreateObject("Scripting.FileSystemObject") '--- 
My_End.DeleteFile Path_Work &  "End.end" 
'************************************************************** 
Do While 1=1						'--- Main loop --- 
  Do While Priznak_Change_Time=0 '--- Выполняем в начале каждой минуты --- 
  '************************ 
'  Current_Time = Time() 


  Return = oShell.Run ("cmd /C arp -d * " & My_Interface, 0, True) 
  Call PingForArp() 
  WScript.Sleep(10000) ' Ждем 10 секунд 
  Return = oShell.Run ("cmd /C arp -a -N " & My_Interface & " > .\ARP.txt", 0, True) 

  Call My_Work() 

  '************************ 
  '--- Проверка надо ли остановить работу скрипта --- 
  ' В рабочей директории проверяется наличие 
  ' файла "End.end" . Если такой файл есть, то скрипт завершается. 
  Err.Clear '--- Сброс ошибки --- 
  Set My_End_End = My_End.OpenTextFile(Path_Work &  "End.end", ForAppending, False) 
  ' 53 - файл не найден 
  If (Err.Number = 0) Then '--- Файл есть, надо закончить работу --- 
	  My_String_1 = "Конец работы скрипта " & vbCrlf 
	  My_String_1 = My_String_1 & "проверки сети " & My_Network & "0" 
	  Wscript.Echo My_String_1 
	  Wscript.Quit ' ===>>> Выход из программы 
  End If 
  Current_Time = Time() 
  Err.Clear '--- Сброс ошибки --- 
  Priznak_Change_Time = 1 
  Loop '--- All worked --- 
  '********************************* 
  If ( StrComp(Left(Current_Time, 5), Left(Time(), 5) ) = 0 )	Then 
	  WScript.Sleep(1000)  ' Задержка на 1 секунду 
  Else 
	  Priznak_Change_Time = 0 
   End If 
Loop '--- End of Main loop ---


#11 Пользователь не на сайте   Andy_user 

  • Новичок
  • Pip

Отправлено 28 December 2007 - 13:52

'******************************************** 
' Добавляем маршрут на удаленном компе 
' (зная идентификатор и пароль администратора) 
'******************************************** 
On error Resume Next 
Const SW_NORMAL = 1 
'****************************************** 
strComputer = "193.125.1.226" 
strUser = "Admin" 
strPassword = "12345678" 
strDomain = "secur-007" ' Имя компа 
'****************************************** 
Err.Clear 
'--- Подключаемся --- 
Set objSWbemLocator = CreateObject ("WbemScripting.SWbemLocator") 
If (Err.Number <> 0) Then 
   WScript.Echo "Error (objSWbemLocator)  : " & Err.Number & "   " & Err.Description 
   WScript.Quit 
End If 
Err.Clear 
Set objSWbemServices = objSWbemLocator.ConnectServer ( _ 
   strComputer, _ 
   "root\cimv2", _ 
   strUser, _ 
   strPassword, _ 
   "MS_409", _ 
   "ntlmdomain:" & strDomain) 
If (Err.Number <> 0) Then 
   WScript.Echo "Error (objSWbemServices)  : " & Hex(Err.Number) & "   " & Err.Description 
   WScript.Quit 
End If 
Err.Clear 
Set objProcess = objSWbemServices.Get("Win32_Process") 
If (Err.Number <> 0) Then 
   WScript.Echo "Error 1 " & Hex(Err.Number) & "   " & Err.Description 
   WScript.Quit 
End If 
Err.Clear 
Set objStartup = objSWbemServices.Get("Win32_ProcessStartup") 
Set objConfig = objStartup.SpawnInstance_ 
objConfig.ShowWindow = SW_NORMAL 
strCommand = "route add 0.0.0.0 mask 0.0.0.0 193.125.1.180" 
intReturn = objProcess.Create (strCommand, Null, objConfig, intProcessID) 
If (Err.Number <> 0) Then 
   WScript.Echo "Error 2 " & Hex(Err.Number) & "   " & Err.Description 
   WScript.Quit 
End If 
Err.Clear


#12 Пользователь не на сайте   Andy_user 

  • Новичок
  • Pip

Отправлено 28 December 2007 - 13:53

'---------------------------------
'Пример VBS-скрипта для отправки письма:
'-----------------------------------------
'On Error Resume Next
'------------------------------------------------------------------
Dim objMsg
Dim Config
Set objMsg = CreateObject("CDO.Message")
Set Config = CreateObject("CDO.Configuration")
Set Config = objMsg.Configuration
' Set the sendusing field to '....'.
	Config("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
	Config("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "pechkin"
	Config("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
' Update the fields.
Config.Fields.Update
With objMsg
   .To   = "lso@xxxx.ru"
   .From = "paa@xxxx.ru"
   .Subject  = "Test sending email from script"
   .TextBody = ""
   .AddAttachment "c:\Proba.txt"
   ' ..
End With
objMsg.Send
Wscript.Echo "Отправка завершена"
Wscript.Quit


#13 Пользователь не на сайте   Serge88 

  • Интеллектуальное хамло
  • PipPipPipPipPipPipPip

Отправлено 28 December 2007 - 14:36

Пожалуй и я запостю :D

Скрипт монтирует диск T: у пользователя при этом проверяется наличие папки (соотвествующее имени пользователя) и если ее нет, то она создается по пути \\Server\HF$ и на эту папку выставляются права только на этого пользователя и для учетки Admin.

З.Ы. выставление прав для пользователя и админа реализованно 2 разными способами

' ------ SCRIPT CONFIGURATION ------
Set WshShell = Wscript.CreateObject("Wscript.Shell") 
Set objNetwork = CreateObject("Wscript.Network")
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objWSH = CreateObject("WScript.Shell")
objUserName = objNetwork.UserName
strDrive = "T:" 
strPath = "\\Server\HF$\"&objUserName
boolPersistent = True 
' ------ END CONFIGURATION ---------
if (objFS.FolderExists(strPath)) = false then

Call objFS.CreateFolder(strPath) 

strACLCommand = "cmd /c echo y| CACLS "
strACLCommand = strACLCommand & strPath
strACLCommand = strACLCommand & " /g DOMEN\" & objUserName & ":F"
return = objWSH.Run (strACLCommand , 0, True)

Call WshShell.Run("cacls " & strPath & _ 
" /e /g DOMEN\" & "Admin" & ":f", HIDE_WINDOW, WAIT_ON_RETURN) 

end if

objNetwork.MapNetworkDrive strDrive, strPath, boolPersistent


#14 Пользователь не на сайте   Eagle 

  • Новичок
  • Pip

Отправлено 29 December 2007 - 12:01

Скрипт (vbs) мапит принтера на основе членства в соответствующей группе.
Один недостаток - если пользователь входит в несколько групп, принтеры для которых делаются дефолтными, то в результате дефолтным будет тот принтер, кот. мапится в скрипте последним.
Dim oNet
Dim sPrintServer

'On Error Resume Next

Set oNet = CreateObject("WScript.Network")

' default print server
sPrintserver = "DC1"


If IsMember("Printer1") then
   oNet.AddWindowsPrinterConnection "\\" & sPrintServer & "\Printer1"
End If

If IsMember("Printer2") then
   oNet.AddWindowsPrinterConnection "\\" & sPrintServer & "\Printer2"
End If

If IsMember("Printer3") then
   oNet.AddWindowsPrinterConnection "\\" & sPrintServer & "\Printer3"
   oNet.SetDefaultPrinter "\\" & sPrintServer & "\Printer3"
End If

If IsMember("Printer4") then
   oNet.AddWindowsPrinterConnection "\\" & sPrintServer & "\Printer4"
   oNet.SetDefaultPrinter "\\" & sPrintServer & "\Printer4"
End If




' FUNCTION ============ IsMEmber =====================================================
Function IsMember(sGroup)
' IsMember
' Test to see if user if member of specified group

' sGroup			Name of group
' Returns		   True if user is group member

	Dim sAdsPath, oUser, oGroup
	' ================= Populate dictionary if not yet created =======================
	If IsEmpty(g_oGroupDict) Then
		Set g_oGroupDict = CreateObject("Scripting.Dictionary")
		g_oGroupDict.CompareMode = vbTextCompare
		sAdsPath = oNet.UserDomain & "/" & oNet.UserName
   On Error Resume Next
	  Set oUser = GetObject("WinNT://" & sAdsPath & ",user")
		 If Err.Number then
			IsMember = FALSE
			Exit Function
		 End IF	  
   On Error Goto 0
	   For Each oGroup In oUser.Groups
			g_oGroupDict.Add oGroup.Name, "-"
		Next
		Set oUser = Nothing
	End If
	IsMember = CBool(g_oGroupDict.Exists(sGroup))
End Function


#15 Пользователь не на сайте   Eagle 

  • Новичок
  • Pip

Отправлено 29 December 2007 - 12:06

Скрипт размещающий на рабочий стол нужные ярлыки в зависимости от членства в группе. Кстати функции проверки членства в группе пригодятся вам для других скриптов.

Dim oNet
Dim Text, Title, Lnk_Title
Dim WshShell   
Dim Shortcut, DesktopPath
Dim sSourceDir
Dim oFSO

Set oFSO   = CreateObject("Scripting.FileSystemObject")
Set oNet = CreateObject("WScript.Network")
Set WshShell = WScript.CreateObject("WScript.Shell")

If IsMember("group1") then
   Set WshShell = WScript.CreateObject("WScript.Shell")
DesktopPath = WshShell.SpecialFolders("Desktop")
Lnk_Title = "\Страница поисковика.lnk"
Set Shortcut = WshShell.CreateShortcut(DesktopPath & Lnk_Title)
Shortcut.TargetPath = WshShell.ExpandEnvironmentStrings("http://www.google.ru")
Shortcut.WorkingDirectory =WshShell.ExpandEnvironmentStrings("%WINDIR%")
Shortcut.WindowStyle = 1 
Shortcut.IconLocation = WshShell.ExpandEnvironmentStrings("C:\Program Files\Internet Explorer\IEXPLORE.EXE, 0")		   
Shortcut.Save
End If

If IsMember("group2") then
   Set WshShell = WScript.CreateObject("WScript.Shell")
DesktopPath = WshShell.SpecialFolders("Desktop")
Lnk_Title = "\Имя папки.lnk"
Set Shortcut = WshShell.CreateShortcut(DesktopPath & Lnk_Title)
Shortcut.TargetPath = WshShell.ExpandEnvironmentStrings("\\server.domain.ru\Share")
Shortcut.WorkingDirectory =WshShell.ExpandEnvironmentStrings("%WINDIR%")
Shortcut.WindowStyle = 1 
Shortcut.IconLocation = WshShell.ExpandEnvironmentStrings("\\server.domain.ru\Share, 0")		   
Shortcut.Save
End If


Function IsMember(sGroup)
	Dim sAdsPath, oUser, oGroup
	If IsEmpty(g_oGroupDict) Then
		Set g_oGroupDict = CreateObject("Scripting.Dictionary")
		g_oGroupDict.CompareMode = vbTextCompare
		sAdsPath = oNet.UserDomain & "/" & oNet.UserName
   On Error Resume Next
	  Set oUser = GetObject("WinNT://" & sAdsPath & ",user")
		 If Err.Number then
			IsMember = FALSE
			Exit Function
		 End IF	  
   On Error Goto 0
	   For Each oGroup In oUser.Groups
			g_oGroupDict.Add oGroup.Name, "-"
		Next
		Set oUser = Nothing
	End If
	IsMember = CBool(g_oGroupDict.Exists(sGroup))
End Function

Function FileUpdate(Source, Dest)
   Dim sSourceFile
   Set sSourceFile = oFSO.GetFile(Source)
   oFSO.CopyFile sSourceFile.Path, Dest, TRUE
End Function


#16 Пользователь не на сайте   shs 

  • Многописатель
  • PipPipPipPipPipPip

Отправлено 02 January 2008 - 22:52

Cкрипт для обмена данными через ftp-сервер /рыба для автообмена данными в 1с/ (cmd batch) © ShS

(IMHO, содержит достаточно подробные комментарии, посему повторяться не буду)
rem @echo off
rem ****************************************************************************
rem
rem 20051212 ShS
rem
rem Командный файл для заливки файлов на FTP-сервер v 0.02
rem 
rem *****************************************************************************
rem ======================= Определяем переменные ============================
rem 
rem ======================= DialUp variables
rem 
rem DUConnectionName	- имя соединения
rem если вы не используете DialUp для установления связи с провайдером,
rem то DUConnectionName должно содержать пустую строку (set DUConnectionName="")  
rem DUUserName		- имя пользователя DialUp
rem DUUserPasswor	- пароль пользователя DialUp
	set DUConnectionName=""
	set DUUserName=dpguest
	set DUUserPassword=dppass
rem 
rem ======================= FTP variables
rem 
rem FTPUserName 	- имя пользователя
rem FTPUserPassword 	- пароль пользователя
rem FTPIPAddress 	- IP-адрес FTP-сервера
rem LocalSourcePath 	- локальная папка, которая содержит файлы для загрузки на FTP-сервер
rem FTPDestinationPath 	- директория на FTP-сервере, куда будут загружены файлы
rem FTPCmdFileName 	- путь к файлу с набором команд для загрузки файлов на FTP
rem
	set FTPUserName=xxx
	set FTPUserPassword=yyy
	set FTPIPAddress=zzz 
	set LocalSourcePath=\TEMP\Scripts\sc
	set FTPDestinationPath=1c
	set FTPCmdFileName=.\FTPcommands.txt
rem ==========================================================================
rem
rem Проверяем необходимость дозвона до провайдера
rem если вы не используете DialUp для установления связи с провайдером,
rem то DUConnectionName должно содержать пустую строку (set DUConnectionName="")  
rem
	if %DUConnectionName%=="" goto FTPDownLoad
rem
rem ======================== Дозвон до провайдера ============================
rem 
:DIAL
	rasdial %DUConnectionName% %DUUserName% %DUUserPassword%
	if "%errorlevel%"=="0" goto FTPDownLoad
	set /P answer=Дозвониться до провайдера не удалось. Повторить попытку дозвона?(Y/N)
	if /I "%answer%"=="Y" goto DIAL
	goto END
:FTPDownLoad
rem ======================== Забираем файлы с FTP ============================
rem 
rem ===== удаляем cтарые версии файлов обмена, перед загрузкой новых с FTP
	del /q %LocalSourcePath%\*.zip
pause
rem ======================== подготовка файла с набором команд для FTP
rem 
	echo %FTPUserName%>%FTPCmdFileName%
	echo %FTPUserPassword%>>%FTPCmdFileName%
	echo lcd %LocalSourcePath%>>%FTPCmdFileName%
	echo cd %FTPDestinationPath%>>%FTPCmdFileName%
	echo type binary>>%FTPCmdFileName%
	echo mget fsc*.zip>>%FTPCmdFileName%
	echo quit >>%FTPCmdFileName%
rem ======================== Выполняем подготовленный набор команд
	ftp -s:%FTPCmdFileName% -i %FTPIPAddress%
rem 
rem ======================== Обработка загруженных файлов в 1c ===============
rem ==========================================================================
rem ======================== Выкладываем файлы на FTP-сервер =================
rem 
rem ======================== подготовка файла с набором команд для FTP
rem 
	echo %FTPUserName%>%FTPCmdFileName%
	echo %FTPUserPassword%>>%FTPCmdFileName%
	echo lcd %LocalSourcePath%>>%FTPCmdFileName%
	echo cd %FTPDestinationPath%>>%FTPCmdFileName%
	echo type binary>>%FTPCmdFileName%
	echo mput *ou.zip>>%FTPCmdFileName%
	echo quit >>%FTPCmdFileName%
rem ======================== Выполняем подготовленный набор команд
	ftp -s:%FTPCmdFileName% -i %FTPIPAddress%
:END

Пояснения к тексту скрипта см. здесь: http://shss.wordpres...t-ftp-exchange/

#17 Пользователь не на сайте   shs 

  • Многописатель
  • PipPipPipPipPipPip

Отправлено 02 January 2008 - 23:22

Опрос заданного п.я. по протоколу POP3 и отправка предупреждающего сообщения по e-mail, в cлучае превышения заданного порога. (JScript) © ShS

//////////////////////////////////////////////////////////////////// 
// JScript POP3checker.js shs 20071113 
// Опрос заданного п.я. по протоколу POP3 и отправка предупреждающего сообщения по e-mail, в cлучае превышения заданного порога 
// Для опроса POP3 п.я. скрипт использует COM-объекты из библиотеки OSPOP3.dll (http://www.ostrosoft.com) 
// OstroSoft POP3 Component доступен для скачивания по следующему адресу: 
// http://www.ostrosoft.com/download/pop3_component.zip 
// 
//Пример запуска: cscript POP3checker.js <pop3_login> <pop3_пароль> <pop3_сервер> <тип_критерия::={0|1}> {<количество писем>|<сумарный объем писем>} 
////////////////////////////////////////////////////////////////////////////////////////////////////////// 

var sPOPServer; //FQDN-имя или IP-адрес POP3-сервера 
var iPOPPort;   //№ порта для обращения к POP3 серверу по POP3 протоколу 
var sLogin;	  //логин пользователя на POP3-сервере 
var sPass;	  //пароль рользователя на POP3-сервере 
var iType;	   //0 - оцениваем количество сообщений; 1 - оцениваем сумарный объем сообщений 
var iThreshold; //Порог, привышение которого вызывает рассылку предупреждения 
var iAlert;	  //Флаг. 0 -не рассылать предупреждение; 1 - рассылать предупреждение 
var objError;   //Error object, необходимый для обработки ошибок 
var oPOP3;	  //объект POP3 (COM-object библиотеки OSPOP3.dll), необходимый для обращения к POP3-серверу 

//WScript.Echo(WScript.Arguments.Count()); 
if (WScript.Arguments.Count()<5) 
{ 
   WScript.Echo("Ошибка! Недостаточное количество аргументов. \n"+ 
   "cscript "+WScript.ScriptName + 
   " <pop3_login> <pop3_пароль> <pop3_сервер> <тип_критерия::={0|1}> {<количество писем>|<сумарный объем писем>}") 
} 
else 
{ 
   // 
   sLogin	  = WScript.Arguments.Item(0); 
   sPass	  = WScript.Arguments.Item(1); 
   sPOPServer   = WScript.Arguments.Item(2); 
   iType	  = WScript.Arguments.Item(3); 
   iThreshold   = WScript.Arguments.Item(4) 
   iPOPPort   = 110; 
   // 
   objError="" 

   try 
   { 
	  oPOP3 = WScript.CreateObject("OSPOP3.Session"); 
   } 
   catch (objError) 
   { 
	  WScript.Echo("Произошла ошибка #" + objError.number + "\n Описание ошибки :"+objError.description+ 
	  "\n Скорее всего в вашей ОС не зарегистрированна OSPOP3.dll \n (загрузить эту библиотеку можно здесь: http://www.ostrosoft.com/pop3_component.asp)"); 
   } 
   if (objError=="") 
   { 
	  bSuccessfullPolling = false; 
	  bSuccessfullPolling = oPOP3.OpenPOP3(sPOPServer, iPOPPort, sLogin, sPass); 
	  WScript.Echo ("bSuccessfullPolling   = " +bSuccessfullPolling); 

	  if (bSuccessfullPolling) 
	  { 
		   oPOP3.GetMailboxSize(); 
		   oPOP3.ClosePOP3(); 
		   WScript.Echo ("iType		 = "+iType+ 
					"\niThreshold	  = "+iThreshold+ 
					"\nMailboxSize	  = " + oPOP3.MailboxSize+ 
					"\nMessageCount	  = " + oPOP3.MessageCount); 
		   iAlert = 0; 
		   if (iType==0) 
		   {//оцениваем количество сообщений 
			  if (iThreshold<oPOP3.MessageCount) iAlert=1; 
		   } 
		   else 
		   {//оцениваем сумарный объем сообщений 
			  if (iThreshold<oPOP3.MailboxSize) iAlert=1; 
		   } 
		   if (iAlert==1) 
		   { 
			  try 
			  { 
				 SendAlert() 
			  } 
			  catch (objError) 
			  { 
				 WScript.Echo("Ошибка при отправке административного предупреждения #:"+ 
				 objError.number+" "+objError.description); 
			  } 
		   } 
		   //oPOP3.ClosePOP3(); 
	  } 
	  else 
	  { 
		 WScript.Echo("Ошибка соединения с сервером "+sPOPServer + 
		 "\n Возможно имя пользователя и пароль заданы неправильно"); 
	  } 
	  oPOP3 = null; 
   } 
}//else 
// 
//Рассылка предупреждения админам 
function SendAlert () 
{ 
   objEmail = WScript.CreateObject("CDO.Message"); 
   objEmail.From = "alerts@FQDN"; 
   objEmail.To = "alerts@FQDN";  
   objEmail.Subject = "!!! "+sLogin+" mailbox > "+ iThreshold+" !!!"; 
   objEmail.Textbody = "The threshold of "+ ((iType==0)?"message count":"mailbox size")+ 
   " for mailbox with LogonName = "+sLogin+" on the POP3-server = "+ sPOPServer +" has been exceeded\nThe threshold = "+ iThreshold+ 
   "\nThe current value = "+((iType==0)?oPOP3.MessageCount:oPOP3.MailboxSize); 

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

   objEmail.Send(); 
}


Пояснения к тексту скрипта см. здесь: http://shss.wordpress.com/2009/12/03/scrip...ailbox-checker/

#18 Пользователь не на сайте   shs 

  • Многописатель
  • PipPipPipPipPipPip

Отправлено 02 January 2008 - 23:36

Получения информации о пользователях домена. (JScript) by ShS

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

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

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


#19 Пользователь не на сайте   shs 

  • Многописатель
  • PipPipPipPipPipPip

Отправлено 03 January 2008 - 13:31

Подключение сетевого принтера и установка его принтером по умолчанию. (JScript) by 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://shss.wordpress.com/2009/12/01/scrip...efault-printer/

#20 Пользователь не на сайте   shs 

  • Многописатель
  • PipPipPipPipPipPip

Отправлено 03 January 2008 - 13:46

Записываем в атрибут Description (объекта-компа в AD) имя текущего залогоненого пользователя. (VBScript) © ShS

Скрипт перебирает компы в AD, начиная с заданного контейнера (strSubContainer), и записывает в атрибут Description объекта компьютер в AD имя залогоненного (в данный момент) на этом компьюторе пользователя
Глубина перебора регулируется параметром Searchscope.
ЗЫ Для записи значения в атрибут Description, необходимо обладать достаточными правами, для выполнения этой операции. Для того, чтобы функция fnGetUserName возвращала непустые значения, при наличии залогоненного пользователя, необходимо обладать правами администратора на заданном компьюторе. Иными словами, во избежание недоразумений, запускайте этот скрипт с правами Доменного администратора.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
''VBScript ShS 2006 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Option Explicit 
Dim rootDSE,strDomainDN,objConnection 
Dim strSubContainer,objCommand,objRecordSet 
Dim strMsg, arrDescription, strAccountProp, objComputer, strLoggedOnUser 
Const SPLITER = "," 
Const ADS_SCOPE_SUBTREE = 2 
Const ADS_SCOPE_ONELEVEL = 1 
' 
Const ADS_UF_ACCOUNTDISABLE = 2 
' 
strSubContainer="OU=D,OU=mg," 
Set rootDSE = GetObject("LDAP://rootDSE") 
strDomainDN = rootDSE.Get("defaultNamingContext") 
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, " &_ 
		"operatingSystem, operatingSystemServicePack, Description, userAccountControl, distinguishedName " &_ 
		"from 'LDAP://"&strSubContainer&strDomainDN&"' " &_ 
		"Where objectClass='computer'" 
objCommand.Properties("Page Size") = 1000 
objCommand.Properties("Searchscope") = ADS_SCOPE_ONELEVEL 'ADS_SCOPE_SUBTREE 
Set objRecordSet = objCommand.Execute 
If objRecordSet.RecordCount<1 Then 
	WScript.Echo "No computer accounts found in "&strContainer&strDomainDN 
	WScript.Quit 
End If 
objRecordSet.MoveFirst 
Do Until objRecordSet.EOF 
   ''Перебираем только те компы, у котрых Account установлен в Enabled 
   If (objRecordSet.Fields("userAccountControl").Value And ADS_UF_ACCOUNTDISABLE)=0 Then 
	   strMsg = objRecordSet.Fields("Name").Value & _ 
	   SPLITER & objRecordSet.Fields("operatingSystem").Value & _ 
	   SPLITER & strAccountProp 
	   arrDescription = objRecordSet.Fields("Description").Value 
	   If Not IsNull (arrDescription) Then 
		  strMsg = strMsg & SPLITER & arrDescription(0) 
	   End If 
	   WScript.Echo strMsg 
	   strLoggedOnUser = fnGetUserName (objRecordSet.Fields("Name").Value) 
	   WScript.Echo "LoggedonUser :" & strLoggedOnUser 
	   If (Not IsEmpty(strLoggedOnUser)) And (Not IsNull (strLoggedOnUser)) Then 
		 Set objComputer = GetObject("LDAP://"&objRecordSet.Fields("distinguishedName").Value) 
		  objComputer.Put "Description" , strLoggedOnUser 
		 objComputer.SetInfo 
	   End If 
	End If 
	objRecordSet.MoveNext 
Loop 
' 
'Функция, возвращающая имя текущего залогоненого пользователя на заданном компьютере 
Function fnGetUserName (strComputer) 
On Error Resume Next 
Dim objWMIService, colItems, objItem 
Const wbemFlagReturnImmediately = &h10 
Const wbemFlagForwardOnly = &h20 

   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", _ 
										  wbemFlagReturnImmediately + wbemFlagForwardOnly) 

   For Each objItem In colItems 
	  fnGetUserName = objItem.UserName 
   Next 
On Error GoTo 0 
End Function


То же самое, но на PoSh:
####################################################
#PowerShell 
#SetSompDesc.ps1 20090112 ShS
#
#Записываем в атрибут Description каждого объекта Computer, имя, залогоненого на нем пользователя
####################################################
cls
#Функция возращает true, если заданный хост пингуется и false  - в противном случае (спасибо Xaerg'у)
function Test-Host ($Name)
{
	$ping = new-object System.Net.NetworkInformation.Ping
	trap {Write-Verbose "Ошибка пинга"; $False; continue}
	if ($ping.send($Name).Status -eq "Success" ) { $True }
	else { $False }
}
#
#Зададим корневое OU, с которого будет начат поиск компьютеров
$SearchRoot="domain.local/Workstations"
#
#Получим коллекцию компьютеров
 $Comps = Get-QADComputer -ErrorAction SilentlyContinue -SearchRoot $SearchRoot -SizeLimit 0 #|Select-Object -property "Name","Description"
 #Для каждого компьютера в коллекции..
 foreach ($Comp in $Comps) 
 {
  #...проверяем его доступность
  if (Test-Host $Comp.Name) 
 	{
	#Определяем залогоненного пользователя
	$LoggedonUserName = (gwmi Win32_ComputerSystem -ErrorAction SilentlyContinue -ComputerName $Comp.Name).UserName
	Write-Host "CompName=",$Comp.Name, "  CompDescription=", $Comp.Description, "  LoggedonUser=", $LoggedonUserName
	#Если текущее описание не совпадает с именем залогоненного пользователя
	if (($Comp.Description -ne $LoggedonUserName) -and ($LoggedonUserName -ne $null))
		{
		Write-Host "`nОписание компьютера отсутствует или устарело!`nМеняем на новое...`n`n"
		Set-QADObject $Comp.DN -Description $LoggedonUserName | Out-Null
		}
 	}
 }


  • (4 Страниц)
  • +
  • 1
  • 2
  • 3
  • Последняя »
  • Вы не можете начинать новые темы
  • Вы не можете отвечать в этой теме

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых