Как запустить скрипт PowerShell на удаленном компьютере через SCCM
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами восстановили правильное кириллическое название у отображения службы. Идем далее и сегодня я хочу вам показать, как вы можете запустить скрипт PowerShell на удаленном компьютере с помощью агента System Center Configuration Manager. Постараюсь вам привести несколько примеров из практики, когда это может быть полезным, да и в целом очень полезно знать, о наличии такого функционала.
Пример, когда требуется уметь запускать PowerShell скрипт с помощью SCCM
System Center Configuration Manager - это огромный комбайн с помощью которого вы можете выполнять с системами на базе Windows и Windows сервер все что угодно. Я слабо себе представляю крупные компании у которых бы его не было. Например, благодаря ему можно легко управлять автоматической установкой обновлений Windows по расписанию и самое главное иметь возможность, на 100% запретить перезагрузку сервера на нужное время, так как в Windows Server 2019 и выше, этого сделать с помощью групповой политики уже нельзя.
Рабочий пример, появилась задача по отключению NTLM v1 во всем Active Directory. Была для этого создана групповая политика, но на некоторых рабочих станциях GPO не отработала, я показывал как искать причину и исправлять ее. Но пока идет разбирательство можно применить нужные настройки правкой реестра Windows через PowerShell. Самый правильный метод для массового выполнения, это использовать функционал System Center Configuration Manager. Давайте поэтапно пройдем этот путь.
Создание и настройка скрипта в System Center Configuration Manager
- 1️⃣Первым делом вам нужно подготовить сам PowerShell скрипт и сохранить его для импортирования на определенном шаге в SCCM. В качестве моего рабочего примера я буду выполнять вот такой скрипт:
# Задаем путь к ключу реестра
$registryPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
# Задаем имя и значение ключа
$registryName = "lmcompatibilitylevel"
$registryValue = 5
# Проверяем наличие ключа в реестре
if (Test-Path $registryPath) {
# Если ключ уже существует, удаляем его
Remove-ItemProperty -Path $registryPath -Name $registryName -ErrorAction SilentlyContinue
}
# Создаем новый ключ с заданным значением
New-ItemProperty -Path $registryPath -Name $registryName -Value $registryValue -PropertyType DWORD -Force
Сохраним его в виде ps1 файла на сервере SCCM.
- 2️⃣Вторым шагом нам нужно импортировать данный скрипт в репозиторий SCCM. Для этого подключаемся к серверу используя клиента System Center Configuration Manager. Переходим в раздел "Software Library - Scripts".
Щелкаем там правым кликом и выбираем пункт "Create Scripts".
Тут обязательно нужно заполнить поля:
- Script name - Я укажу в качестве имени Disable_NTLMv1. Старайтесь задавать понятные для себя имена
- Script Description - Описание, оно не обязательно, но старайтесь его заполнять, например указать номер заявки или детали
- Script language - PowerShell
- Script timiout seconds - Я задаю 60 секунд
Далее можно вставить в пустое поле текст самого скрипта PowerShell, но мне проще его импортировать, чтобы ничего лишнего не скопировать или не повредить текст при копировании. Нажмите кнопку "Import".
Указываем на ваш заранее созданный файл ps1.
Обратите внимание, что его содержимое прописалось в поле "Scripts". Нажимаем кнопку "Next".
Далее нажимаем кнопку "Next".
Дожидаемся, когда мастер импорта подтвердит, что все успешно выполнено.
- 3️⃣Следующим шагом вам нужно подтвердить, что данный скрипт валидный и вы готовы его добавить для использования. Об этом говорит состояние "Approved". Нажмите кнопку "Approved/Deny".
Выбираем пункт "Approve" и нажимаем "Next".
Еще раз "Next".
Завершаем в мастере подтверждение скрипта.
Видим, что статус у скрипта стал "Approved".
Запуск скрипта из SCCM
Теперь остается применить наш скрипт. Для этого идем в раздел "Assets and Compliance - Devices". Находим нужный компьютер или компьютеры, кликаем по ним правой кнопкой мыши и выбираем пункт "Run Scripts".
Выбираем нужный крипт из списка и нажимаем "Next".
Нажимаем кнопку "Next".
Будет создано задание на удаленное применение скрипта PowerShell.
Об успешности выполнения скрипта будет говорить статус "1" и "Exit code 0".
На этом можно считать, что скрипт успешно применен. Теперь я думаю вы легко будите раскатывать необходимые скрипты на нужные группы серверов или рабочих станций. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.