narga: (Default)
Понадобилось заменить иконку для remotapp на терминальной ферме. Чтобы опубликованное в web access приложение подмигивало красивой картиночкой.

set-RDRemoteApp -CollectionName collectionname.domain.local -ConnectionBroker brokername.domain.local -Alias remoteappname -iconpath "C:\file.ico"

А почему это нельзя сделать, отредактировав опубликованное приложение из гуя я хз. В гуе можно увидеть только current icon. Собственно, поменять program location тоже только из powershell.
narga: (Default)
Конвертация vhdx в vhd:

Convert-VHD –Path "C:\folder\file.vhdx" –DestinationPath "C:\folder\newfile.vhd"
narga: (Default)
Сегодня уже начала думать, что схожу с ума.

Дано:
Делаю терминальную ферму на базе сервера 2012. Цепляю к ней отдельно стоящий сервер лицензирования.
А именно - Server Manager => Remote desktop Services => Deployment overview => tasks => edit deployment properties => Rd licensing => add.
Добавляю нужный сервер. Сервер добавился, сервер говорит "аз есмь", лицензии с него не подхватываются, по-прежнему читаю про 160 дней.
Гуглю, плюю, добавляю через gpo (как в принципе и хотела). Ура, заработало.
Окей. Проходит минут десять - при попытке зайти в управление DRS я получаю там информацию о том, что мой сервер лицензий необходимо добавить в группу серверов. Да не вопрос, добавляю.
Ещё через десять минут получаю ошибку:
The server pool does not match the RD Connection Brokers that are in it. Errors:
The server pool contains RD connection Broker servers that are both clustered and not clustered.

Выглядит так:



В логах отлуп:
Error ID 103 Critical Microsoft-Windows-TerminalServices-Gateway Microsoft-Windows-TerminalServices-Gateway/Operational

Гуглю, во всея интернете есть только один результат - на технете, но свершенно не то.
Удивлясь.

Лезу на сервер лицензирования. Внезапно выясняю что там мало того что есть полная остастка RDS,  так ещё он, сервер лицензий, уверяет, что все мои терминальные клиенты сидят на нём. Более того - RD web acess на нём, RD session host на нём, RD connection broker на нём!
Охреневаю.
Понимаю, что когда сервер лицензий делал мой коллега, он на кой-то черт воткнул на него все роли, которые были. В итоге теперь моя ферма радостно живёт на сервере лицензий, а все собственные хосты и брокеры знать не хочет.
Гуй RDS на ферме я получить не могу. Захожу как белый человек powershell-ом. Мне говорят - хер, мы не знаем такого брокера.

Иду на сервер лицензий, сношу оттуда нахрен лишние роли. Алилуйя! Ферма радостно заводится и говорит, что знает всех поимённо, дружит с сервером лицензий и вообще у неё всё хорошо.

MSA & GMSA

Dec. 5th, 2013 12:47 pm
narga: (Default)
Использование MSA - Managed Service Account (управляемая учетная запись) - позволит настроить запуск некоторых служб от имени аккаунта с автоматической генерацией паролей, регулярной сменой и отсутствием дополнительных прав.
GMSA позволяет использовать msa на нескольких серверах.
Сервера 2008r2 и выше, сервисы - IIS, Exchange 10 и выше, SQL 2008 и выше, уровень леса 2008r2
Перед работой Import-Module ActiveDirectory.

Создание msa

New-ADServiceAccount name (по дефолту + нужные команды вроде установки SPN)
-AccountPassword - задать пароль, если вдруг надо, -DisplayName - отображаемое имя, -ServicePrincipalNames понятно.

Привязать к целевому серверу

Add-ADComputerServiceAccount -Identity servername -ServiceAccount msaname

Установить на целевой сервер:

Install-ADServiceAccount msaname

Периодически при инсталле будет отлуп:

Install-ADServiceAccount : Cannot install service account. Error Message: 'An unspecified error has occurred'.
At line:1 char:1

Как выяснилось, связано с репликацией между контроллерами. После того, как репликация пройдет, инсталл произойдет успешно.

GMSA создаётся так:
Для начала KDS новый ключ:
Add-KdsRootKey -EffectiveImmediately

New-ADServiceAccount gmsaname
 -DNSHostName - хост с KDS
-PrincipalsAllowedToRetrieveManagedPassword - какие компьютеры смогут получить доступ к записи.
То есть: New-ADServiceAccount gmsaname -DNSHostName keyhostname -PrincipalsAllowedToRetrieveManagedPassword servername$
Дальше инсталл на целевых серверахх как с msa

Удаление: Remove-ADServiceAccount msaname

Запуск пула IIS от имени msa: диспетчер IIS => app pools => your pool => advansed settings => proccess model => identity => custom account => set => user name - msa без пароля => ok => ok.

Ну и по мелочи на тему spn:

Посмотреть:

Get-ADServiceAccount msaname -Properties serviceprincipalname

Удалить:
Set-ADServiceAccount msaname -ServicePrincipalNames @{remove="spn"}

Добавить:
Set-ADServiceAccount msaname -ServicePrincipalNames @{add="spn"}
narga: (Default)
Люди используют закрытую американскую ось, которая активно обновляется с американских серверов. Люди используют американские протоколы, американское железо, сидят сети, разработанной американскими военными. Они не написали ни единой строки собственного кода. А если бы и написали, язык бы был американский. Почта у них на гугле, активно используется skydrive.
А потом они говорят, что облака это плохо и "у нас смогут получить любую информацию".
Где логика??

Povershell - баш для винды, удивительно удобная штука, с помощью которой можно всё.
Сервер в core-режиме, powershell, выведенные остастки.
Минимум требований к ресурсам, максимум функциональности.
Сервер менеджер не более чем графический обвес к командлетам.
Часть опций в принципе невозможно сделать через гуй, только ps.
Это не бага, это фича, об этом говорится прямо. По дефолту 12-й сервер устанавливается в core. Гуй можно поставить потом.
Идёт отказ от громоздких остасток mmc.
Exchange 2013 управляется через shell, гуй через EAC по https, функционал очень ограничен.
На всех курсах по 12-му серверу больше половины материала преподаётся в виде "работаем с shell". Если ты не умеешь работать с powershell, ты просто не сдашь экзамен.
Программное обеспечение становится всё более и более тонким и управляемым, настроить можно практически всё и как ни крути, а засунуть в гуй тысячи командлетов просто нереально.
Учим powershell, блять!!11

Принцип элементарный - хочешь быть админом, учись работать с консолью. Хочешь красивых остасток - тебе хватит роли оператора, на что-то большее зови аутсорс.
Но нет!
"Нас насильно загоняют в облака, у нас смогут получить любую информацию".

Где логика? Всё, что можно получить - будет получено. Тем более в России, которая отстала в плане it лет на двадцать, если не больше.
Продажи Microsoft в России на уровне Австралии. Мы ни в приоритете, извините.
У каждой третьей компании дефолтный пароль админа это стандартный пароль MS - Pa$$w0rd. Бэкапы - нет, не слышали. Экономия на железе, на софте, включая антивирусное по.
В госконторах нередко экономят на кондиционерах в серверной, при этом ежегодно покупают новые плазменные панели. У каждого пользователя админские права. Знаю пару контор, где все пользователи - администраторы домена.
Это уже экономия на кадрах.
Серьёзный аудит на информационную безопасность вряд ли пройдет даже каждая двадцатая российская компания. Даже каждая сотая.

Но опасносте! Нас насильно загоняют в облака! Ай-ай-ай!
narga: (Default)
Задача следующее - есть домен domain1.ru. Части пользователей в качестве smtp-alias добавлены e-mail в домене domain2.com. Необходимо сформировать список всех e-mail в домене domain2.com.

Get-Mailbox -resultsize unlimited | Select-Object emailaddresses| Where-Object {$_.smtpaddress -like "*domain2.com*"}| Select-Object displayName,SmtpAddress | Export-csv C:\domain2.csv
narga: (Default)
До 2008-го сервера включительно понятия корзина для AD не существовало.
В 2008 r2 корзина появилась. В 2012 корзина стала графической. Может быть именно из-за её позднего появления некоторые о ней не слышали вообще.
В корзину падают удалённые объекты со всеми атрибутами. Почитать про корзину можно на технете. Почитать про восстановление удалённого пользователя можно у меня.

По дефолту корзина отключена. Проверить, включена ли она или нет можно следующим образом:

1. Запускаем powershell.
2. Get-ADOptionalFeature 'Recycle Bin Feature'
3. Если корзина отключена, в EnabledScopes у нас будет пусто: {}. Соответственно, если включена, там будут обозначены границы.

Включить корзину можно так:

1. Запускаем powershell.
2. Enable-ADOptionalFeature 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target 'DOMAIN.LOCAL'

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

Ещё одни грабли. Если у нас имеется субдомен, то при попытке провести ту же операцию с обозначением -Target 'SUB.DOMAIN.LOCAL' мы получим сообщение вроде:
Enable-ADOptionalFeature : A referral was returned from the server
At line:1 char:25
+ Enable-ADOptionalFeature <<<<  'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target 'SUB.DOMAIN.LOCAL'
    + CategoryInfo          : NotSpecified: (Recycle Bin Feature:ADOptionalFeature) [Enable-ADOptionalFeature], ADException
    + FullyQualifiedErrorId : A referral was returned from the server,Microsoft.ActiveDirectory.Management.Commands.EnableADOptionalFeature

Если проверить, включена ли корзина, в скопах будет пусто. Однако если вы включили корзину в верхнем домене, она будет работать и в субдоменах.
narga: (Default)
Если долго всматриваться в чужой код, код может начать всматриваться в тебя. В моём случае это c++, написанный через visual studio, с целыми двумя комментариями. Алгоритм простой - идём в AD за данными пользователей, формируем адресную книжку. Ну и дальше IIS это дело публикует.
А пока код для меня выглядит страшно, нужно хоть что-то в плане справочника. Сделаем его на HTML.
Тут на помощь приходит powershell. Возрадуемся, господа, ибо он поддерживает css.

В качестве css для создания приятной для глаз таблички используем что-то вроде этого:

$a = "<style>"
$a = $a + "BODY{background-color:white;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;padding-top: 10px;padding-bottom: 10px;border-style: solid;border-color: black;background-color:silver}"
$a = $a + "TD{border-width: 1px;padding: 0px;padding-bottom: 5px;padding-left: 15px;padding-top: 5px;border-style: solid;border-color: black;background-color:white}"
$a = $a + "</style>"

В шапку скрипта кладём логичное:  Import-Module ActiveDirectory

Теперь основная часть, используем get-aduser. В качестве searchbase берём нужный OU, в качестве -Properties - перечень сведений, которые хотим поместить в таблицу.

$user = Get-ADUser -SearchBase "OU=DOMAIN,DC=LOCAL" -Properties DisplayName,Title,mail,telephoneNumber,physicalDeliveryOfficeName

Если необходимо убрать из списка отключенных пользователей, используем фильтр. А именно - после get-aduser пишем  -Filter {enabled -eq $true}

Если необходимо сделать выборку по пользователям определённой группы данного OU, тоже используем фильтр со значением  -Filter {memberof -like "CN=GROUP,OU=DOMAIN,DC=LOCAL"}

Если наоборот надо исключить пользователей конкретной группы, то же самое, только со значением -nolike

Если надо установить одновременно два фильтра, делаем это по принципу -Filter {(FILTER1) -and (FILTER2)}

Теперь сам вывод.

$user | Select-Object  -Property DisplayName,Title,mail,telephoneNumber,physicalDeliveryOfficeName | ConvertTo-Html  -head $a | Out-File C:\address\file.html

Если хотим измения названия столбцов, перед ConvertTo-Html определяем выводимые имена по принципу @{Name="новое имя", ;Expression={$_."Имя атрибута"}}

Итого в нашем примере это будет выглядеть как:

| Select @{Name="ИМЯ1";Expression={$_."DisplayName"}}, @{Name="ИМЯ2";Expression={$_."Title"}}, @{Name="E-mail";Expression={$_."mail"}}, @{Name="ИМЯ3";Expression={$_."telephoneNumber"}}, @{Name="ИМЯ4";Expression={$_."physicalDeliveryOfficeName"}}

Наслаждайтесь:)

Profile

narga: (Default)
narga

January 2025

S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930 31 

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 11th, 2026 04:58 am
Powered by Dreamwidth Studios