Выполнение сценариев с обратной связью с помощью System Center 2012 Configuration Manager

imageВ предыдущей заметке был рассмотрен принцип простого выполнения сценариев, но что, если выполняемый скрипт должен возвращать некие значения, которые для нас важны? Попробуем немного усложнить задачу с выполнением скриптов через клиентов System Center 2012 Configuration Manager (SCCM).

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

# $NewString - Строка адреса подключения которую хотим установить
# $OldString - Массив вариантов старых значений строк адреса подключения, которые хотим заменить на $NewString
#
$NewString = "full address:s:KOM-AD01-RDSNLB.HOLDING.COM"
$OldStrings = @( `
"full address:s:KOM-AD01-TS02.HOLDING.COM", `
"full address:s:KOM-AD01-RDSCB.HOLDING.COM", `
"full address:s:KOM-AD01-TS02", `
"full address:s:KOM-AD01-SRV-RDSH", `
"full address:s:10.160.0.140"
)
#
$DesktopPath = [Environment]::GetFolderPath("Desktop")
$RDPFiles = Get-ChildItem -Path $DesktopPath -Recurse -Include *.RDP
$Changed = 0
ForEach ($RDPFile in $RDPFiles) {
   
    $FileChanged = 0
    $LinesArray = Get-Content $RDPFile
    $LinesCount = $LinesArray.Count
    For($i=0; $i -lt $LinesCount; $i++){
          
        ForEach ($OldString in $OldStrings) {
                       
            If ($LinesArray[$i] -like $OldString) {
                  
                $LinesArray[$i] = $LinesArray[$i] -replace $OldString, $NewString
                Write-Host "Change File:" $RDPFile.FullName "`nline" $i "had a value of:"$OldString ", set new value:" $LinesArray[$i] "`n"
                $FileChanged = 1

            }

        }

    }
    If ($FileChanged -eq 1) {
        $LinesArray > $RDPFile
        $Changed = $Changed + 1
    }

}

If ($Changed -eq 0) {
Write-Host "There was no change"
} Else {
Write-Host "Found RDP-files:" $RDPFiles.Count
Write-Host "Change RDP-files:" $Changed
}

На этот раз мы не будет использовать какие-либо сетевые расположения для хранения скрипта, всё будет хранится непосредственно в SCCM.

Открываем консоль SCCM и переходим на панель Активы и соответствие (Assets and Compliance) в раздел параметров соответствия (Compliance Settings) и вызовем создание нового элемента конфигурации (Configuration Items). Присвоим имя элементу конфигурации, тип элемента оставим по умолчанию, потому как исполнятся он должен на ОС Windows.

image

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

image

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

image

Пришло время добавить наш сценарий в параметр, жмём на “Добавить сценарий”, перед нами вновь появляется новое окно, куда мы просто копируем скрипт.

image

Язык сценария по умолчанию PowerShell, но так же доступны JScript и VBScript.

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

После того как скрипт добавлен, появляется возможность перейти на вкладку “Правила соответствия”. Присвоим правилу соответствия имя, выберем тип “Значение” и укажем параметр соответствия.

image

В правиле укажем следующий смысл – компьютер соответствует требованиям, если возвращаемая строка скриптом равна “There was no change”.

Степень важности несоответствия установим как “сведения”, потому как в нашем случае несоответствие не является ошибкой.

После проделанных действий параметр будет добавлен.

image

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

image

Осталось нажать несколько раз далее, чтобы завершить работу мастера создания элемента конфигурации.

image

 

Для развёртывания этого элемента нам потребуется создать шаблон базовой конфигурации (Configurations Baselines). В Мастере создания необходимо только присвоить имя и выбрать необходимый элемент конфигурации.

image

Вызовем контекстное меню на созданном шаблоне

image

Выберем пункт “Развернуть”, откроется мастер развёртывания шаблонов базовой конфигурации.

image

 

В настройках выберем коллекцию, на которую хотим выполнить развёртывание и укажем периоды выполнения. Для примера, я буду выполнять скрипт каждые 30 минут.

После получения SCCM клиентом развёртывания, возможно вы обнаружите, что состояние соответствия после выполнения имеет статус ошибки.

image

Такую же ошибку можно увидеть и на клиенте SCCM перейдя в вкладку “Конфигурации”.

image

Можно вызвать отчёт и посмотреть более детально.

image

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

Параметр в редакторе групповых можно найти по расположению: Конфигурация компьютера –> Политики –> Административные шаблоны –> Компоненты Windows –> Windows PowerShell –> Включить выполнение сценариев.
Необходимо установить политику “Разрешать локальные сценарии и удалённые подписанные сценарии”.

Дождёмся автоматического выполнения сценария, либо выберем шаблон на клиенте SCCM и нажмём кнопку “Оценить”.

image

Увидим новый статус “Не соответствует”, посмотрим отчёт:

image

Сортировка в отчёте клиента отображает значения почему-то не по порядку, но в отчётах запускаемых с консоли такой проблемы нет:

image

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

Если выполнить оценку ещё раз, то статус отображаемый на клиенте изменится на “Соответствует”, потому как скрипт возвратит строку соответствия – “There was no change”.

image

В отчёте на клиенте:

image

 

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

Добавить комментарий