Здравствуйте, masta-smooky, Вы писали:
MS>У меня такой вопрос, не подскажет ли кто как можно посмотреть кто на удаленном компютере находиться в групе локальных администраторов ?
Вот это должно натолкнуть тебя на мысл, в каком направлении действовать. Т.е. есть объектная модель (надстройка) над этим MMC (и соответственно ты можешь подключить этот COM-объект в C#), с помощью этой модели вызывай разные остнастки (snap-in), которые, среди прочего, позволяют посмотреть список пользователей и подключится к другому компьютеру и посмотреть это там (поробуй сделать это вручную для начала).
Здравствуйте, tyger, Вы писали:
T>Здравствуйте, masta-smooky, Вы писали:
MS>>У меня такой вопрос, не подскажет ли кто как можно посмотреть кто на удаленном компютере находиться в групе локальных администраторов ? T>Вот это должно натолкнуть тебя на мысл, в каком направлении действовать. Т.е. есть объектная модель (надстройка) над этим MMC (и соответственно ты можешь подключить этот COM-объект в C#), с помощью этой модели вызывай разные остнастки (snap-in), которые, среди прочего, позволяют посмотреть список пользователей и подключится к другому компьютеру и посмотреть это там (поробуй сделать это вручную для начала).
T>http://www.script-coding.info/MMC.html
T>P.S. Отпишись потом, если что получится
Спасибо вам большое tyger, я розобрался в mmc написал программу которая может смотреть какие есть группы на компютере но вот никак немогу посмотреть кто в етих группах состоит. Ведь группа ето уже не node. Как я уже не пробовал их вытянуть, ну никак не получаеться там у node есть проперти Property я думаю что список пользователей через него можно достать но я никак немогу. Так что мож кто знает подскажите пожалуйста. Вот код правда он на VB просто времени небыло на с# переписать я думаю и так понятно:
Sub Main()
Dim objMMC As MMC20.Application
Dim objDoc As MMC20.Document
Dim objSN As MMC20.ScopeNamespace
Dim objRoot As MMC20.Node
Dim objNode As MMC20.Node
Dim objView As MMC20.View
Dim objList As MMC20.Nodes
Dim objItem As MMC20.Node
Dim i As Integer
Dim sName, sFullName, sDescr As String
objMMC = CreateObject("MMC20.Application")
objMMC.Load("C:\Console1.msc") 'Локальные пользователи и группы
objDoc = objMMC.Document 'Документ
objSN = objDoc.ScopeNamespace 'Пространство имён
objRoot = objDoc.RootNode 'Корневой узел
objNode = objSN.GetChild(objRoot) 'Узел "Локальные пользователи и группы (локально)"
objNode = objSN.GetChild(objNode) 'Узел "Пользователи"
objNode = objSN.GetNext(objNode) 'Узел "Группы"
objView = objDoc.ActiveView 'Отображение
objView.ActiveScopeNode = objNode 'Установка активного узла для отображения
objList = objView.ListItems 'Получение списка в отображении
For Each objItem In objList 'Обход списка
sName = objView.CellContents(objItem, 1) 'Имя группы
sFullName = objView.CellContents(objItem, 2) 'Описание группы
Next
End Sub
Re[3]: Программно определить администратора компютера
MS>Спасибо вам большое tyger,
Вот который раз уже... спасибо, а оценку никто не поставит...
MS>я розобрался в mmc написал программу которая может смотреть какие есть группы на компютере но вот никак немогу посмотреть кто в етих группах состоит. Ведь группа ето уже не node. Как я уже не пробовал их вытянуть, ну никак не получаеться там у node есть проперти Property я думаю что список пользователей через него можно достать но я никак немогу. Так что мож кто знает подскажите пожалуйста. Вот код правда он на VB просто времени небыло на с# переписать я думаю и так понятно:
MS>Sub Main()
<skipped>
MS> objMMC = CreateObject("MMC20.Application")
MS> objMMC.Load("C:\Console1.msc") 'Локальные пользователи и группы
MS> objDoc = objMMC.Document 'Документ
MS> objSN = objDoc.ScopeNamespace 'Пространство имён
MS> objRoot = objDoc.RootNode 'Корневой узел
MS> objNode = objSN.GetChild(objRoot) 'Узел "Локальные пользователи и группы (локально)"
MS> objNode = objSN.GetChild(objNode) 'Узел "Пользователи"'или здесь. Непоянтно почему не стал перебирать пользователей, у них должен быть атрибут,
'который говорит о том, членом какой группы он является (по аналогии с ActiveDirectory это memberOf)
MS> objNode = objSN.GetNext(objNode) 'Узел "Группы"
MS> objView = objDoc.ActiveView 'Отображение
MS> objView.ActiveScopeNode = objNode 'Установка активного узла для отображения
MS> objList = objView.ListItems 'Получение списка в отображении
MS> For Each objItem In objList 'Обход списка
MS> sName = objView.CellContents(objItem, 1) 'Имя группы
MS> sFullName = objView.CellContents(objItem, 2) 'Описание группы'А чего ты здесь остановился? Какие там дальше параметры есть?
'Если судить по тому как это организованно в ActiveDirectory,
'то там должно быть что-то типа атрибута member, в котором указаны все члены...
MS> Next
MS> End Sub
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Программно определить администратора компютера
Здравствуйте, masta-smooky, Вы писали:
MS>Я думаю тоже самое и пробовал как только можно ето зделать, вот обратно весь инет перерыл а выход найти не могу
Давай мне код (или если того что ты привел — достаточно) я попробую посмотреть — самому интересно. Был подобный вопрос на работе, но он так остался в планах?
Re[3]: Программно определить администратора компютера
Здравствуйте, masta-smooky, Вы писали:
MS>Здравствуйте, tyger, Вы писали:
T>>Здравствуйте, masta-smooky, Вы писали:
MS>>>У меня такой вопрос, не подскажет ли кто как можно посмотреть кто на удаленном компютере находиться в групе локальных администраторов ? T>>Вот это должно натолкнуть тебя на мысл, в каком направлении действовать. Т.е. есть объектная модель (надстройка) над этим MMC (и соответственно ты можешь подключить этот COM-объект в C#), с помощью этой модели вызывай разные остнастки (snap-in), которые, среди прочего, позволяют посмотреть список пользователей и подключится к другому компьютеру и посмотреть это там (поробуй сделать это вручную для начала).
думаю что список пользователей через него можно достать но я никак немогу. Так что мож кто знает подскажите пожалуйста. Вот код правда он на VB просто времени небыло на с# переписать я думаю и так понятно:
Извини, ввел в заблуждение...
Не по тому следу направил — правильно надо так (у себя попробовал, работает).
static void Main()
{
System.DirectoryServices.DirectoryEntry ad = new System.DirectoryServices.DirectoryEntry("WinNT://reezon/Administrators");
object members = ad.Invoke("Members", null);
foreach (object member in (System.Collections.IEnumerable)members)
{
DirectoryEntry user_groups = new DirectoryEntry(member);
Console.WriteLine("{0,-14}-{1} = {2,-38}, {3}",
user_groups.Name,
user_groups.SchemaClassName,
user_groups.Path,
(user_groups.Path.Contains("reezon"))?"Local account":"Domains account");
// do some work.
}
Console.ReadKey();
}
В общем, если ты хочешь подключаться к другому компу — то вместо "reezon" (в моем случае) тебе нужно подставить имя твоего компа.
Плюс посмотри — у DirectoryEntry есть параметры: логин и пароль, вроде для подключения...
Смотри, разбирайся (надеюсь помог)
P.S. Если что, спрашивай.
Re[5]: Программно определить администратора компютера
Здравствуйте, masta-smooky, Вы писали:
MS>Я думаю тоже самое и пробовал как только можно ето зделать, вот обратно весь инет перерыл а выход найти не могу
На WMI (System.Management) смотреть не пробовали?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Программно определить администратора компютера
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, masta-smooky, Вы писали:
MS>>Я думаю тоже самое и пробовал как только можно ето зделать, вот обратно весь инет перерыл а выход найти не могу
TK>На WMI (System.Management) смотреть не пробовали?
Спасибо за совет, я про такую штуку как WMI вовсе и не знал а тут посмотрел пару примеров и понял что класная штука, только вот праблема одна получилась. Если ты когда нибудь работал с WMI то подскажы пожалуйста как с помощю WMI посмотреть информацию на удаленном компютере. Вот код который я использую:
ConnectionOptions oConn = new ConnectionOptions();
System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\\\ComputerName", oConn);
//get Fixed disk stats
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs,oQuery);
ManagementObjectCollection oReturnCollection = oSearcher.Get();
//variables for numerical conversionsdouble fs = 0;
double us = 0;
double tot = 0;
double up = 0;
double fp = 0;
//for string formating argsobject[] oArgs = new object[2];
Console.WriteLine("*******************************************");
Console.WriteLine("Hard Disks");
Console.WriteLine("*******************************************");
//loop through found drives and write out infoforeach( ManagementObject oReturn in oReturnCollection )
{
// Disk name
Console.WriteLine("Name : " + oReturn["Name"].ToString());
//Free space in MB
fs = Convert.ToInt64(oReturn["FreeSpace"])/mb;
//Used space in MB
us = (Convert.ToInt64(oReturn["Size"]) - Convert.ToInt64(oReturn["FreeSpace"]))/mb;
//Total space in MB
tot = Convert.ToInt64(oReturn["Size"])/mb;
}
Я так понял что имя удаленного компютера должно задаваться при обявлении ManagementScope, но чтобы я туда не писал оно конектиться только к локальному компютеру.
Re[7]: Программно определить администратора компютера
Здравствуйте, masta-smooky, Вы писали:
MS>Я так понял что имя удаленного компютера должно задаваться при обявлении ManagementScope, но чтобы я туда не писал оно конектиться только к локальному компютеру.
Работать с WMI проще всего начинать в VS2005. Надо через ServerExplorer\Servers\..\Management Classes\..\ подключиться к нужному объекту а потом, перетащить его на форму — студия сама сгенерирует код для работы с ним.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[8]: Программно определить администратора компютера
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, masta-smooky, Вы писали:
MS>>Я так понял что имя удаленного компютера должно задаваться при обявлении ManagementScope, но чтобы я туда не писал оно конектиться только к локальному компютеру.
TK>Работать с WMI проще всего начинать в VS2005. Надо через ServerExplorer\Servers\..\Management Classes\..\ подключиться к нужному объекту а потом, перетащить его на форму — студия сама сгенерирует код для работы с ним.