1 (изменено: Vasek, 2012-03-29 17:15:46)

Тема: Vbs: AD определение пола пользователя для создание списка рассылки

Бывает нужно обычно на праздники создать список рассылки, да еще чтобы отдельно для мужчин или для женщин. Предлогаю сценарий для тестирования.



Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set OpenFile = Fso.OpenTextFile("Список рассылки.txt",8,True,-1)
Set OpenFile1 = Fso.OpenTextFile("Те кто не попал в список.txt",8,True,-1)
' Запрос для тех кто не нужен (системные, ошибочно названные, бесполое отчество), обратный запросу для тех кто нужен
Set cServAll2 = GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\directory\ldap"). _
	ExecQuery("SELECT ds_name FROM DS_user Where DS_msExchHomeServerName IS NOT NULL AND NOT (ds_name like '%чна[ ]%' OR ds_name like '%вна[ ]%' OR ds_name like '%шна[ ]%' OR ds_name like '%вич[ ]%' OR ds_name like '%мич[ ]%' OR ds_name like '%ьич[ ]%')")
' Запрос для тех кто отключен
Set cServAll = GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2"). _
	ExecQuery("SELECT FullName FROM Win32_UserAccount Where Disabled = True")
' Запрос для тех кто нужен в данном примере женщины
Set cServAll1 = GetObject("winmgmts:{impersonationLevel=impersonate}\\.\root\directory\ldap"). _
	ExecQuery("SELECT ds_name FROM DS_user Where DS_msExchHomeServerName IS NOT NULL AND ds_name like '%чна[ ]%' OR ds_name like '%вна[ ]%' OR ds_name like '%шна[ ]%' OR ds_name like '%ова'")

z = 0
' Цыкл для тех кто нужен
For Each Result1 In cServAll1
	
	' Цыкл для тех кто отключен
	For Each Result2 IN cServAll
		' Сровниваем и находим кто не отключен
		If Result1.ds_name <> Result2.FullName Then
			z = 0
		Else
			' При совпадении выходим из первого цыкла чтобы побыстрее было
			z = 1
			Exit For
		End If
	Next

	If z = 0 Then
		' пишем в список ds_name включенного пользователя
		OpenFile.WriteLine Result1.ds_name
	End If

Next

' Цыкл для тех кто не нужен
For Each Result11 In cServAll2
	' Пишем тех кто не нужен
	OpenFile1.WriteLine Result11.ds_name

Next

OpenFile1.Close
OpenFile.Close

Wscript.Echo "Готово"

' Запросы
'SELECT * FROM DS_user Where DS_msExchHomeServerName IS NOT NULL AND ds_name Like '%вич[ ]%' OR ds_name like '%мич[ ]%' OR ds_name like '%ьич[ ]%'
'SELECT * FROM DS_user Where DS_msExchHomeServerName IS NOT NULL AND ds_name like '%чна[ ]%' OR ds_name like '%вна[ ]%' OR ds_name like '%шна[ ]%' OR ds_name like '%ова'

По выполнению сценария нужно будет проверить файл "Те кто не попал в список.txt" для выявления тех кто по разным причинам не отфильтровался.
Сценарий гарантируте точность если пользователи в AD заводятся с отчеством и без ошибок, ну и конечно если у вас не работают одни иностранцы .