Удаление ярлыка с рабочего стола через GPO средствами Powershell

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

Перед тем, как настраивать GPO для запуска powershell-скрипта на компьютерах необходимо средствами групповых политик разрешить запуск PS-скриптов. По-умолчанию, на компьютере запрещен их запуск. Поэтому заходим в дефолтную GPO для домена в User Configuration — Policies — Administrative Templates — Windows Components — Windows PowerShell. Находим там политику «Turn on Script Execution«, включаем её и переводим в режим работы «Allow local scripts and remote signed scripts«.

Теперь можно настраивать политику, которая будет запускать PS-скрипт при входе пользователя в систему. Для этого заходим в созданную для этого политику в раздел User Configuration — Policies  — Windows Settings — Scripts — Logon. Выбираем вкладку «PowerShell Scripts» и нажимаем кнопку «Add». Далее нажимаем кнопку «Browse» и в открывшееся окно проводника копируем файл с powershell-скриптом. После этого выбираем этот файл и нажимаем «Open» в этом же окне и «OK» в предыдущем. Таким образом политика настроена.

А вот текст самого скрипта. Сохраняем его под расширением PS1 у себя на компе.

$DeleteItem = "Кодекс-клиент.lnk"
$Date = Get-Date
$ComputerName = $Env:Computername
$UserName = $Env:UserName
$DesktopPath = [Environment]::GetFolderPath("Desktop")
$ShortcutFiles = Get-ChildItem -Path $DesktopPath -Recurse -Include *.lnk
Write-Host "Всего найдено ярлыков:" $ShortcutFiles.Count -ForegroundColor Green
$Changed = 0
ForEach ($Shortcut in $ShortcutFiles) {
IF ($Shortcut -match $DeleteItem ) {
Remove-Item $Shortcut
$Changed ++
}
}
Write-Host "Удалено ярлыков:" $Changed -ForegroundColor Green
echo $Date $UserName "Всего найдено ярлыков:" $ShortcutFiles.Count "Удалено ярлыков:" $Changed >> \\DC-01\C$\Logs_remove_shortcut\$ComputerName.log

В последней строке скрипта я сохраняю логи исполнения данного скрипта на компьютерах пользователя. У меня они сохраняются в скрытую папку на контроллере домена, у вас она будет другой, поэтому поменяйте путь до вашей папки.

Этот же скрипт может быть взят за основу для удаления любого файла из любой директории.

Как узнать версию Exchange по дистрибутиву

У меня возникла задача установить Exchange-сервер 2016, в наличии есть какой-то древний ISO-файл. Как по нему определить какая версия Exchange в нем находится? Запускаем файл .exe внутри ISO и распаковываем дистрибутив сервера, далее заходим в директорию .\setup\serverroles\common и находим там файл version.txt, в нем и будет написано версия. В моем случае там было написано: «Version 15.01 (Build 0225.042)». Воспользовавшись поиском, узнаем, что данная версия является RTM.

Сбор статистики с принт-сервера на Windows.


В данный момент у меня есть сервер, к которому подключено более 400 принтеров и мне захотелось узнать сколько страниц ежедневно распечатывается. К сожалению, в сети большинстве своем есть только платные программы для сбора множества информации по серверу печати, поэтому решил для себя написать небольшой powershell-скрипт.

$date = get-date -format dd-MM-yyyy
$number = get-counter "\Очередь печати(_total)\Всего напечатано страниц" | Foreach-Object {$_.CounterSamples[0].CookedValue}
Convertto-html -title "Статистика печати" -PreContent "Количество распечатанных листов за $date : <b>$number</b>" >> C:\counter_print_pages.html

Всё, что он делает — это создает html файл в корне диска C:, в котором записывается информация из счетчика очереди печати со всех принтеров.

Чтобы этот скрипт выполнялся каждый день и заносил каждый раз новую информацию, нужно в «Планировщике задач» создать расписание, где в 23:59 будет выполняться данный выше кусок кода. Далее, чтобы статистика за день обнулилась, а также для того, чтобы на сервере печати очищались от заданий очереди на печать, в «Планировщик задач» добавить на выполнение в 0:00 еще один скрипт:

net stop "spooler"
del /S /Q c:\windows\system32\Spool\Printers\*
net start "spooler"

Таким образом файл со статистикой печати будет ежедневно пополняться актуальной информацией о количестве распечатанных страниц.

Настройка аудита запуска/остановки службы в Windows

Столкнулся с такой задачей: требовалось знать кто остановил критически важную службу на Windows-сервере. Как оказалось аудит этого события настраивается немного по-другому, в отличии, например, от файлового сервера. Что для этого требуется:

1) для начала скажу, что нельзя настроить аудит сразу всех служб — нужно выбрать конкретные службы для их аудита. Узнаем короткое имя службы, например, через команду PS get-service и в столбце «Name» оно будет отображено

2) в cmd выполняем команду sc sdshow [короткое имя службы]. Выведется строка примерно такого вида D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU). Скопируйте ее в блокнот и в конце добавьте строку S:(AU;SAFA;RPWPDT;;;WD). Буква «D» в начале строки означает начало списка доступа DACL, а буква «S» — список доступа SACL, который используется при логировании. Если выводимая строка в команде «sc sdshow» уже будет содержать SACL, то удаляем ее и добавляем ту, которая указана выше.

3) выполняем в cmd команду sc sdset [короткое имя службы][получившаяся новая строка]. После этого должна появиться строка [SC] SetServiceObjectSecurity: успех


4) командой auditpol /get /category:* проверяем какой аудит включен в системе. Нам необходимо, чтобы был включен аудит для подкатегорий «Другие события доступа к объекту» и «Работа с дескриптором». В английской Windows они соответственно называются «Other Object Access Events» и  «Handle Manipulation». Если аудит не настроен, то делаем это через групповые политики, если компьютер в домене или через команды auditpol /set /subcategory:"Другие события доступа к объекту" /success:enable /failure:disable и  auditpol /set /subcategory:"Работа с дескриптором" /success:enable /failure:disable, если компьютер не в домене.

5) фильтруем журнал безопасности Windows по коду события «4656» и можем видеть событие в журнале


Аудит настроен.

 

Изменения Storage Replica в Windows Server 2019

В Windows Server 2019 Build 17650 стали доступны улучшения в работе Storage Replica:
1) Storage Replica теперь доступна в редакции Standard, но с ограничениями:
— можно реплицировать только один том (в Datacenter редакции ограничений нет)
— том можно реплицировать только одному партнеру (в Datacenter можно создавать неограниченное число партнеров по репликации)
— том, который подвергается репликации, должен быть размером не более 2 Tb (в старшей редакции такого ограничения нет)
2) В Storage Replica теперь доступен режим «Test Failover». При его включении на партнере по репликации становится доступным на запись реплицированный том. В этот момент  репликация прекращается до момента, пока мы не выйдем из режима «Test-Failover». Все изменения на временно подключенном томе сохраняются, но как только прекращается «Test-Failover», изменения откатываются на время последнего снапшота на сервере-источнике.

Инструкция по копированию GAL в GAL другого домена на сервере Kerio Connect

Дано: имеется 2 домена на одном сервере Kerio Connect. Нужно, чтобы контакты были едины, при условии, что общедоступные папки для каждого из доменов свои.

  1. В каждом из доменов должен быть пользователь с правами на администрирование Общедоступных папок, пусть это будет пользователь admin.
  2. Заходим в почтовый ящик admin@<ваш_домен> в первом домене и очищаем папку «Мои контакты». Тоже самое делаем и у admin@<ваш_домен_2>
  3. Подключаемся по SSH к серверу Kerio Connect . Поднимаем права через su —
  4. Заходим в директорию /opt/Kerio/mailserver/store/mail/<ваш_домен>/#public/Contacts/#msgs — здесь находятся контакты домена <ваш_домен> (GAL). Копируем их в директорию /opt/Kerio/mailserver/store/mail/<ваш_домен_2>/admin/Contacts/#msgs – если предварительно мы очистили личные контакты, то она должна быть пустая.
  5. Через панель администрирования у почтового ящика admin@<ваш_домен_2> запускаем переиндексацию почтового ящика. Чтобы она быстрее закончилась, почтовый ящик должен содержать как можно меньше писем
  6. После окончания индексации, GAL домена <ваш_домен> будет отображаться как «Мои контакты» в почтовом ящике admin@<ваш_домен-2> Теперь их можно перенести в общедоступные папки в раздел «Контакты»
  7. Повторяем процедуру, но для GAL домена <ваш_домен-2> с копированием его в почтовый ящик admin@<ваш_домен>
  8. Повторяем эти процедуры при любых изменениях GAL

Изменения в настройке папки-свидетеля в Windows Server 2019

Начиная с Windows Server 2019 общую папку-свидетель (File Share Witness) для работы кластера больше нельзя создать на DFS ресурсе. При попытке создать такого свидетеля появится сообщение об ошибке:

То же самое будет, если создавать папку через Powershell:
Set-ClusterQuorum : There was an error configuring the file share witness ‘\\contoso.com\dfs-share’.
Unable to save property changes for ‘File Share Witness’.
The request is not supported

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

Хорошая новость:  теперь папку-свидетель можно создать на компьютере, не включенном в домен. Теперь можно подключить папку-свидетель так:

Set-ClusterQuorum -FileShareWitness \\SERVER\SHARE -Credential $(Get-Credential)
и ввести после этого локальную учетную запись — это сработает!

Kerio Connect 9.2 Резервное копирование

В процессе эксплуатация почтового сервера Kerio выяснилось, что резервные копии, который он делает своими скриптами (настроенными из графического интерфейса), хранятся вечно и их нужно самим периодически очищать. То есть получается параметр «число сохраняемых резервных копий» не работает.

Я позвонил в службу поддержки и мне подтвердили, что этот функционал не работает как надо. Не стал уточнять на каких платформах не работает, у меня же почтовый сервер настроен на Debian 8.9 x64. Они посоветовали добавить в Cron скрипт по очистке дискового пространства от старых резервных копий. И вот что получилось:

В файле /etc/crontab добавляем строчку, где добавляется ежедневный запуск скрипта, который ищет в директории с резервными копиями файлы старше 40 дней и удаляет их.

Ошибка принтера Xerox: 07-500 Bypass Tray is empty.

Подключаю несколько принтеров Xerox к принт-серверу, у которых в статусе горят ошибки: «07-500 Bypass Tray is empty», пытался их устранить — обновлял прошивки, менял настройки, но ничего не помогало — состояние очереди к этому принтеру на сервере было «Отключен». Помогла информация из сети интернет — нужно зайти в свойства принтера во вкладку «Порты», выбрать настроенный порт и нажать «Настроить порт» и снять галочку с пункта «Состояние SNMP разрешено»

После этого состояние очереди принтера перешла в статус «Готов» и принтер запечатал.

Video Socket Error: Abnormal Termination

Такая ошибка у меня появилась при подключении к новому серверу через Java-апплет в iKVM ASMB8.

Решение этой проблемы оказывается простое, нужно в iKVM зайти в раздел Configuration — Remote Session. И выставить настройки в соответствии со скриншотом ниже:В моем случае нужно было выставить параметры «Media Encryption» и «KVM Encryption» в Enable.