Войти

Показать полную графическую версию : [решено] Сбор информации о учетных записях компьютера


Delirium
28-09-2011, 04:31
Имеется скрипт WMI(сгенерирован автоматом с программы Scriptomatic (http://blogs.technet.com/b/grouppolicy/archive/2009/08/24/wmi-queries-the-easy-way-item-level-targeting-the-much-faster-and-easier-way.aspx) от MS):

var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;

var arrComputers = new Array("Firsov");
for (i = 0; i < arrComputers.length; i++) {
WScript.Echo();
WScript.Echo("==========================================");
WScript.Echo("Computer: " + arrComputers[i]);
WScript.Echo("==========================================");

var objWMIService = GetObject("winmgmts:\\\\" + arrComputers[i] + "\\root\\CIMV2");
var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL",
wbemFlagReturnImmediately | wbemFlagForwardOnly);

var enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var objItem = enumItems.item();
WScript.Echo("Domain: " + objItem.Domain);
WScript.Echo("Name: " + objItem.Name);
WScript.Echo("Status: " + objItem.Status);
}
}

function WMIDateStringToDate(dtmDate)
{
if (dtmDate == null)
{
return "null date";
}
var strDateTime;
if (dtmDate.substr(4, 1) == 0)
{
strDateTime = dtmDate.substr(5, 1) + "/";
}
else
{
strDateTime = dtmDate.substr(4, 2) + "/";
}
if (dtmDate.substr(6, 1) == 0)
{
strDateTime = strDateTime + dtmDate.substr(7, 1) + "/";
}
else
{
strDateTime = strDateTime + dtmDate.substr(6, 2) + "/";
}
strDateTime = strDateTime + dtmDate.substr(0, 4) + " " +
dtmDate.substr(8, 2) + ":" +
dtmDate.substr(10, 2) + ":" +
dtmDate.substr(12, 2);
return(strDateTime);
}


Т.е. цепляемся к любой машине(в примере к Firsov), и просим вывести список всех локальных пользователей.
Собственно, интересуют только записи в коде:
WScript.Echo("Domain: " + objItem.Domain);
WScript.Echo("Name: " + objItem.Name);

На WinXP отрабатывает как надо. На Win 7 же выдает список ВСЕХ доменных пользователей. А т.к. у меня еще есть доверительные отношения с другим доменом(точнее с двумя), то ИНОГДА еще и выдает список пользователей доверенного домена. Почему так? И как получить через WMI список только локальных пользователей машины?

Delirium
28-09-2011, 04:37
Мда, читать надо учиться. Достаточно было добавить в запрос условие
Where LocalAccount = true

Iska
28-09-2011, 06:51
Delirium, у меня и под XP без этого условия выдавала и доменных пользователей. А под Windows 2000, помнится, в схеме свойства LocalAccount нет, но там выдавались только локальные пользователи, без доменных (опять же — у меня).

Можно ещё через ADSI ……попробовать (для провайдера «WinNT:» наличие домена вроде как не обязательно):
Option Explicit

Dim strComputer

Dim objIADsContainer
Dim objIADsUser


strComputer = "bla-bla-bla" 'WScript.CreateObject("WScript.Network").ComputerName

Set objIADsContainer = GetObject("WinNT://" & strComputer & ",computer")
objIADsContainer.Filter = Array("user")

For Each objIADsUser In objIADsContainer
WScript.Echo "[" & objIADsUser.Name & "] on [" & objIADsContainer.Name & "]"
Next

Set objIADsUser = Nothing
Set objIADsContainer = Nothing

WScript.Quit 0




© OSzone.net 2001-2012