Dsquery не является внутренней или внешней

Как узнать S > 02.02.2019 Active directory, GPO, CA No comments

Как узнать S >

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами установили домен Active Directory на Windows Server 2019. Одним из краеугольных понятий в AD является идентификатор безопасности компьютера S >

Сколько у компьютера SID-ов?

О том, что такое SID у пользователя, я уже рассказывал. SID — это уникальное имя (буквенно-цифровая символьная строка), которое используется для идентификации объекта, такого как пользователь или компьютер в сети систем NT. Windows предоставляет или запрещает доступ и права доступа к ресурсам на основе ACL, которые используют SID для уникальной идентификации компьютеров и их членства в группах. Когда компьютер запрашивает доступ к ресурсу, его ACL проверяет SID компьютера, чтобы определить, разрешено ли этому компьютеру выполнять это действие или нет. Схематично выглядит вот так.

Существует два типа SID у компьютера:

  • Первый тип, это когда рабочая станция или сервер не являются членом домена Active Directory
  • Второй тип, это когда компьютер входит в домен Active Directory

В обоих случаях у вас будет два абсолютно разных SID. Первый дескриптор безопасности у вас генерируется при установке системы, второй если вы вводите его в домен AD. И так, у меня есть тестовый домен root.pyatilistnik.org. Есть клиентская станция с Windows 10 1803. Для того, чтобы вам показать разницу и оба SID идентификатора на моей тестовой Windows 10, мы воспользуемся утилитой Марка Русиновича PsGetSid из инструментария Sysinternals (Скачать PsGetSid можно по ссылке https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid). Распаковываете архив с утилитой, открываете командную строку от имени администратора и переходите с помощью cd в каталог с утилитой PsGetSid.

Первым делом я выведу имя компьютера, через команду hostname. В моем примере, это W10-CL01.

Далее я выведу локальный SID компьютера, через утилиту PsGetSid:

В итоге я получил SID for W10-CL01w10-cl01:S-1-5-21-7706586-876249769-275126362. Обратите внимание, что перед идентификатором безопасности идет имя компьютера, это сразу говорит, что он локальный.

И команда указанная выше, показывает вам доменный SID рабочей станции. SID for ROOTw10-cl01$:S-1-5-21-233550040-578987154-4094747311-1602. Обратите внимание, что перед идентификаторам идет имя домена ROOT.

Нюансы идентификаторов безопасности на рабочих станциях

Некоторое время назад, Марк Руссинович, очень известный человек в мире Microsoft, написал замечательную статью, про мифы дублирования SID, где показал на практике свои мысли, но после прочтения статьи у некоторых людей оставалась в голове путаница или вопросы, бы хотел немного уточнить по статье (Ссылка на нее https://blogs.technet.microsoft.com/mark_russinovich/2009/11/15/sid/).

Предположим, что вы клонируете нужную вам виртуальную машину или хост. Если вы не обезличиваете систему, с помощью Sysprep, то у вас все полученные клоны систем, будут иметь один локальный SID компьютера. Если мы говорим про окружение в виде рабочей группы в локальной сети, то ни каких проблем с доступом или конфликтом с доступом к ресурсам вы не увидите. Но вот в случае с доменным SID, такое не получится, он должен быть уникальным в пределах Active Directory, в противном случае, у вас будут конфликты между двумя объектами. Убедитесь, что после клонирования и обезличивания у вас разные SID, полученные от мастера RID.

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

Методы определения сида компьютера

  • Первый метод я вам уже показал. он заключается в использовании утилиты PsGetSid
  • Второй метод, это использование командной строки, с помощью утилиты dsquery. Получать мы таким методом будем доменный SID у сервера или рабочей станции:

dsquery computer — name "Имя компьютер" | dsget computer — SID

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

  • Через скриптик VBS. Вы копируете код представленный ниже или скачиваете уже готовый файл у меня, только лишь потом отредактировав его и изменив имя на свое. После чего у вас будет запрошен локальный SID компьютера. Напоминаю, что у всех встроенных групп или учетных записей, начало их идентификатора безопасности состоит из полного SID компьютера с добавлением своего дополнительного номера.

  • Куда же без PowerShell в нем можно делать, что угодно. Вот пример кода дающего локальный идентификатор безопасности у рабочей станции:

тут так же будет запрошен SID учетной записи "Администратор". Если компьютер доменный, то нам поможет командлет Get-ADComputer. Запускаем оснастку PowerShell и вводим команду:

Get-ADComputer W10-CL01 -prop sid

Как видите методов очень много. Видел я метод и получения сида из реестра Windows, в ветке

При попытке открыть какую-либо команду через окно служебной программы или консоль, вы сталкиваетесь с ошибкой – «Имя файла» не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Система упрямо не открывает файл по каким-то причинам и этот факт очень раздражает. Причиной этого может быть один из нескольких вариантов: неправильно указан путь к файлу и отсутствие компонента в системе вообще, т.е по указанному адресу его не существует.

Ошибка в системной переменной

Основные причины, по которым появляется ошибка «не является внутренней или внешней командой»

Как уже было сказано, одна из причин заключается в неправильном указании пути к открываемому файлу. Обычно путь к файлу прописан в переменной «Path» в системе, должен быть указан строгий путь к директории, в котором размещены нужные файлы. Если имеются какие-то ошибки в настройках при указании пути в переменной, либо при указании имени файла, то система будет выдавать именно такую ошибку – «имя файла» не является внутренней или внешней командой, исполняемой программой.

Первым делом необходимо указать точный путь переменной «Path» операционной системе, чтобы не возникало ошибок при открытии файла. Для этого нужно наверняка знать расположение папки. К примеру, обратимся к программе, которая в дальнейшем будет работать с исполняемым файлом в определенной папке.

Переменная «Path» — это переменная операционной системы, которая служит для того, чтобы найти указанные исполняемые объекты через командную строку или терминал. Найти ее можно в панели управления Windows. В новых версиях Виндовс и других ОС указание вручную обычно не требуется.

Системная переменная Path

Указываем правильный путь в переменной path на ОС Windows 7

Чтобы правильно указать путь необходимо знать точное расположение файла. Если файл программы, который нужно открыть лежит на диске в С:Program FilesJavajdk 1.8.0.45in, тогда этот путь нужно скопировать и указать в системной переменной для последующего открытия.

  1. Далее нам понадобиться рабочий стол, наводим мышь на «Мой компьютер» и в контекстном меню выбираем «Свойства».
  2. Нажимаем «Дополнительные параметры» слева и выбираем пункт «Переменные среды».
  3. В открывшемся окне ищем строку «Path» нажимаем на нее и вставляем скопированные путь сюда.
  4. Действие нужно подтвердить кнопкой «Ок». Компьютер желательно перезагрузить, чтобы настройки точно вступили в силу. Откройте консоль и вбейте нужную команду. Ошибки быть не должно.

В том случае, если ошибка будет появляться снова, попробуйте перенести программу в рабочие директории диска с установленной операционной системой, например /System32. С этой директорией Виндовс работает чаще.

Также ошибки возникают из-за отсутствия компонентов программы. Устранить их можно дополнив нужными. Для примера возьмем компонент «Telnet». Чтобы его включить, перейдите:

  • На «Панель управления».
  • Дальше выберите «Включение и выключение компонентов».
  • Из списка выбираем «Клиент Telnet», напротив ставим галочку и нажимаем «Ок».
  • Компонент должен работать и ошибок возникать больше не должно.

Dsquery.exe это утилита командной строки для получения информации о различных объектах в домене ActiveDirectory. Утилита доступна по-умолчанию во всех версиях Windows Server. Для ее использования в десктопных ОС необходимо установить соответствующую версию RSAT.

Команда dsquery позволяет выполнять запросы к LDAP каталогу для поиска объектов, отвечающих указанному критерию. В качестве атрибута команды dsquery нужно указать тип объекта AD, по которым выполняется поиск. Например:

  • dsquery computer
  • dsquery contact
  • dsquery subnet
  • dsquery group
  • dsquery ou
  • dsquery site
  • dsquery server
  • dsquery user
  • dsquery quota
  • dsquery partition
  • dsquery *

Последняя команда используется для поиска каталоге AD любых объектов с помощью общего запроса LDAP.

Чтобы получить справку о конкретной команде, наберите:

Рассмотрим полезные примеры использования команды dsquery для получения информации из AD.

Чтобы найти все контролеры домена в лесу AD, выполните команду:

dsquery Server -o rdn -Forest

Вывести список всех контроллеров домена в указанном домене:

dsquery Server -domain vmblog.ru

Чтобы вывести все контроллеры домена с ролью Global Catalog:

dsquery Server -domain vmblog.ru -isgc

Список всех контроллеров домена в лесу, которые держат роль Schema Master FSMO:

dsquery Server -Forest -hasfsmo schema

Вывести все подсети в сайте Moscow:

dsquery subnet –site Moscow

По умолчанию утилита dsquery позволяет вывести только 100 объектов из AD. Чтобы нужно, чтобы команда вернула более 100 результатов, используйте аргумент –limit. Параметр –limit 0 означает, что результаты в выводе не ограничены.

Выведем список всех пользователей домена:

dsquery * -filter "(&(objectcategory=person)(object >

По-умолчанию команда dsquery выводит список объектов, соответствующих критериям на экран, но вы можете сохранить полученный список в файл, перенаправив результаты команды таким образом:

DsQuery User > ExportAllUsers.txt

Можно получить информацию о конкретном пользователе:

dsquery * -filter "(&(objectcategory=person)(object >

Чтобы получить SID пользователя, используйте команду:

dsquery * -filter "&(objectcategory=user)(samaccountname=asivanov)" -attr objectsid

Следующая команда возвращает список групп в домене:

dsquery * -filter "(&(objectcategory=group)(object >

Выведем список компьютеров в домене, имена которых начинаются в BUH-PC:

dsquery computer -name BUH-PC*

Утилиту dsquery можно использовать конвейером с другими утилитами (dsmod, dsget, dsrm или dsmove), и тогда в качестве входных данных для них будет браться результат команды dsquery. Например, чтобы сохранить членов определенной группы AD в текстовый файл (по аналогии с командлетом Get-ADGroupMember) используйте такой конвейер:

dsquery group ‘DC=vmblog,DC=ru’ -name ‘domain admins’ | dsget group -members > ExportUsersinGroup.txt

Либо вы можете отключить учетные записи найденных пользователей:

dsquery user –name Seme* | dsmod user -disabled yes

Найти и удалить из AD все компьютеры, которые неактивны более 10 недель:

dsquery computer -inactive 10 | dsrm

Добавить всех пользователей из определенной OU в группу безопасности AD:

dsquery user ‘ou=SPB,dc=vmblog,dc=ru’ | dsmod group ’cn=SPBUsers,ou= SPB,dc=vmblog,dc=ru -addmbr

Чтобы получить список пользователей, которые не меняли свой пароль в домене более 60 дней, выполните:

dsquery user -stalepwd 60 -limit 0
На первый взгляд синтаксис утилиты dsquery довольно сложен. Но если вы попробуете самостоятельно выполнить несколько запросов, вы поймете, что большинство подкоманд dsquery используют один и тот же стандартный синтаксис и содержат лишь несколько расширений стандартного синтаксиса, специфичных для типа объекта, с которым они работают.


[an error occurred while processing the directive]
Карта сайта