Время на прочтение
5 мин
Количество просмотров 33K
Привет всем!
Работаю в компании. 1500+ активных пользователей.
Организован ХелпДеск, сотрудники регистрируют тикеты в системе, но, как-то так получается, что часть из юзеров забывают указывать имя пк, за которым они находятся.
Для выяснения этой информации (по телефону/email/экстрасенсорные способности) девочки из поддержки тратят драгоценное время, которое они могли бы уделить свежей чашке кофе или разговорам о новом платье (шутка). Наши сотрудники постоянно заняты своей непосредственной работой.
Идея (не инновация конечно) — писать данные о логонах пользователя в единую базу, а потом через веб оперативно искать нужную информацию.
Что у нас есть?
Windows среда (ХР/7/2003/2008), учетные записи хранятся в AD, все устройства работаю в локальной сети в качестве СУБД используем MSSQL 2005/2008R2.
Что мы хотим?
Поиск информации через веб интерфейс:
- Где логинился сотрудник с фамилией, например, “Иванов“;
- Кто логинился на устройстве, например, “PC34“;
- Где были совершены логоны под учетной записью, например, “hr.ivanov“.
Должна отображаться информация:
- имя пк;
- login;
- фио;
- ip адрес;
- дата логона.
Название?
Так как «решением» будут пользоваться несколько человек (от 5 до 35 человек), надо как-то его обозвать для удобства. Нарекли мы его «SuperVisor».
Приступим к реализации
Как будем писать в БД?
Первое, что пришло в голову — это создать bat файл с sqlcmd, но для каждой версии Windows нужна своя версия утилиты sqlcmd. Неудобно, и мы не стали копать глубже.
Вторым решением было создать небольшой exe клиент, который при запуске будет собирать данные об имени доменной учетной записи, имени пк, ip адресе пк и после получения этой информации будет выполняться вставка данных в БД. Программу размещаем, например, в папке NETLOGON на контроллере домена и групповыми политиками распространяем на ПК/Сервера в локальной сети компании.
Программа на Delphi
unit Unit1;
interface
uses
Windows,SysUtils, Variants, Classes, Forms,WinSock,
Dialogs, DB, ADODB,StdCtrls,Messages, ExtCtrls;
type
TForm1 = class(TForm)
boston: TADOConnection;
qryinsert: TADOQuery;
timer: TTimer;
procedure FormCreate(Sender: TObject);
procedure timerTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// версия 0.0.4
// дата 27-02-2014
function GetCurrentUserName: string;
const
cnMaxUserNameLen = 254;
var
sUserName: string;
dwUserNameLen: DWORD;
begin
dwUserNameLen := cnMaxUserNameLen - 1;
SetLength(sUserName, cnMaxUserNameLen);
GetUserName(PChar(sUserName), dwUserNameLen);
SetLength(sUserName, dwUserNameLen);
Result := string(sUserName);
end;
function GetCurrentComputerName: string;
const
cnMaxComputerNameLen = 254;
var
sComputerName: string;
dwComputerNameLen: DWORD;
begin
dwComputerNameLen := cnMaxComputerNameLen - 1;
SetLength(sComputerName, cnMaxComputerNameLen);
GetComputerName(PChar(sComputerName), dwComputerNameLen);
SetLength(sComputerName, dwComputerNameLen);
Result := string(sComputerName);
end;
function GetLocalIP: String;
const WSVer = $101;
var
wsaData: TWSAData;
P: PHostEnt;
Buf: array [0..127] of Char;
begin
Result := '';
if WSAStartup(WSVer, wsaData) = 0 then begin
if GetHostName(@Buf, 128) = 0 then begin
P := GetHostByName(@Buf);
if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
end;
WSACleanup;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
try
qryinsert.SQL.Text := 'begin TRANSACTION insertdata' +#13#10 +
'insert into [supervisor].[user].[info_host](host,login,last_ip) values (:host,:login,:ip)'+#13#10 +
'COMMIT TRANSACTION insertdata';
qryinsert.Parameters.ParamByname('login').Value:= GetCurrentUserName ;
qryinsert.Parameters.ParamByname('host').Value:= GetCurrentComputerName ;
qryinsert.Parameters.ParamByname('ip').Value:= GetLocalIP ;
qryinsert.ExecSQL;
timer.Enabled:=True;
form1.timer.Interval:=1500;
except
Application.Terminate;
end
end;
procedure TForm1.timerTimer(Sender: TObject);
begin
ExitProcess(0);
end;
end.
Дальше алгоритм такой:
- Пользователь логинится за пк;
- Скрытно запускается SuperVisor.exe;
- Делается попытка INSERT в указанную бд, если успешно, то программа завершает свою работу;
- Если выполнить INSERT не получается (ноутбук не в локальной сети, сервер бд недоступен и т.д), таймаут 15 секунд и процесс «убивается», не пугая пользователя страшными сообщениями и окнами.
Отлично, теперь создадим таблицы, в которых будут храниться данные
/*
Главная таблица, в которую пишутся логоны
-----------------------------------------------------------
host - имя пк
login - имя доменной учетной записи
last_ip - ip адрес пк
createdate - дата создания записи
createdate_unix - unix время, дата создания записи
------------------------------------------------------------
*/
CREATE TABLE [user].[info_host](
[id] [int] IDENTITY(1,1) NOT NULL,
[host] [nvarchar](128) NULL,
[login] [nvarchar](128) NULL,
[createdate] [datetime] NOT NULL,
[createdate_unix] [int] NOT NULL,
[last_ip] [nvarchar](20) NULL
) ON [supervisor]
GO
ALTER TABLE [user].[info_host] ADD DEFAULT (getdate()) FOR [createdate]
GO
ALTER TABLE [user].[info_host] ADD DEFAULT (datediff(second,'1970-01-01 00:00:00',getutcdate())) FOR [createdate_unix]
/*
Таблица справочник с ФИО учетных записей, наполняется из АД. Синхронизация происходит один раз в сутки
------------------------------------------------------------
login - имя доменной учетной записи
displayName - поле displayname из АД для учетной записи
createdate - дата создания записи
createdate_unix - unix время, дата создания записи
------------------------------------------------------------
*/
CREATE TABLE [user].[info_login_card](
[id] [int] IDENTITY(1,1) NOT NULL,
[login] [nvarchar](128) NULL,
[createdate] [datetime] NOT NULL,
[createdate_unix] [int] NOT NULL,
[displayName] [nvarchar](256) NULL
) ON [supervisor]
GO
ALTER TABLE [user].[info_login_card] ADD DEFAULT (getdate()) FOR [createdate]
GO
ALTER TABLE [user].[info_login_card] ADD DEFAULT (datediff(second,'1970-01-01 00:00:00',getutcdate())) FOR [createdate_unix]
GO
Таблицы созданы и наполняются данными. Забыл написать, что сервер БД у нас виртуальный и работает под Windows Server 2003R2, СУБД MSSQL 2008R2. Сервер приложения виртуальный, Windows 2003R2, Apache 2.2 + PHP 5.2
Следующий шаг — создание веб интерфейса для того, чтобы системные администраторы и сотрудники хелпдеска могли комфортно работать с сервисом. Во внутренних разработках, для экономии времени, я использую фреймфорк Bootstrap. Главная страница, до того как начинают вводить данные в поисковую строку, выглядит так:
В строку поиска можно ввести фамилию сотрудника/учетную запись(логин) или имя компьютера:
Причем, не обязательно вводить полностью фамилию и имя сотрудника/логин/имя пк, поиск совпадений в БД осуществляется с помощью оператора LIKE ( пример …LIKE ‘ива%’), запросы выполняются асинхронно, результат поиска обновляется перед глазами сотрудника без перезагрузки страницы после ввода нового символа в строку поиска.
запрос к бд для поиска по ФИО
set rowcount $limit
SELECT
a.[id]
,a.[host]
,a.[login]
,a.[createdate]
,a.[createdate_unix]
,a.[last_ip]
,b.[displayName]
FROM [user].[info_host] a
left join [user].[info_login_card] b on a.login = b.login
where b.displayName like ('$ihostlogin')
order by a.[createdate_unix] desc
set rowcount 0
запрос к бд для поиска по имени пк
set rowcount $limit
SELECT
a.[id]
,a.[host]
,a.[login]
,a.[createdate]
,a.[createdate_unix]
,a.[last_ip]
,b.[displayName]
FROM [user].[info_host] a
left join [user].[info_login_card] b on a.login = b.login
where a.host like ('$hostlogin')
order by a.[createdate_unix] desc
set rowcount 0
поиск по логину
set rowcount $limit
SELECT
a.[id]
,a.[host]
,a.[login]
,a.[createdate]
,a.[createdate_unix]
,a.[last_ip]
,b.[displayName]
FROM [user].[info_host] a
left join [user].[info_login_card] b on a.login = b.login
where a.login like ('$hostlogin')
order by a.[createdate_unix] desc
set rowcount 0
«Супервизор» работает у нас в компании около года, со своей главной задачей справляется отлично. Тикеты теперь берутся в работу оперативнее, сотрудникам не нужно тратить время на уточнение дополнительной информации для того, чтобы преступить к решению заявки.
Данное решение по определению имени компьютера получилось современным и удобным, на мой взгляд.
Успехов в работе!
Полезные ссылки
Установка Apache2.2 и PHP-5;
Подключение MS SQL к PHP 5.3 и выше.
Namee 0 / 0 / 0 Регистрация: 24.01.2023 Сообщений: 4 |
||||
1 |
||||
24.01.2023, 21:55. Показов 2856. Ответов 6 Метки нет (Все метки)
Добрый вечер! Сделал скрипт (переделал, то что нашел) и он работает – ищет по ФИО логин в Active Directory. ФИО мы берем из файла и результат записываем в новый файл. Но есть одна проблема – по ФИО бывает несколько логинов (например уже отключенные) и их тоже надо включать. Но, к сожалению, не могу понять как это реализовать. Находит только первый логин по фамилии, а идеально было бы добавлять еще одну строчку с ФИО с логином. Помогите, кто чем может, не понимаю в какую сторону двигаться
0 |
iNNOKENTIY21 2622 / 202 / 64 Регистрация: 26.09.2020 Сообщений: 421 |
||||||||
25.01.2023, 19:31 |
2 |
|||||||
Надо бы видеть данные. Не у всех есть сервера для тестов, да с нужным сеттингом данных.
Не забудьте заменить настоящие личные данные на фейковые.
0 |
0 / 0 / 0 Регистрация: 24.01.2023 Сообщений: 4 |
|
26.01.2023, 09:07 [ТС] |
3 |
1 Почему-то без этой строчки, УЗ у которых больше одной учетной записи выдает ошибку, а с ней находит первую УЗ. Данные самые простые (файл list.txt): Допустим у Иванова две УЗ – ivan123 и ivan321 Добавлено через 51 минуту
0 |
iNNOKENTIY21 2622 / 202 / 64 Регистрация: 26.09.2020 Сообщений: 421 |
||||
26.01.2023, 09:32 |
4 |
|||
0 |
0 / 0 / 0 Регистрация: 24.01.2023 Сообщений: 4 |
|
26.01.2023, 11:28 [ТС] |
5 |
Почему-то при таком коде выдает только ФИО, а поле Username оставляет пустым.
0 |
lesser 1344 / 200 / 59 Регистрация: 03.06.2020 Сообщений: 517 |
||||
26.01.2023, 15:53 |
6 |
|||
Это работает?! Наверное это не является синтаксической ошибкой, но надо учитывать, что исходная переменная перезапишется.
0 |
0 / 0 / 0 Регистрация: 24.01.2023 Сообщений: 4 |
|
27.01.2023, 11:08 [ТС] |
7 |
ForEach($User in $User) – Убираем. Помогло следующее: вместо Export-CSV используем Out-File
0 |
Содержание
- Удобный поиск компьютера пользователя в домене Windows
- Что у нас есть?
- Что мы хотим?
- Название?
- Приступим к реализации
- Определение ip адреса и mac адреса компьютера в сети
- Содержание статьи:
- Как узнать свой mac-адрес и ip-адрес в сети
- Определение ip-адреса чужого компьютера в сети
- Определение mac-адреса чужого компьютера в локальной сети
- Полезные мелочи Windows администратора, поиск компьютеров пользователей и не только
- Описание
- Использование
- Переменные среды
- Операционная система
- Пользователь
- Компьютер
- Материнская плата
- Центральный процессор
- Оперативная память
- Графический процессор
- Сетевой адаптер
- Жёсткий диск
- Твердотельный накопитель
- Сменный накопитель
- Специализированный накопитель
- Оптический привод
- Программное обеспечение
- Другие переменные
- Примеры использования
- Получение данных
- Экспорт данных
- Импорт данных
- Использование данных
- Инвентаризация компьютеров
- env.send
- Описание
- Использование
- Примеры использования
- env.search
- Описание
- Использование
- Поиск объектов
- Переменные среды
- Операционная система
- Пользователь
- Сетевой адаптер
- Другие переменные
- Примеры использования
- Обнаружение сетевых устройств
- Обнаружение
- Сбор сведений
- Как это работает на примере Zabbix
- Поиск компьютера в сети по имени
Удобный поиск компьютера пользователя в домене Windows
Привет всем!
Работаю в компании. 1500+ активных пользователей.
Организован ХелпДеск, сотрудники регистрируют тикеты в системе, но, как-то так получается, что часть из юзеров забывают указывать имя пк, за которым они находятся.
Для выяснения этой информации (по телефону/email/экстрасенсорные способности) девочки из поддержки тратят драгоценное время, которое они могли бы уделить свежей чашке кофе или разговорам о новом платье (шутка). Наши сотрудники постоянно заняты своей непосредственной работой.
Идея (не инновация конечно) — писать данные о логонах пользователя в единую базу, а потом через веб оперативно искать нужную информацию.
Что у нас есть?
Windows среда (ХР/7/2003/2008), учетные записи хранятся в AD, все устройства работаю в локальной сети в качестве СУБД используем MSSQL 2005/2008R2.
Что мы хотим?
Поиск информации через веб интерфейс:
Должна отображаться информация:
Название?
Так как «решением» будут пользоваться несколько человек (от 5 до 35 человек), надо как-то его обозвать для удобства. Нарекли мы его «SuperVisor».
Приступим к реализации
Как будем писать в БД?
Первое, что пришло в голову — это создать bat файл с sqlcmd, но для каждой версии Windows нужна своя версия утилиты sqlcmd. Неудобно, и мы не стали копать глубже.
Вторым решением было создать небольшой exe клиент, который при запуске будет собирать данные об имени доменной учетной записи, имени пк, ip адресе пк и после получения этой информации будет выполняться вставка данных в БД. Программу размещаем, например, в папке NETLOGON на контроллере домена и групповыми политиками распространяем на ПК/Сервера в локальной сети компании.
Дальше алгоритм такой:
Таблицы созданы и наполняются данными. Забыл написать, что сервер БД у нас виртуальный и работает под Windows Server 2003R2, СУБД MSSQL 2008R2. Сервер приложения виртуальный, Windows 2003R2, Apache 2.2 + PHP 5.2
Следующий шаг — создание веб интерфейса для того, чтобы системные администраторы и сотрудники хелпдеска могли комфортно работать с сервисом. Во внутренних разработках, для экономии времени, я использую фреймфорк Bootstrap. Главная страница, до того как начинают вводить данные в поисковую строку, выглядит так:
В строку поиска можно ввести фамилию сотрудника/учетную запись(логин) или имя компьютера:
«Супервизор» работает у нас в компании около года, со своей главной задачей справляется отлично. Тикеты теперь берутся в работу оперативнее, сотрудникам не нужно тратить время на уточнение дополнительной информации для того, чтобы преступить к решению заявки.
Данное решение по определению имени компьютера получилось современным и удобным, на мой взгляд.
Источник
Определение ip адреса и mac адреса компьютера в сети
Содержание статьи:
Как узнать свой mac-адрес и ip-адрес в сети
Для начала, в двух словах обозначим, чем ip-адрес отличается от mac-адреса.
В отличии от ip-адреса машины, который может быть как статическим (постоянным), так и динамическим (изменяющимся), mac-адрес компьютера присваивается оборудованию и изменение его возможно только заменой составных частей машины. Не случайно этот идентификатор иначе называется Hardware Address. То есть, говоря проще:
Благодаря этой особенности данного параметра, использование mac-адреса порой оказывается более выгодно в сравнении с ip
Чтобы узнать свой ip адрес в локальной сети через командную строку, а также узнать mac-адрес своего оборудования, воспользуемся двумя основными способами:
для определения только ip-адреса достаточно команды ipconfig без параметра /all
В ответ вы увидите информацию о адресе своего узла в локалке (локальной сети) и физическом адресе сетевого оборудования
Определение ip-адреса чужого компьютера в сети
Также, список NetBIOS имён компьютеров в локальной сети можно просканировать командой
Допустим, нам интересен ip-адрес компьютера с именем APRESN-PC из скриншота, прикреплённого выше. Запускаем командную строку Windows и выполняем в ней следующую команду:
Консоль системы начнёт обмен пакетами с конечным узлом, отобразив его адрес
Определение mac-адреса чужого компьютера в локальной сети
Если нас интересует, как узнать mac-адрес компьютера, находящегося в одной локальной сети с нами, достаточно в командной строке Windows на своей машине выполнить следующую команду:
В появившейся информации мы получим искомый mac компьютера APRESN-PC
И последняя команда, которой мы сегодня уделим внимание.
Если вам не интересно имя компьютера, а проверять mac-адрес каждой машины по ip слишком муторно, можно просто послать запрос arp с параметром -a
Результатом выполнения этой команды будет таблица соответствия mac-адресов и ip-адресов в сети
Теперь мы можем узнать и ip-адрес, и mac-адрес компьютеров в локальной сети.
Всем сетевой безопасности и высокоскоростной передачи данных
Источник
Полезные мелочи Windows администратора, поиск компьютеров пользователей и не только
Как-то давно на хабре публиковалась статья Опытные мелочи Windows-админа. В ней рассказывалось как быстро и достаточно эффективно находить компьютеры на которых залогинился тот или иной пользователь.
Демонстрация работы скрипта env.search
Мне эта идея понравилась, т.к. всё делается достаточно просто, быстро и без модификации схемы Active Directory. Я постепенно улучшал изложенные в статье подходы и в итоге появились три скрипта, которыми я и хочу поделится с вами.
Вывод в консоль переменных созданных скриптом env
env – с помощью этого скрипта получаем данные по компьютеру и добавляем эти данные во временные переменные среды.
env.send – с помощью этого скрипта данные из переменных среды передаём в описание компьютера в Active Directory.
env.search – с помощью этого скрипта ищем нужный нам компьютер в Active Directory и подключаемся к нему.
На самом деле скрипты более универсальные и с помощью них можно делать не только изложенные выше действия, а например:
Результат работы скрипта env.send
Можно делать инвентаризацию компьютеров по сети в csv файл или в папку с ini файлами.
При отсутствии Active Directory можно по данным из переменных среды автоматически создавать ярлычок, который в своём названии будут содержать нужные данные по компьютеру, а при клике подключатся к нему или делать другое полезное системному администратору действие.
Поиск нужных компьютеров можно выполнять не только в Active Directory, но и в простом хранилище в виде папки с ini файлами.
А так же можно использовать временные переменные среды в других скриптах, например для установки программного обеспечения нужной разрядности и т.д.
Ниже привожу описание всех скриптов, что бы можно было более детально ознакомится с их возможностями. Надеюсь что они будут вам полезны, так же как мне. Сами скрипты и их исходные коды доступны в моём профиле на GitHub.
Описание
JScript для добавления в переменные среды временных переменных. Которые затем можно использовать в вызове других скриптов и приложений. Данные для переменных получаются через WMI с локального или удалённого компьютера в сети. Дополнительно переменные можно импортировать из файла и экспортировать в файл, поддерживается несколько форматов.
Достаточно часто системному администратору требуется получить общую информацию о компьютере и пользователе, чтобы затем её использовать в вызове другого скрипта или приложений. А также эту информацию иногда требуется сохранить в файл, например для инвентаризационного учёта или для использования в дальнейшем. Данный скрипт предоставляет такие возможности.
Использование
— Сетевое имя или ip адрес компьютера, в контексте которого нужно получить данные для переменных.
— Формат текстовых данных стандартного потока ввода для импорта переменных.
— Кодировка текстовых данных, направленных в стандартный поток ввода (можно использовать значение auto ).
— Формат текстовых данных стандартного потока вывода для экспорта переменных.
— Дополнительные опции (можно указать несколько).
Переменные среды
Скрипт добавляет описанные ниже временные переменные в среду процесса. Если нет данных для формирования переменной, то переменная не создаётся.
Операционная система
Пользователь
Компьютер
Материнская плата
Центральный процессор
Оперативная память
Графический процессор
Сетевой адаптер
Жёсткий диск
Твердотельный накопитель
Сменный накопитель
Специализированный накопитель
Оптический привод
Программное обеспечение
Браузер Google Chrome
Проигрыватель VLC Media Player
Приложение Spargo eFarma
Приложение SoftLine Ulus
Другие переменные
Примеры использования
Получение данных
Вывести в консоль все созданные переменные среды в контексте текущего компьютера.
Экспорт данных
Экспортировать все созданные переменные среды в ini файл с кодировкой CP 866 в контексте текущего компьютера.
Экспортировать все созданные переменные среды в ini файл с кодировкой UTF-16 LE в контексте текущего компьютера.
Импорт данных
Импортировать переменные среды из ini файла с кодировкой CP 866 и вывести их в консоль.
Импортировать переменные среды из ini файла с кодировкой UTF-16 LE и затем ещё и получить переменные среды в контексте компьютера RUS000WS001 и вывести их в консоль.
Импортировать переменные среды из csv файла с заголовком и с кодировкой UTF-16 LE и затем ещё и получить переменные среды в контексте компьютера RUS000WS001 и вывести их в консоль.
Использование данных
Выполнить тихую установку msi пакета с именем, соответствующим разрядности операционной системы текущего компьютера.
Открыть в VLC Media Player воспроизведение mp4 видео файла с именем, соответствующим логину пользователя и не дожидаться окончания воспроизведения.
Инвентаризация компьютеров
Загрузить из txt файла список компьютеров и сохранить о них информацию в папке inventory в виде ini файлов.
Загрузить из txt файла список компьютеров и сохранить о них информацию в один csv файл с заголовком.
Сконвертировать и объединить ini файлы из папке inventory в один tsv файл с заголовком.
env.send
Описание
JScript для отправки переменных среды в объект Active Directory по протоколу LDAP или в файл ярлыка в папке. Основная задача скрипта сохранить собранные данные с помощью другого скрипта env в любой атрибут (или атрибуты) объекта Active Directory или на основании этих данных создать по шаблону ярлык в папке. Чтобы затем использовать этот ярлык или данные из Active Directory в целях системного администрирования.
Использование
— Режим отправки переменных (заглавное написание выполняет только эмуляцию).
— Путь к папке или guid (допускается указание пустого значения).
Примеры использования
Предполагается использовать данный скрипт совместно с другим скриптом env, поэтому сразу в примерах будут использоваться два скрипта.
Когда компьютер в домене, то в групповых политиках при входе пользователя в компьютер, можно прописать следующий скрипт, что бы информация о компьютере и пользователе прописалась в атрибуты описания и местоположения компьютера в Active Directory в пределах Organizational Unit c guid . Что бы затем быстро находить нужный компьютер пользователя или анализировать собранную информацию. Что бы узнать guid контейнера в Active Directory можно воспользоваться программой Active Directory Explorer. Так же не забудьте пользователям выдать права на изменения нужных атрибутов компьютеров в соответствующем контейнере.
Когда компьютер не в домене то в планировщике задач, можно прописать следующий скрипт, чтобы информация о компьютере и пользователе сохранялась в виде ярлычка в сетевой папке. И затем использовать эти ярлычки чтобы одним кликом разбудить WOL пакетом нужный компьютер и подключится к нему через Помощник для оказания технической поддержки. Для отправки WOL пакета можно использовать утилиту Wake On Lan.
Когда компьютер не в домене, но есть административная учётная запись от всех компьютеров, можно выполнить следующий скрипт, чтобы загрузить из txt файла список компьютеров, получить о них информация по сети через WMI и создать аналогичные ярлычки в локальной папке.
Или можно сделать то же самое, что в предыдущем примере, но разбить всё на два этапа. Сначала получить данные с компьютеров по сети через WMI и сохранить их в локальной папке. А затем на основании этих данных создать аналогичные ярлычки в другой локальной папке.
env.search
Описание
JScript для поиска данных для переменных среды в объектах Active Directory по протоколу LDAP или в папке с ini файлами. Основная задача скрипта найти, добавить в переменные среды данные по компьютеру и используя эти переменные, выполнить необходимую команду в целях системного администрирования. Данные по компьютерам можно собрать с помощью другого скрипта env и выгрузить их в ini файлы в папке или добавить в атрибуты объектов Active Directory с помощью другого скрипта env.send.
Использование
— Режим поиска данных для переменных среды.
— Путь к папке или guid (допускается указание пустого значения).
— Дополнительные опции (может быть несколько, порядок не важен).
— Шаблоны для получения данных из атрибутов объекта (только для режима ldap ).
Поиск объектов
Переменные среды
Скрипт добавляет временные переменные в среду процесса. В режиме folder переменные добавляются по ключам в ini файле. В режиме ldap добавляются описанные ниже переменные. Если нет данных для формирования переменной, то переменная не создаётся. Если задана дополнительная опция user, то по ключам USR-NAME-FIRST и USR-NAME-SECOND дополнительно запрашиваются данные о пользователе. Применяя шаблоны для получения данных из атрибутов объекта, можно получить любые данные и добавить их в любые переменные. Причём данные из одного атрибута по шаблону можно разделить на несколько переменных.
Операционная система
Пользователь
Сетевой адаптер
Другие переменные
Примеры использования
Вывести предложение для ввода поискового запроса, номера компьютера и выбора последующего действия. Поиск осуществлять в Active Directory в пределах Organizational Unit c guid . Для отображаемой информации использовать оформление цветом, найденные компьютеры проверять на доступность и запрашивать информацию о пользователе. Что бы узнать guid контейнера в Active Directory можно воспользоваться программой Active Directory Explorer.
Вывести предложение для ввода поискового запроса, номера компьютера и выбора последующего действия. Поиск осуществлять в папке с ini файлами. Для отображаемой информации использовать оформление цветом.
Сохранить в файл список всех компьютеров расположенных в Active Directory в пределах Organizational Unit c guid .
Источник
Обнаружение сетевых устройств
Сканирование сети с построением списка устройств и их свойств, таких как перечень сетевых интерфейсов, с последующим снятием данных в системах мониторинга, если не вникать в происходящее, может показаться особой, компьютерной, магией. Как же это работает — под катом.
Disclaimer
Автор не имеет профильного образования, связанного с администрированием сетей, поэтому наверняка имеются неточности и упомянуто не всё, что можно.
Обнаружение
Для обнаружения устройства, т.е. определения есть ли на выбранном ip-адресе что-либо, можно применить следующие методы:
Данные доступны по SNMP и telnet, и могут быть использованы при построении физической карты сети.
Сбор сведений
После того, как устройство обнаружено, можно переходить к сбору сведений о нем.
Используя ARP протокол, по ip можно получить MAC-адрес, а по нему вероятного производителя (часть оборудования допускает смену адреса, так что метод не очень надежен). Далее можно воспользоваться утилитой nmap, которая сканируя открытые порты, сверяется со своей базой отпечатков и делает предположение об используемой операционной системе, её версии и типе устройства.
Чтобы получить более подробные сведения по устройству потребуется один из следующих способов:
Для работы с SNMP можно использовать пакет утилит Net-SNMP. Чтобы получить, к примеру, описание устройства, надо указать версию протокола, пароль на чтение (community read, по умолчанию public) и адрес, в нотации SNMP называемый OID (object identificator) и состоящий из чисел и точек. Все адреса устройства можно представить в виде дерева, где адреса отсортированы в лексикографическом порядке. Протокол позволяет запросить текущее значение по адресу, а также адреса следующие за текущим.
Стандартный набор адресов весьма ограничен и содержит описание устройства, контакты, расположение и время работы (uptime). Остальные адреса зависят от производителя устройства и могут быть получены сканированием, например, утилитой snmpwalk. К счастью, Linux и Windows имеют типовые адреса для сетевых интерфейсов и загруженности процессоров/памяти, поэтому для них лишь знать (или уметь определить) используемую операционную систему.
Данные можно запрашивать, разумеется, только с Windows машин.
Также имеется консольная утилита wmic и ее Linux-порт
Как это работает на примере Zabbix
Как известно Zabbix может самостоятельно обнаруживать новые устройства в сети и автоматически опрашивать некоторые их параметры. Называется это — Low Level Discovery.
Обнаружение устройств задается правилами сетевого обнаружения, которые комбинируют перечисленные ранее методы обнаружения, определяют доступно ли устройство и какой шаблон к нему применить (обычно исследуется описание устройства). Шаблон содержит список свойств, которые можно получить с устройства, а также правила для обнаружения и создания новых, выполняемые по таймеру.
Источник
Поиск компьютера в сети по имени
NetView v2.76rus сканирует подсеть и выдает список работающих компов, при последующих запусках проверяет их доступность в сети.
В открывшеся окошечке (интерфес коммандной строки) набрать ping (имя компа или его IP adrees, в первом случае он нам покажет его IP adress и отправит четыре пакета для проверки связи, во втором просто проверит связь)
Эта команда работает и в интернете, наберите после ping имя сайта, и вы узнаеете на каком IP adress он расположен.
Чтобы успеть перписать IPшник, лучше так:
Win+R
cmd
ping ИМЯХОСТА
Так окно не закроется сразу, и будет видно.
Источник
Содержание
- Как узнать SID пользователя по имени и наоборот
- Получить SID локального пользователя
- Получить SID доменного пользователя
- Определить имя пользователя по SID
- Как посмотреть доменных пользователей windows
- Что такое Sid windows
- База Security Account Manager
- 1 способ узнать sid пользователя, команда WMIC
- 2 способ узнать sid пользователя, команда Whoami
- 3 способ узнать sid пользователя, ADUC и ADSIedit
- 4 способ узнать sid пользователя, утилита PsGetSid
- 5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
- 6 способ узнать sid пользователя, Get-ADUser
- Как массово определить SID пользователя
- Как узнать SID пользователя или группы AD по имени и наоборот?
- Как получить SID локального пользователя?
- Узнать SID пользователя или группы в домене AD по имени
- Как узнать имя учетной записи пользователя или группы по SID?
- Поиск объектов в Active Directory по SID
Как узнать SID пользователя по имени и наоборот
В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым каталогам, ключам реестра, объектам файловой системы и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя и обратной процедуры – определения имени пользователя Windows по его SID.
Для преобразования username в SID можно воспользоваться отличий утилитой из комплекта Sysinternals — PsGetSid. Но ее придется выкачивать и устанавливать на каждую систему вручную.
Гораздо проще воспользоваться утилитой командной строки или скриптом Powershell
Получить SID локального пользователя
Чтобы получить SID локальной учетной записи на данной машине, можно воспользоваться утилитой wmic, обращающейся к WMI хранилищу. Для локального пользователя test_user команда будет такой:
wmic useraccount where name=’test_user’ get sid
В этом примере SID пользователя — S-1-5-21-1175651296-1316126944-203051354-1005
Если нужно узнать SID текущего пользователя, выполните такую команду:
wmic useraccount where name=’%username%’ get sid
На PowerShell скрипт, выдающий тот же результат можно реализовать с помощью двух классов SecurityIdentifier и NTAccount.
$objUser = New-Object System.Security.Principal.NTAccount(«LOCAL_USER_NAME»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Получить SID доменного пользователя
Узнать SID текущей доменной учетной записи можно командой:
Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell.
Get-ADUser -Identity ‘jjsmith’ | select SID
Если модуль AD для PowerShell отсутствует, через Powershell можно запросить данные из домена так:
$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Эта же команда в одну строку:
(new-object security.principal.ntaccount “jjsmith»).translate([security.principal.securityidentifier])
Определить имя пользователя по SID
Чтобы узнать имени учетной записи пользователя по SID (обратная процедура), можно воспользоваться одной из следующих команд:
wmic useraccount where sid=’S-1-3-12-12452343106-3544442455-30354867-1434′ get name
На PowerShell при помощи модуля AD для Powershell:
Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116
$objSID = New-Object System.Security.Principal.SecurityIdentifier («S-1-5-21-2470456651-3958312488-29145117-23345716»)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value
Попробуйте наши услуги обслуживания и получите третий месяц обслуживания в подарок!
Как посмотреть доменных пользователей windows
Добрый день уважаемые читатели, сегодня мы продолжим изучение Active Directory, а точнее его сущностей. Под сущностью понимается некий объект, в нашем случае это учетная запись пользователя, но их список куда больше. Наша сегодняшняя задача изучить как узнать sid пользователя windows в домене.
Что такое Sid windows
Давайте для начала с вами выясним определение SID или Security Identifier > это идентификатор безопасности, который используется в семействе операционных систем Windows для идентификации объекта:
- Группа безопасности
- Пользователь
- Компьютер
- Организационная единица
- Принтер
SID во время создания объекта, присваивается ему , в домене Active Directory за это отвечает мастер роль RID. В рамках домена, каждый SID должен быть уникален, в отличии от имени, так как Ивановых Иванов Ивановичей, может быть много, а вот отличаться они будут логином и SID. Для операционной системы Windows, важнее сиды объектов, она же их использует и для контроля прав доступа на различные корпоративные ресурсы:
- Папки и файлы
- Принтеры
- Доступ к внешним ресурсам
Структура SID
Давайте разбираться из каких частей состоит Security IDentifier.
Впереди идет версия сида, далее Генеральная область Authority — это ссылка на систему источник, которая его выпустила. В операционных системах Windows версия Security IDentifier сейчас одна и равна она 1, Генеральная область Authority имеет значения 1,3,5, для Microsoft Exchange она 9. Далее в сиде следует 1 или более идентификаторов Sub Authority, а за ними идет RID (Relative IDentificator) локальный для данного Sub Authority номер субъекта безопасности.
По мимо этого, в любой ос Windows существуют встроенные или BuiltIn группы и учетные записи, например администратор или гость, в каждой ос виндоус они имеют одинаковые SID значения. Посмотреть вы их можете в оснастке Управление компьютером.
Сделаны они для того, что если у вас нет Active Directory, то вы могли бы администрировать данные системы с помощью них. Все SID для данных учетных записей находятся в локальной базе данных Windows, под названием Security Account Manager или SAM. Все сиды пользователей домена лежат в базе Active Directory в файле NTDS.dit.
База Security Account Manager
Давайте посмотрим за, что отвечает Security Account Manager:
- Сопоставление имен с SID и обратно, некий такой DNS для учетных записей
- Проверяет пароли, авторизовывает (принимает участие в процессе входа пользователей в ОС)
- Ведет статистику, кто последний входил, количество входов, кто сколько раз ввел не тот пароль, короче аудит
- Контролирует политика паролей учетных записей, в случае чего может блокировать учетные записи.
- Ведет учет, кто в какие группы входит
- Производит защиты самого себя
- Дает программный интерфейс для управления базой учетных записей
Хранится SAM (Security Account Manager) в реестре Windows. Как открыть реестр windows, я уже описывал не однократно, переходим в ветку.
Если вы кликните правым кликом и из контекстного меню выберете Разрешения, то обнаружите, что права доступа есть только у системы, а вот у администраторов локальной станции их нет, но при желании можно их получить, это лишний механизм защиты, так как можно вытащить хэши учетных записей и попытаться их взломать.
SAM это библиотека samsrv.dll, которая работает в Windows в виде процесса lsass.exe, увидеть это можно в диспетчере задач.
1 способ узнать sid пользователя, команда WMIC
Для примера я все буду показывать на своей рабочей станции с установленной в ней Windows Server 2012 R2, станция принадлежит домену Active Directory. Первый метод, это использование старого, доброго WMIC инструментария (Windows Management Instrumentation). Все, что вам нужно, это знать имя пользователя, точнее его логин. Чтобы посмотреть список локальных пользователей введите команду
На выходе вы получите список локальных пользователей.
Чтобы выяснить все логины доменных пользователей вводим команду
Я вам это уже рассказывал в заметке Как узнать имена учетных записей Администраторов домена. На выходе получите, что то такое
Далее зная логин все просто вводим
Как видите все работает.
Можно наоборот по SID узнать логин пользователя, потребуется это в тех случаях, когда например в списках доступа у вас видится сид, и вы хотите узнать кому он принадлежал.
Еще с помощью WMI вы можете реализовать вот, что укажите имя компьютера (для локального) или домена (для доменного пользователя). Ниже пример получения SID локальной рабочей станции
Для доменной структуры
Получить логин по SID аналогично предыдущей команду.
2 способ узнать sid пользователя, команда Whoami
Тоже довольно старенькая команда из cmd.exe. Вводим
Получаем полный сид текущего залогиненного пользователя.
Если ввести Whoami /logonid, то можно получить logonid, выглядит он вот так S-1-5-5-0-595920
Если ввести ключ /all, то вы увидите, все sid локальных (bultin) групп и пользователей
Так же вы увидите сведения о привилегиях.
На мой взгляд, данный метод, немного проще первого, так как требует ввода меньшего количества ключей.
3 способ узнать sid пользователя, ADUC и ADSIedit
В третьем способе мы воспользуемся средствами графического интерфейса, а точнее самой оснастке Active Directory пользователи и компьютеры. В ней есть встроенный механизм называется редактор атрибутов Active Directory. Открываем вкладку Вид и ставим галку Дополнительные параметры, да забыл отметить нужно быть членом группы Администраторы схемы.
После чего заходим в свойства учетной записи, вкладка Редактор атрибутов и находим там поле objectSid.
Так же SID можно посмотреть и во встроенной оснастке ADSIedit, подключаетесь там к контексту именования имен и заходите в свойства нужной учетной записи.
Да чуть не забыл в Windows Server 2012 R2 есть такое средство как Центр администрирования Active Directory, ищите там нужную учетную запись и в ней находите пункт SID.
4 способ узнать sid пользователя, утилита PsGetSid
Есть такая замечательная утилита от Microsoft од названием PsGetSid.
Когда вы скачаете и разархивируете файл, вы получите папку с большим набором утилит, среди них будет PsGetSid.
смысл у данной утилиты очень простой, она входит в состав Sysinternals и умеет получать SID пользователя по его имени и наоборот, умеет получать как локальных пользователей, так и доменных.
Вводим команду psgetsid имя компьютералогин учетки
и наоборот, выясним имя по SID:
5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
Пятым методом будет использование в powershell класса System.Security.Principal.NTAccount. Для домена Active Directory.
Для локального пользователя команда будет такой.
6 способ узнать sid пользователя, Get-ADUser
Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.
получить наоборот логин по sid
Как массово определить SID пользователя
Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.
В этом нам поможет скрипт PowerShell. Откройте ISE.
foreach ($line in (Get-Content $users_file))
<
$username = ($Line -split «\»)[1]
$user = Get-ADUser $username -Server «DC4.root.pyatilistnik.org»
$Result = [ordered]@ <
user = $line
SID = $user.SID
>
New-Object PSObject -Property $Result
>
На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.
Как узнать SID пользователя или группы AD по имени и наоборот?
В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы, принтерам и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя или группы (локальных или из Active Directory), и обратную процедуру – определение имени пользователя или группы Windows по известному SID.
Получение учетки по SID:
На мой взгляд, проще всего для преобразования SID -> Username и Username -> SID проще всего воспользоваться командами командной строки или несложными командлетами PowerShell:
Как получить SID локального пользователя?
Чтобы получить SID локальной учетной записи на данном компьютере, можно воспользоваться утилитой wmic, которая позволяет обратится к пространству имен WMI компьютера. Для получения SID локального пользователя test_user можно использовать утилиту WMIC:
wmic useraccount where name=’test_user’ get sid
Команда вернула нам SID указанного пользователя — S-1-5-21-1175651296-1316126944-203051354-1005.
Если нужно узнать SID текущего пользователя (под которым выполняется команда), используйте такую команду:
wmic useraccount where name=’%username%’ get sid
С помощью двух .NET классов System.Security.Principal.SecurityIdentifier и System.Security.Principal.NTAccount вы можете получить SID пользователя с помощью PowerShell:
$objUser = New-Object System.Security.Principal.NTAccount(«LOCAL_USER_NAME»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Узнать SID пользователя или группы в домене AD по имени
Вы можете узнать SID текущей доменной учетной записи командой:
Узнать SID доменного пользователя можно с помощью WMIC. В этом случае в команде нужно указать имя домена:
wmic useraccount where (name=’jjsmith’ and domain=′corp.winitpro.ru′) get sid
Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell. Получим SID для аккаунта jjsmith:
Get-ADUser -Identity ‘jjsmith’ | select SID
Вы можете получить SID группы AD с помощью другого командлета — Get-ADGroup:
Get-ADGroup -Filter | Select SID
Если на вашем компьютере не установлен модуль AD для PowerShell, вы можете получить SID пользователя с помощью упомянутых ранее классов .Net:
$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Эта же команда PowerShell в одну строку:
(new-object security.principal.ntaccount “jjsmith»).translate([security.principal.securityidentifier])
Как узнать имя учетной записи пользователя или группы по SID?
Чтобы узнать имя учетной записи пользователя по SID (обратная процедура), можно воспользоваться одной из следующих команд:
wmic useraccount where sid=’S-1-3-12-12452343106-3544442455-30354867-1434′ get name
На PowerShell получить имя пользователя по его SID можно с помощью модуля AD для PowerShell:
Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116
Чтобы найти имя доменной группы по известному SID используйте команду:
Get-ADGroup -Identity S-1-5-21-247647651-3952524288-2944781117-23711116
Также можно узнать SD группу и пользователя с помощью встроенных классов PowerShell (без дополнительных модулей):
$objSID = New-Object System.Security.Principal.SecurityIdentifier («S-1-5-21-2470456651-3958312488-29145117-23345716»)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value
Поиск объектов в Active Directory по SID
Если вы не знаете к какому типу объекта AD относится некий SID и какой точно командлет использовать для его поиска (Get-AdUser, Get-ADComputer или Get-ADGroup), вы можете использовать универсальный метод поиска объектов в Active Directory по SID с помощью командлета Get-ADObject (параметр IncludeDeletedObjects позволяет искать по удаленным объектам AD в корзине).
$sid = ‘S-1-5-21-2470146651-3951111111-2989411117-11119501’
Get-ADObject –IncludeDeletedObjects -Filter «objectSid -eq ‘$sid’» | Select-Object name, objectClass
SID
В нашем случае объект AD, который имеет данный SID, является компьютером (objectClass).
Get-ADUser команда, которая возвращает список пользователей AD в Powershell. На самом деле командлет мало чем отличается от тех, которые мы рассматривали раннее с приставкой “Get-AD”.
Для работы с командой нам понадобится Powershell Active Directory Module.
Так мы вернем всех пользователей AD:
Get-ADUser -Filter *
Если нам нужно найти по имени, сделайте так:
Get-ADUser -Filter {Name -like "*Adminis*"}
Где вместо Adminis имя вашей учетной записи. Звездочки позволяют искать вхождение где справа и слева могут быть еще символы.
Для получения сведений об одной учетной записи AD есть ключ Identity:
Get-ADUser -Identity Administrator -Properties *
Кроме этого у нас есть дополнительный ключ Properties, который выводит дополнительные свойства у объекта пользователя:
Get-ADUser -Properties * -Filter {Name -like "*0001*"}
Если мы хотим выполнить Get-ADUser в OU, то для этого есть дополнительный ключ, который может искать в организационных единицах и контейнерах. В моем случае я ищу в OU Moscow и домене domain.local:
Get-ADUser -SearchBase "OU=Moscow,DC=domain,DC=local" -Filter * -Properties *
Если вам нужно искать в контейнере – используйте CN. Примеры с множеством OU смотрите ниже.
Поиск и фильтрация списка пользователей AD в Powershell Get-ADUser -Filter
Мы можем фильтровать по одному или множеству свойств. Для того что бы увидеть все свойства нужно сделать:
В области 1 выделены все имена, по которым мы можем фильтровать. В области 2 тип данных с которыми мы можем сравнивать. Т.е. если тип данных у области 2 string (строка), то это плохая идея сравнивать с числом (int). Нужно сразу отметить, что те свойства, которые мы получаем благодаря ключу Properties мы не можем применять в Filter.
Примеры с Get-Member мы уже рассматривали раньше.
Для примера так мы можем получить всех пользователей, у которых указан город Moscow:
Get-ADUSer -Properties * -Filter City | Where-Object -Property City -eq "Moscow"
А теперь найдем всех пользователей, которые неверно вводили пароль более одного раза и в они включены:
Get-ADUser -Properties * -Filter {Enabled -eq $true} | Where-Object -Property BadLogonCount -gt 1
Т.к. BadLogonCount – это свойство от ключа Properties оно должно проверятся через конвейер в Where.
Еще один пример, но теперь нужно найти пользователя имя которого содержит 0001 и он активен:
Получение списка пользователей Active Directory в Powershell Get-User из нескольких OU
В команде нет встроенных средств поиска в нескольких объектах сразу. Мы можем объявить переменную, содержащую этот список и затем передать через цикл. На моем пример используется контейнер Users и OU Moscow:
$ou = "OU=Moscow,DC=domain,DC=local","CN=Users,DC=domain,DC=local"
$ou | foreach {Get-ADUser -SearchBase $_ -Filter * }
Если бы у меня была OU Ekaterinburg в которой находилось OU Marketing написать стоило бы так:
"OU=Marketing,OU=Ekaterinburg,DC=domain,DC=local"
Выгрузка пользователей из AD в Excel с Powershell
Экспорт и выгрузка может быть во множество форматов, но для выгрузки в Excel есть специальный формат CSV. Для того что бы сделать выгрузку достаточно выполнить следующее:
Get-ADUser -Filter * | Export-Csv -Path C:data.csv -NoTypeInformation
Если мы хотим выгрузить только определенные свойства, то в поле SELECT -Property нужно их перечислить:
Get-ADUser -Property -Filter * | SELECT -Property whenChanged,StreetAddress | Export-Csv -Path C:data.csv -NoTypeInformation
Более подробно об экспорте csv через Powershell.
Получение Email пользователя AD в Powershell
Нужное свойство мы можем получить через соответствующий ключ Properties. Так я получу почту у конкретного пользователя Administrator:
Выгрузим в CSV имена только тех пользователей у которых нет почты:
$result = Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -EQ $null
$result | SELECT -Property Name | Export-Csv -Path C:data.csv -NoTypeInformation
Получение списка пользователей чей срок действия пароля истек в Powershell
Для того что бы увидеть все свойства относящиеся к паролям выполните:
И затем, по этому свойству, отфильтруем пользователей:
Get-ADUser -Filter * -Properties PasswordExpired | where -Property PasswordExpired -eq $true
…
Теги:
#powershell
#ad