Showing posts with label AD. Show all posts
Showing posts with label AD. Show all posts

Wednesday, 15 October 2025

Get-ADUser та Unable to contact server.

Привіт привіт.

Сьогодні рулимо проблему «Get-ADUser: Unable to contact server» у PowerShell.

Намалював коротеньку інструкцію для діагностики та виправлення проблем із RSAT/ADWS з портом 9389.

Зміст

  1. Початкова інформація та контекст
  2. Перевірки - по кроках
  3. LOGONSERVER vs ADWS - в чому різниця
  4. Що робити, якщо ADWS недоступний
  5. Обхідні шляхи (LDAP / .NET) та рекомендації
  6. Коротке зведення у таблиці

Початкова інформація та контекст

Командлети модуля ActiveDirectory (Get-ADUser, Get-ADDomain, Get-ADComputer) в RSAT використовують службу Active Directory Web Services (ADWS), яка працює через TCP-порт 9389. Якщо при виконанні Get-ADUser ти бачиш помилку “Unable to contact server”, це часто означає, що PowerShell не може зв’язатися з ADWS на жодному доступному контролері домену.

Перевірки - по кроках

1) Перевірка наявності RSAT (AD модуль)

Get-WindowsCapability -Name RSAT* -Online | ? Name -like '*DS-LDS*'

Якщо State : Installed — модуль встановлено. Якщо ні, можна встановити:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online

2) Перевірка базового мережевого доступу і DNS

Test-Connection <ім'я_DomainController> -Count 1
Resolve-DnsName _ldap._tcp.dc._msdcs.<ваш_домен> -Type SRV

Friday, 1 August 2025

Скажи, кто твой AI, и я скажу, кто ты.


Всем привет.

Популярная фраза теперь звучит так "Скажи, кто твой AI, и я скажу, кто ты." Ажиотаж вокруг AI еще тот. И он оправдан. Вы можете любить или ненавидеть  AI, но с каждым днем его все больше в вашей жизни.

Сегодня процитирю вам АІ-советы от Александра Фролова, начальника отдела информационных технологий МГУ им. адм. Г.И. Невельского.

Нейросети - это мощный инструмент для системных администраторов, который помогает экономить время и решать сложные задачи. Однако важно использовать их с умом: проверять ответы, задавать четкие вопросы и не полагаться на них полностью в критически важных ситуациях. Для сисадминов особенно полезны ChatGPT, GitHub Copilot и Claude, так как они помогают автоматизировать рутинные задачи и находить решения быстрее. 

Для сисадминов (DevOps) особенно полезны ChatGPT, GitHub Copilot и Claude, так как они помогают автоматизировать рутинные задачи и находить решения быстрее.

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

Наиболее популярные инструменты:

ChatGPT (OpenAI): для генерации скриптов, анализа ошибок, поиска решений, документации.

GitHub Copilot: для помощи в написании кода и автоматизации задач.

Perplexity.ai: для поиска информации и быстрого получения ответов на технические вопросы.

Bard (Google): для сравнения ответов и поиска альтернативных решений.

Claude (Anthropic): для работы с длинными текстами, например, анализ логов или документации.

Saturday, 29 June 2024

Управление группами безопасности в AD.


Всем привет.

Рассмотрим управление группами безопасности в каталоге Active Directory с помощью ADSI. Рассмотрим как простые операции с группами: создание, поиск групп, чтение свойств, так и сложные - копирование списков безопасности.

Создание группы безопасности.

# Название создаваемой группы

$GroupName="..."

# Путь к контейнеру, в котором будет создана группа

$objOU=[ADSI]"LDAP://OU=...,DC=test,DC=domain,DC=com"

$objGroup = $objOU.Create("group", "CN=" + $GroupName)

$objGroup.Put("sAMAccountName", $GroupName)

$objGroup.SetInfo()

Для создания группы безопасности в каталоге Active Directory необходимо знать путь к контейнеру, в котором будет создана группа и название самой группы. По умолчанию создается Global Security группа (groupType=-2147483646).

Wednesday, 26 June 2024

Query by ADSI and ADSISearcher.

Hi all.

This post will examine the difference between PowerShell ADSI and ADSISearcher when using PowerShell to query Active Directory. ADSI and ADSISearcher are used to query Active Directory (AD) using Lightweight Directory Access Protocol (LDAP).


WHAT IS LDAP?

LDAP, as the name suggests, is a protocol that provides an interface to query AD directory services.  When we are querying AD we are returning one or more objects with unique identifiers (a Distinguished Name).  And we can do this using two type accelerators called ADSI and ADSISearcher.


WHAT IS A TYPE ACCELERATOR?

A type accelerator is a simple alias to represent a .Net class.  We can return a list of type accelerators like so:

[System.Management.Automation.PSObject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::Get

You’ll notice that one of the type accelerators is psobject which references the class System.Management.Automation.PSObject. This means we could simplify our command above by using a type accelerator to get a list of all the type accelerators like so!

[psobject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::Get

Wednesday, 19 June 2024

Вложенные группы в Active Directory.

Всем привет.

Группы Active Directory используются для множества разных целей, будь то фильтрация групповой политики или назначение определенных привилегий пользователям. Достаточно гибкая структура позволяет разграничивать объекты пользователей и компьютеров наиболее удобным для нас образом.

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

Например поиск по объектам пользователей.

Исходя из 

$SamAccName = 'Morozov-МB'

и

$Name = 'Морозов Марк Васильевич'

чтобы получить список групп, в которые непосредственно входит пользователь, мы можем поступить следующим образом:

Get-ADPrincipalGroupMembership -Identity $SamAccName

Если же нам понадобится узнать все группы, в которые он входит посредством вложенных групп, мы можем воспользоваться командлетом Get-ADAccountAuthorizationGroup:

Get-ADAccountAuthorizationGroup -Identity $SamAccName | Where-Object objectClass

Sunday, 19 May 2024

How to query AD for Bitlocker details.

 

Hi all.

You must back up your BitLocker recovery key. But you can do this in your business AD. That is post, you can activate and store BitLocker recovery codes in Active Directory (AD) for easy retrieval.

However question - how can you query AD for BitLocker Details? In this post I will show you what you need to do to query AD for BitLocker details. First this post assume that you have administrator rights to access the BitLocker Recover Password details. 


How to query AD for Bitlocker details via ADUC

As I said, I know that BitLocker keys would be stored in the computer object within AD. But where? Using the MEMDP2 as my example.  I open Active Directory Users and Computers (ADUC). I located MEMDP2 and looked at its properties, at first glance, there is nothing to indicated that this computer has a BitLocker Password. And no Password Replication will not store BitLocker details but Attribute Editor might. Lets’ start there.

I know from my other research that the are several Attribute that the data is stored within and they are called:

ms-FVE-KeyPackage

ms-FVE-RecoveryGuid

ms-FVE-RecoveryInformation

ms-FVE-RecoveryPassword

ms-FVE-VolumeGuid


If BitLocker attributes missing form attribute editor you have to install the BitLocker AD module. Since we have all installed a Windows Feature. Just the high lever steps.



I’m preforming these steps on my DC. In the Features windows, select BitLocker Drive Encryption (orange arrow) this will immediately popup Add more feature window, Click Add Feature button. Complete the wizard to finish the install, don’t forget to reboot.



After the reboot I go back into ADUC and select the MEMDP2, we can see the BitLocker Recovery tab. 

Tuesday, 12 March 2024

Режим временного пользователя в группе AD.


Всем привет. 

В Windows Server 2016 появился полезный функционал - режим временного добавления пользователя в группу с автоматическим удалением через указанное время. Т.е. администратор может включить другого пользователя в нужную группу на пару минут для решения срочной задачи и не заботиться про то чтобы эти права у пользователя позже отозвать. Фича работает только через Powershell.

С чего начать? Проверяем режим работы леса, должен быть 2016 и выше: 

(Get-ADForest).ForestMode

Проверяем диапазон:

Get-ADOptionalFeature -filter *| select EnableScopes

И включаем функционал, внимаение - включение работает в одну сторону и его отмена невозможна:

Enable-ADOptionalFeature 'Privileged Access Management Feature' -Scope ForestOrConfigurationSet -Target company.com

Отлично. Теперь задаем временной интервал в минутах (можно использовать и часы -Hours) и добавляем пользователя alex в группу "Администраторы домена":

$ttl = New-TimeSpan -Minutes 2

Add-ADGroupMember -Identity "Администраторы домена" -Members alex -MemberTimeToLive $ttl

В любой момент можем проверить сколько осталось времени до удаления пользователя из группы, смотрим на значение TTL:

Get-ADGroup “Администраторы домена” -Property member –ShowMemberTimeToLive


По истечении двух минут пользователь alex будет удален из группы “Администраторы домена” автоматически. Надеюсь он успеет решить проблему за это время.

Успехов.

Saturday, 3 February 2024

Шпаргалка - Linux та домен AD.


Всім привіт.

Ще одна шпаргалка щодо введення сервера Linux в домен AD. Перед самим введенням сервер  Linux (Ubuntu) повинен відповідати наступним вимогам:

1) підтримка FQDN

2) підтримка NTP синхронізації

3) правильно підключені репозіторії

4) локальна облікова типу SuperAdmin з правами Sudo для адміністратора який буде виконувати безпосередньо введення хоста в AD.


Ок, далі виконуємо наш план по кроках.

1) Заміна імені хоста згідно вимог FQDN:

hostname 

sudo hostnamectl set-hostname newbuzzy.forza.com


2) Налаштування NTP синхронізації:

sudo timedatectl set-timezone Europe/Kiev

sudo sed -i "s/^#NTP=/NTP=sd01-ntp-forza.com sd02-ntp-forza.com/g" /etc/systemd/timesyncd.conf

sudo sed -i "s/^#FallbackNTP=ntp.ubuntu.com/FallbackNTP=192.168.10.9 192.168.10.8/g" /etc/systemd/timesyncd.conf

sudo systemctl restart systemd-timesyncd.service

timedatectl timesync-status

-АБО-

timedatectl status

timedatectl set-ntp on

Thursday, 24 August 2023

GPO and Item-level targeting.

Hi All,

as you know, Item-level targeting can use to target group policy preference settings based on application settings and properties of users and computers in granular level. We can use multiple targeting items in preference settings and make selections based on logical operators (AND, OR, IS, IS NOT).

Item-level targeting in group policy preferences can setup/manage using GPMC. To do that open the group policy settings > Go to relevant Preference settings > right click and select properties.

In my example I am using GPO created for IE 10 Settings, there for the path for it is User Configuration > Preferences > Internet Settings > Internet Explorer 10. Then right click and select properties. 

From properties window, then select Common tab > tick item-level targeting > then click on Targeting button. 


In next window, we can build granular level targeting based on one item or multiple items with logical operators. 


In above example I have built a query based on three setting which is NetBIOS name, Operating System and IP address. In order to apply the preference setting, all three statements should give TRUE value as result as I used AND logical operator. If its OR logical operator the result can have True or False values. 

In the window, New Item menu contained items we can use of targeting. Add Collections allows to create parenthetical grouping. Item Options menu is responsible for defining logical operators. 

As you remember, I early tried to do it by WMI Filters. However WMI filters don't have result by logical AND, so I will prefer to do it by Item-level targeting.

Good luck.

Tuesday, 30 May 2023

Права на книгу Excel під облікову користувача.

Всім привіт.

Нам відомо що листа або книгу Excel можу захистити паролем. Але мені стало цікаво чи можно надати окремі права на зміну до листа книги Excel саме обліковій певного користувача.  

Виявляється і таке можливо - але надати окремим користувачам дозвіл на редагування діапазонів на захищеному аркуші можна лише на комп’ютері, який входить до домену. Замість використання дозволів, які вимагають домену, також можна вказати пароль для діапазону.

Порядок дій трохи не тривіальний:

1. Виберіть аркуш, який потрібно захистити.

2. На вкладці Рецензування у групі Зміни натисніть кнопку Дозволити зміну діапазонів.


Ця команда доступна лише в тому разі, якщо аркуш не захищено.

3. Виконайте одну з таких дій:

- щоб додати новий діапазон із дозволом, який можна редагувати, натисніть кнопку Створити.

- щоб змінити наявний діапазон із дозволом на редагування, виберіть його в полі Діапазони захищеного листа, з яких захист знімається паролем, відтак натисніть кнопку Змінити.

- щоб видалити діапазон із дозволом на редагування, виберіть його в полі Діапазони захищеного листа, з яких захист знімається паролем, відтак натисніть кнопку Видалити.

4. У полі Назва введіть ім’я діапазону, який потрібно розблокувати.

5. У полі Клітинки введіть знак рівності (=) та посилання на діапазон, який потрібно розблокувати. Також можна натиснути кнопку Згорнути, виділити діапазон на аркуші, відтак натиснути кнопку Згорнути ще раз, щоб повернутися до діалогового вікна.


6. У разі захисту паролем введіть у полі Пароль діапазону пароль, який надає доступ до діапазону. Установлювати пароль необов’язково, якщо планується використовувати дозволи на доступ. Використання пароля дає змогу бачити облікові дані будь-якого авторизованого користувача, який редагує діапазон.

Saturday, 25 February 2023

Влияем на MS ATA через функцию отражения.

Всем привет.

Установка ведения журналов блоков сценариев доставляется в компьютеры Windows через настроенные в контроллере домена глобальные параметры: параметры объекта Групповой политики (GPO).

При каждом исполнении команды интерпретатором PowerShell ведение журналов блоков сценариев проверяет соответствующий объект Групповой политики в ключе реестра и принимает решение о регистрации этой команды или её игнорировании. 

Тем не менее, как обычно, дьявол кроется в деталях. Для повышения производительности соответствующая настройка ведения журналов блоков сценариев кэшируется в памяти, в частности, внутри переменной с именем cachedGroupPolicySettings.

Эта переменная, или чтобы быть более точным свойство определяется в загружаемом DLL System.Management.Automation внутреннем статическом классе Utils. 

Ведение журнала блоков сценариев включено когда cachedGroupPolicySettings установлено в определённое значение. Если оно не определено, ведение журналов блоков сценариев отключено - во всех его смыслах и проявлениях.

Можем ли мы считать это пространство памяти и обойти имеющиеся правила объектно- ориентированного программирования, которые гласят, что мы не можем получать доступ к закрытым переменным вне их классов? Да, и ещё раз: да! Более того, мы способны перекрыть это поле в памяти чтобы отключить ведение журнала для своего конкретного экземпляра PowerShell. В конце концов, любой загружаемый обычным процессом пользователя код DLL пребывает в пространстве пользователя, а переменные этой DLL обычно находятся в страницах памяти для чтения/записи. Поэтому мы можем отключать ведение журналов не обладая полномочиями администратора. Чтобы реализовать такой трюк вуду мы полагаемся на функцию, носящую название отражения (reflection).

В исполняемых файлах .NET отражение (reflection) позволяет фрагменту кода считывать код данного исполняемого кода извлекать методы и участников и изменять их во время выполнения. В основном это допустимо по причине того, что исполняемый файл .NET не содержит реального собственного машинного кода. Вместо этого он состоит из промежуточного кода с названием Microsoft Intermediate Language (MSIL, Промежуточного языка Microsoft), который компилятор транслирует из кода верхнего уровня, как правило C#. Во время исполнения код MSIL на лету компилируется в аппаратный код средой Windows Common Language Runtime (CLR, времени исполнения общего языка).

В то время как в обычном исполняемом файле все метаданные (имена функций, переменные, структуры и т. д.) заменяются абстрактными смещениями и сведениями о размере при компиляции, в формате MSIL эти метаданные сохраняются в сборке, что позволяет составить список функции любого заданного двоичного файла, вызывать их, создавать экземпляры объектов и т.д. По существу, это позволяет нам манипулировать внутренними компонентами двоичного файла во время выполнения. Именно это делает возможным отражение.

Wednesday, 1 February 2023

Профиль пользователя в AD.

Всем привет.

Есть много способов замапить внешний диск пользователю при его входе в ПК. Например с помощью login VB-скрипта, или команды net use, или GPO. 

Но есть более изящный способ. Можно указать его в профиле пользователя в AD, как показано ниже:


Это все на сегодня.)

Thursday, 5 January 2023

Управление NTFS правами в AD из PowerShell.


Всем привет.

Каждый файл и папка в файловой системе NTFS имеет список управления доступом (ACL). Список контроля доступа содержит набор записей управления доступом (ACE). Каждый ACE определяет разрешение на файл или папку для учетной записи. Например, глобальной группе Sales AD можно предоставить полный контроль над файлом. Разрешения также могут быть унаследованы от родительских папок. Если вы создадите новую папку, а затем создать файл в этой папке, новый файл наследует разрешения от родительской папки и из любой другой родительской папки по умолчанию. Вы можете управлять списком ACL, чтобы добавлять или удалять разрешения, и вы можете изменить наследование.

В PowerShell существует ограниченная поддержка  для управления разрешениями NTFS. PowerShell имеет командлеты Get-ACL и Set-ACL, но создание отдельных ACE и управление наследованием требует использования .NET Framework. Более рациональным подходом считается использование стороннего модуль NTFSSecurity, который позволяет управлять ACE и ACL, включая работу с наследованием.

В варианте ниже используется сервер SRV1, присоединенный к домену сервер общего назначения, работающий под управлением Windows Server 2019. Группа Sales должна существовать в Active Directory (AD), но если ее нет, то мы ее создадим. Для этого будем использовать учетную запись, которая является членом группы администраторов домена, и выполним инструкции из консоли PowerShell в режиме Администратора

1.  Инсталируем NTFSSecurity модуль с PowerShell Gallery:

Install-Module NTFSSecurity -Force

2.  Оценим список команд модуля:

Get-Command -Module NTFSSecurity


3.  Создадим папку и новый файл в ней:

New-Item -Path C:\Secure1 -ItemType Directory "Secure" | Out-File -FilePath C:\Secure1\Secure.Txt

Wednesday, 2 November 2022

Convert Windows Image.


Всем привет.

Есть на TechNet интересная утилита Convert-WindowsImage, умеющая преобразовывать установочные образы в файлы виртуальных жестких дисков. Convert-WindowsImage.ps1 - это скрипт PowerShell, который конвертирует установочный образ диска из формата WIM или ISO в формат Virtual Hard Disk. В результате работы скрипта из дистрибутива Windows получается готовый VHD с установленной операционной системой, который можно использовать для создания виртуальной машины или для загрузки обычного компьютера.

Развернутая таким способом ОС будет находиться в таком же состоянии, как после применения образа и первой перезагрузки в ходе обычной установки. Такой же эффект получается после обработки (Generalize) уже установленной системы утилитой Sysprep. То есть, после первой загрузки системы вам придётся пройти процедуру начальной настройки (Out Of Box Experience, OOBE).

Convert-WindowsImage является развитием другой утилиты - WIM2VHD, однако имеет несколько существенных отличий:

• утилита переписана на языке PowerShell (WIM2VHD использовала JScript);

• добавлена поддержка виртуальных жестких дисков формата VHDX;

• добавлена возможность работы с образами ISO;

• добавлен графический интерфейс (есть информация что GUI более не поддерживается).

Convert-WindowsImage имеет несколько предварительных требований к версиям операционной системы:

• утилита может быть запущена только на Windows Server 2012 и выше. 

• утилита может конвертировать установочные образы следующих операционных систем: Windows 10, Windows Server 2012 и выше. 

Примеры использования Convert-WindowsImage.

Для запуска Convert-WindowsImage необходимо скопировать файл Convert-WindowsImage.ps1 на компьютер и изменить политику выполнения скриптов на RemoteSigned.

Пример 1:

Создаем в папке E:\VHD виртуальный диск Win8.vhdx из образа установочного диска E:\ISO\Windows 8\windows8.iso. Задаем формат диска VHDX, тип динамический и размер 25Гб:

.\Convert-WindowsImage.ps1 -SourcePath E:\ISO\Windows 8\windows8.iso

-VHDPath E:\VHD\Win8.vhdx -VHDFormat VHDX -VHDType Dynamic -SizeBytes 25GB


Sunday, 4 September 2022

BGinfo и Powershell.

Всем привет.

BGInfo - это маленькая утилита входящая в состав всем известного пакета Sysinternals от Марка Русиновича. В ее задачи входит отображение на рабочем столе некой полезной системной информации. 

В качестве дополнительной опции она может черпать информацию из внутренних WMI-запросов и внешних VB-скриптов. Однако автор уилиты здесь незаслуженно обошел Powershell. Поэтому я сегодня вам покажу как это исправить. 

Логика моего решения проста - запустим Powershell из VBScript. В шаблоне BGInfo указываем вызов VB-скрипта, например файл 11.vbs, в котором и вызываем Powershell:


On Error Resume Next

Set objShell = CreateObject("Wscript.Shell")

Status = objShell.Exec("powershell.exe -ExecutionPolicy Bypass –Noprofile -Windowstyle Hidden -File test.ps1").StdOut.ReadAll()

Echo Status

Не забываем прочитать результат Powershell через ReadAll(), и передать его через эхо в саму BGInfo.

А вот скрипт Powershell test.ps1 должен возвращать максимально простой однострочный ответ, например такой:
$PSVersionTable.PSVersion.Major

Это все. Работает на ура. Кстати убирайте в Path все кроме имени вызываемого vbs-файла, так проще запускать утилиту с нового места, не надо будет каждый раз перестраивать шаблон.

Удачи.

Wednesday, 18 May 2022

Аудит объектов GPO.

Всем привет.

Согласно лучших практик в AD со временем появляются объекты GPO которые по тем или иным причинам не используются или задействованы частично. Причем при этом следует различать не задействованную политику в разделе Пользователя или Компьютера, незалинкованную политику и просто пустую политику. Все такие типы имеют место быть, но в целях безопасности лучше он них вовремя избавляться.

Поэтому самое время поискать у себя неполные GPO с помощью Powershell.

Ловим пустые GPOs в домене так:

Function Get-EmptyGPO {

Param (

[Parameter(Position=0,ValueFromPipeline=$True,

ValueFromPipelinebyPropertyName=$True)]

[string]$DisplayName

)

Begin {

Import-Module GroupPolicy

}

Process {

#create an XML report

[xml]$report=Get-GPOReport -Name $displayname -ReportType XML

 #totally empty

 if ((-Not $report.gpo.user.extensiondata) -AND (-not $report.gpo.computer.extensiondata)) {

    #no extension data so write

    Get-GPO -Name $Displayname

}

} #process

End {}

} #function

Saturday, 18 December 2021

Синхронизация времени в Active Directory.

Всем привет.

Синхронизация времени - важный и во многом достаточно критичный аспект работы Active Directory, особенно сегодня, когда широко используется взаимодействие с внешними системами и работа с сотрудниками, которые могут находиться в различных часовых поясах. Применение систем виртуализации вносит дополнительные особенности, которые также следует учитывать. Поэтому данный вопрос может оказаться не столь простым, как кажется, а синхронизация с внешним источником точного времени становится одной из актуальных задач.

Прежде всего вспомним, как происходит синхронизация времени в Active Directory. В качестве эталона времени выступает контроллер, владеющий ролью эмулятора PDC. Это FSMO-роль и эмулятором PDC может являться только один контроллер в каждом домене. С ним синхронизируют время остальные контроллеры домена. Доменные ПК и рядовые серверы сверяют часы с ближайшим контроллером домена.

Сам эмулятор PDC в качестве источника точного времени может использовать либо аппаратные часы материнской платы, либо внешний источник точного времени, при нахождении в виртуальной среде также может быть использовано время хоста виртуализации.

С приходом виртуализации все изменилось, появился еще один источник времени - время хоста виртуализации. Многие гипервизоры по умолчанию имеют включенной настройку синхронизации времени гостевых систем и при попадании в виртуальную среду контроллера может возникнуть следующая коллизия: контроллер синхронизирует время с хостом, но сам хост, являясь членом домена, в свою очередь синхронизируется с контроллером.


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

Sunday, 24 October 2021

PowerShell Security book #2.

Hi all.

Today I would like to present second part of my resume by e-book "PowerShell Security".

JEA.

I don't know if I need to describe JEA again. Ok, I will write about it very shortly today. So, by default, there are three Session Configurations on each Windows computer, namely: 

  • microsoft.powershell, 
  • microsoft.powershell.workflow,
  • microsoft.windows.server-managerworkflows.

1) Get-PSSessionConfiguration

Define "HelpDesk" configuration:

Register-PSSessionConfiguration -Name HelpDesk

This opens the dialog you already know from managing file permissions:

Register-PSSessionConfiguration -Name HelpDesk -ShowSecurityDescriptorUI

Defining RunsAs users:

Register-PSSessionConfiguration -Name HelpDesk -RunAsCredential forza.com\MikeLee

Set additional options via configuration file:

New-PSSessionConfigurationFile -Path .\MyConfig.pssc

The following are particularly useful to prevent users from potentially harmful actions:

-languageMode with the values FullLanguage, RestrictedLanguage, ConstrainedLanguage, NoLanguage: The latter allows only the exe-cution of cmdlets and functions, other language resources are not available. 

FullLanguage offers the full range of language capabilities, the other two lie between these two poles.

-VisibleAliases, VisibleCmdlets, VisibleFunctions, VisibleProviders: These allow you to specify which aliases, cmdlets, functions, and providers are available in the session. 

You can use wildcards and specify multiple values as array.

Example:

New-PSSessionConfigurationFile -Path .\MyConfig.pssc -VisibleCmdlets "Get*","Select*"

You adjust the Session Configuration based on this file:

Set-PSSessionConfiguration -Name HelpDesk -Path .\MyConfig.pssc

Enter-PSSession -ComputerName Remote-PC -ConfigurationName HelpDesk

-OR-

Invoke-Command -ComputerName Remote-PC -ConfigurationName Helpdesk {Get-ChildItem}

2) New-PSRoleCapabilityFile -Path MyRCF.psrc

-OR-

JEA Helper Tool create MyRCF.psrc

Once you have created the list of permitted cmdlets and parameters, you can add them to the .psrc file. You save this file in a directory called RoleCapabilities under

$env:ProgramFiles\WindowsPowerShell\Modules

The last step is to link the role capabilities to the desired session configu-ration. To do this, edit the configuration file with the extension .pssc and add the role functions there.

Since you create this file automatically at the beginning, this (commented out) section for RoleDefinitions should already be there:

RoleDefinitions = @{ 'CONTOSO\SqlAdmins' = ` @{ RoleCapabilities = 'SqlAdministration' }; 

'CONTOSO\SqlManaged' = @{ RoleCapabilityFiles = 'C:\RoleCapability\SqlManaged.psrc' }; 

'CONTOSO\ServerMonitors' = ` @{ VisibleCmdlets = 'Get-Process' } }

Sunday, 26 September 2021

Advanced Group Policy Management.

Всем привет.

Advanced Group Policy Management, расширенное управление политиками групп, это классический инструмент, использующийся для контроля и защиты GPO (Group Policy). На многих предприятиях GPO контролируют чуть ли не каждый аспект и область в сетевом окружении, так что надежности в их отношении мало не бывает!

AGPM входит в специальный пакет MDOP (Microsoft Desktop Optimization Pack) - получить его можно при активной подписке MS, MSDN или Software Assurance.

По сравнению с классическим управлением групповой политикой здесь предлагаются следующие возможности:

  • версионирование: если вы обдумывали, как прикрутить к групповым политикам SVN или Git, то AGPM этот вопрос решает.
  • делегирование и премодерация: можно разрешить создание GPO отдельным сотрудникам, но без права применения. Применять может, к примеру, старший администратор после проверки.
  • аудит: отчеты и мониторинг помогут при разборах полетов на тему «Кто забыл повесить фильтр безопасности на установку 1С?».

Русификация AGPM наводит печаль. Локализованную версию можно и не ставить, я выбрал два языка о чем после сильно пожалел. Так что выбирайте только Английский!

Установка и использование AGPM.

AGPM сервер - для работы AGPM нужно будет установить службу на сервер, где будет лежать архив групповой политики. По-хорошему архив должен лежать на надежном хранилище с регулярным резервным копированием. При установке также запрашиваются учетные данные для работы службы и учетная запись, которой выдаются полные права. Вопрос "а если у этой учетки изменится пароль" для меня остается открытым.

В идеале надо настроить разрешение на работу с GPO только для этой учетной записи. Но это не обязательно, если приучить людей с административными правами не трогать групповые политики в обход AGPM. В качестве учетной записи для работы службы неплохим вариантом станет настройка MSA (Managed Service Accounts). Ознакомиться с принципами работы этого механизма можно в разделе Group Managed Service Accounts. А посмотреть пошаговый пример по настройке связки MSA и AGPM в статье Running AGPM with a Managed Service Account. Powershell рулит!

Сам сервер может быть любым, устанавливать на контроллер домена в принципе можно, это уже дело вкуса.

AGPM клиент - клиента также можно установить на любой машине, где сможет запуститься оснастка «Управление групповой политикой». Разумеется, она должна иметь доступ к AGPM-серверу по порту TCP (по умолчанию 4600). Работа с AGPM производится через вышеупомянутую оснастку, в пункте «Изменение управления».

Wednesday, 11 August 2021

Запрос версии Windows из домена.

Всем привет.

В связи с модой на обновления не только ОС, но и самих ядер Windows понадобилась выборка реальной ситуации по всем рабочим станциям в домене. Тут имеет смысл делать выборку значения атрибута OperatingSystemVersion. Это номер сборки ОС. Ему в соответствие надо поставить номер версии ОС, так как это делает команда winver.


Поэтому возможные пары значений сборка+версия предварительно заносим в отдельный файлик Cores.csv, и далее пишем скрипт запроса в Powershell:

$cores = Import-CSV -Encoding UTF8 -path "d:\ps\Cores.csv" -Delimiter ";" 

#Type of output file: CSV or TXT

$TypeOfFile = 'txt'


foreach($core in $cores){

$core.name

$corename = '*(' + $core.Name + ')'

if ($typeoffile -eq 'csv'){

  $filename = 'd:\'+ $core.CoreV +'.csv'  

  }

  else { $filename = 'd:\Cores.txt'  

         "Version of core: "+$core.coreV | Out-File $filename -Append -Force -Encoding UTF8

       }

 $str1 = Get-ADComputer -filter {(OperatingSystemVersion -like $corename) -and (Enabled -eq 'True') -and (OperatingSystem -notlike '*Server*')} -properties CanonicalName,Description | Select Name,CanonicalName,Description 

if ($str1) {$str1 | Out-File $filename -Append -Force -Encoding UTF8} else {"No hosts." | Out-File $filename -Append -Force -Encoding UTF8}

Где файл Cores.csv имеет следующее содержание:

Name;CoreV;

19043;21H1;

19042;20H2;

19041;2004;

18363;1909;

18362;1903;

17763;1809;

17134;1803;

16299;1709;

15063;1703;

14393;1607;

10568;1511

Успехов.

Версия на печать

Популярное