Про PowerShell и SCCM::Журнал СА 03.2019
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Архив номеров
Контакты
   

  Опросы
  Статьи

Рынок труда  

Системные администраторы по-прежнему востребованы и незаменимы

Системные администраторы, практически, есть везде. Порой их не видно и не слышно,

 Читать далее...

Учебные центры  

Карьерные мечты нужно воплощать! А мы поможем

Школа Bell Integrator открывает свои двери для всех, кто хочет освоить перспективную

 Читать далее...

Гость номера  

Дмитрий Галов: «Нельзя сказать, что люди становятся доверчивее, скорее эволюционирует ландшафт киберугроз»

Использование мобильных устройств растет. А вместе с ними быстро растет количество мобильных

 Читать далее...

Прошу слова  

Твердая рука в бархатной перчатке: принципы soft skills

Лауреат Нобелевской премии, специалист по рынку труда, профессор Лондонской школы экономики Кристофер

 Читать далее...

Как хорошо вы это знаете  

Портал Инкоманд. Для чего он? Для кого? Какие проблемы решает?

Компания «ЕМДЕВ» – создатель интернет-портала, предлагает всем желающим протестировать себя на

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 9997
Комментарии: 0
Потоковая обработка данных

 Читать далее...

19.03.2018г.
Просмотров: 8211
Комментарии: 0
Релевантный поиск с использованием Elasticsearch и Solr

 Читать далее...

19.03.2018г.
Просмотров: 8303
Комментарии: 0
Конкурентное программирование на SCALA

 Читать далее...

19.03.2018г.
Просмотров: 5272
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 5947
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

Друзья сайта  

 Про PowerShell и SCCM

Архив номеров / 2019 / Выпуск №03 (196) / Про PowerShell и SCCM

Рубрика: Администрирование /  Инструменты

Сергей Болдин СЕРГЕЙ БОЛДИН, системный администратор в энергетической компании, bsergey2@gmail.com

Про PowerShell и SCCM

Скрипты PowerShell позволяют упростить и автоматизировать многие операции при работе с Configuration Manager

Наиболее распространенный метод управления SCCM-сервером – с помощью графической консоли. В ней визуально отображаются компоненты и их содержимое, статусы и ошибки, удобно вносить изменения в конфигурации и создавать отчеты. Помимо этого, в Configuration Manager может применяться и PowerShell, который при помощи огромного количества команд [1] позволяет обращаться к реестру, Active Directory, WMI, файловой системе, операционной системе. Рассмотрим несколько примеров управления либо получения нужной информации с помощью командной строки.

Командлеты PowerShell разбиты на группы и пишутся через дефис. Чтобы получить какую-то информацию, нужно использовать Get-группу, для установки значений – Set-группу, для остановки – StopNew\Remove – для создания/удаления, Move – для переноса, Rename – для переименования, а для вывода информации – Out-группу.

Работать с командной строкой PowerShell можно как без сохранения результата, так и с сохранением. Чтобы в дальнейшем править имеющийся скрипт или применять его где-то, можно изначально создать пустой текстовый файл с помощью программы Блокнот, а затем сменить расширение с .txt на .ps1.

Первые действия

Сначала нужно подключиться PowerShell относительно сервера SCCM [2]. Для этого в консоли Configuration Manager на главной панели в первом меню выбираем пункт Connect via Windows PowerShell.

Другой способ подключения к SCCM – с помощью специального модуля, используя командлет Import-Module. Для этого нужно запустить консоль PowerShell от имени администратора, перейти в каталог установки сервера (в нашем случае CD ‘D:\SCCM2016\AdminConsole\bin’) и выполнить импорт:

Import-Module .\ConfigurationManager.psd1 –verbose

Еще вариант установить набор командлетов SCCM – запустить PowerShellCmdlets.msi.

Нам может понадобиться обращаться к Active Directory и получать в ответ нужные данные, поэтому сразу установим еще один необходимый модуль:

Add-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature

Далее пробуем вывести список доступных командлетов:

Get-Command –Module ConfigurationManager | out-gridview

Затем проверим работоспособность справки, например:

help Remove-CMDevice –full

Также выведем информацию о сайте (Get-CMSite) и список доступных пакетов для установки (Get-CMPackage | ft name) (см. рис. 1), множество несложных конструкций можно найти здесь [3].

 Рисунок 1. Список доступных пакетов

Рисунок 1. Список доступных пакетов

Дальнейшие действия

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

Пример 1. Удалить все компьютеры в SCCM, где в имени встречается сочетание букв DUD. За удаление компьютеров отвечает командлет remove-cmdevice:

Get-CMDevice | where {$_.name -like '*DUD*'} | Remove-CMDevice –Force

Пример 2. Вывести всех пользователей SCCM, фамилии которых начинаются на b. Делаем так:

Get-CMUSER | where {$_.name -like 'b*'} | ft name

Пример 3. Вывести пользователей Active Directory, названия их компьютеров и IP-адреса, ОС.

Get-ADComputer -filter * -SearchBase "OU=Computers,dc=dmk,dc=dc03,dc=corp" | Select-Object -Property Name, ipv4*, OperatingSystem

Далее наши действия усложняются, ведь PowerShell не ограничивается только наборами командлетов и ключей.

Например, в Configuration Manager необходимо разрешить доступ на чтение к пакету по его имени сотруднику техподдержки. В этом случае удобно применить переменную, присвоив ей значения массива данных, а потом ее использовать в другом месте. Переменная объявляется символом $.

$Name = Get-CMAccessAccount -PackageName "Office 2016"
Set-CMAccessAccount -PackageName $Name -Type User -UserName "KKK\Andreev.dd" -Access Read –Confirm .

Чтобы разрешить доступ к драйверам, загрузочным образам или приложениям, вместо ключа -PackageName можно использовать и такие ключи, как -Application-OperatingSystemImage-OperatingSystemInstaller-BootIm-ageId-DriverPackage и другие.

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

Откроем пустой файл в редакторе с расширением .ps, нажав на нем правой кнопкой мыши и выбрав из контекстного меню пункт Edit. Откроется программа PowerShell ISE (или открыть ее из меню Пуск), состоящая из трех частей: справа – список командлетов, сверху – поле для написания кода, а снизу – его результат (см. рис. 2).

Рисунок 2. Скриптовый редактор PowerShell

Рисунок 2. Скриптовый редактор PowerShell

В данном случае для получения данных о комплектующих компьютера нам необходимо обратиться к WMI [4]. Значение каждого WMI-запроса присваиваем новой переменной, параметр Computername необходим для получения данных не с локальной машины, а с помощью символа «|» и Select-Object перечисляются необходимые параметры дальнейшего вывода значений, например, так:

$HDD = Get-WmiObject Win32_DiskDrive –Computername $PC | Select-Object Size

Эту и остальные переменные ($PC, $OS, $Mem, $IP, $CPU) завернем в функцию с математическими преобразованиями и протащим ее через цикл Foreach(), получив на выходе данные со всех компьютеров:

function PS_Inv
{
Param ([Parameter(Mandatory=$False, Position=0, HelpMessage="ComputerName")][Object] $PC = $env:COMPUTERNAME)

PROCESS {
$OS = Get-WmiObject Win32_OperatingSystem -Computername $PC
$PCProperties = Get-WmiObject Win32_ComputerSystem -ComputerName $PC
$MemoryProperties = Get-WmiObject Win32_PhysicalMemory -ComputerName $PC
$HDD = Get-WmiObject Win32_DiskDrive | Select-Object Size
$CPU = Get-WmiObject Win32_Processor | Select-Object Name
"-------------------------"
""
"PC    : {0}" -f $OS.csname
"OS    : {0}" -f $OS.Caption  + $OS.CSDVersion
"Mem   : {0}" –f ([math]::round(($PCProperties.TotalPhysicalMemory/1024/1024),0))
"HDD   : {0}" -f ($HDD.Size/1GB)
"CPU   : {0}" -f $CPU.Name
} }
Clear-Host
PS_Inv $env:COMPUTERNAME
Get-ADcomputer -filter * | foreach {PS_Inv -PC $_.Name}

Результат можно увидеть на рис. 2.

Пример 6. Удалить у всех пользователей программы из магазина (при установке OC) Windows 10 Pro.

В этом случае воспользуемся встроенным функционалом работы со скриптами PowerShell [5]. Для этого заходим в меню Software Library → Overview → Scripts, жмем правой кнопкой мыши и выбираем пункт Create Script. Мастер запросит ввести имя, например Delete StoreApp, и сам скрипт, который выглядит так:

удалить 3D Builder - Get-AppxPackage -allusers *bing* | Remove-AppxPackage

Если же необходимо будет удалить все лишние приложения, то придется их перечислить и прогнать в цикле, например, так:

$Delete_Apps = @("*3DBuilder*" "*Advertising*" "*BingWeather*" "*Feedback*" "*GetStarted*" "*Maps*" "*Messaging*" "*People*" "*ZuneMusic*" "*ZuneVideo*")

ForEach($app in $Delete_Apps)
{
Get-AppxPackage -Name $app | Remove-AppxPackage -ErrorAction SilentlyContinue
}

Затем новый скрипт необходимо будет утвердить. Для этого нажимаем на нем правой кнопкой мыши, в меню выбираем пункт Approve/Deny, жмем кнопку Next, проверяем установленный по умолчанию вариант Approve, потом Next → Next → Close.

После этого переходим в Assets and Compliance → Overview → Device Collections. На группе компьютеров нажимаем правой кнопкой мыши и выбираем пункт Run Script. В появившемся окне выбираем нужный нам скрипт и ожидаем результат работы, а в это время можно наблюдать за процессом его выполнения (см. рис. 3).

Рисунок 3. Мониторинг работы скрипта

Рисунок 3. Мониторинг работы скрипта

Конечно же, мы рассмотрели только малую часть того, как можно получать, выводить и структурировать информацию. Помимо этого, с помощью PowerShell можно управлять сервером Configuration Manager, используя командлеты для создания точки распространения (Add-CMDistributionPoint), очистки статуса последнего развертывания (Clear-CMPxeDeployment), отключения программы в пакетах (Disable-CMProgram), включения последовательности задач (Enable-CMTaskSequence), экспорта пакета драйверов (Export-CMDriverPackage), получения/вывода данных о коллекциях устройств (Get-CMDeviceCollection), установки клиентской части (Install-CMClient), создания нового загрузочного образа (New-CMBootImage), удаления точки управления (Remove-CMManagementPoint), изменения настроек границ (Set-CMBoundary), старта распространения пакетов программ (Start-CMPackageDeployment), обновления статуса клиентов (Update-CMClientStatus) и многого другого.

Отладка

Что делать, если скрипт выдал ошибку или отработал, но ошибку не выдал и результат не виден? В этом случае можно действия скрипта записать в файл и проанализировать.

Чтобы в лог-файле появилась информация, нужно применить два командлета, один – Start-Transcript – для начала записи, другой – Stop-Transcript – для остановки. Для удобства нужно еще указать путь к файлу и можно еще запретить его перезапись.

На деле это будет выглядеть так:

Start-Transcript -Path D:\PS_Log\log1.txt -NoClobber
…Код скрипта…
Stop-Transcript

Пример лог-файла можно увидеть на рис. 4.

Рисунок 4. Пример лог-файла PowerShell

Рисунок 4. Пример лог-файла PowerShell

ПО для PowerShell

Помимо стандартной оболочки написания скрипта PowerShell и PowerShell ISE существуют и более расширенные, но небесплатные.

Например, PowerShell Studio 2019 [6], Ошибка! Недопустимый объект гиперссылки.Ошибка! Недопустимый объект гиперссылки.Ошибка! Недопустимый объект гиперссылки. [7]. Еще стоит упомянуть про утилиту PowerShell App Deployment Toolkit [8], которая интегрируется с SCCM и помогает распространять приложения.

Достоинства: расширяются знания по администрированию SCCM-сервера.

Недостатки: тратится время на изучение командлетов, а также тестирование и отладку.

Использование командной строки PowerShell в Configuration Manager дает системному администратору дополнительные навыки и более глубокое понимание тонкостей работы в администрировании данного сервера, сбора и обработки полученной информации.

  1. Описание PowerShell – https://docs.microsoft.com/en-us/previous-versions/system-center/powershell/system-center-2012-r2/jj821733(v%3dsc.20) .
  2. Подключение PowerShell к SCCM – https://msdn.microsoft.com/en-us/library/dn528996.aspx?f=255&MSPPError=-2147217396.
  3. Простые конструкции PowerShell – https://www.youtube.com/watch?v=OakNmNAmAsc.
  4. Описание командлетов для WMI – https://forsenergy.com/ru-ru/windowspowershellhelp/html/a4c499fa-deec-4c4b-b3fb-6e195d48a396.htmhttps://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/Get-WmiObject?view=powershell-5.1.
  5. Использование PowerShell в SCCM – https://docs.microsoft.com/ru-ru/sccm/apps/deploy-use/create-deploy-scripts#security-scopeshttps://www.systemcenterdudes.com/sccm-deploy-powershell-script/.
  6. Программа PowerShell Studio 2019 – https://www.sapien.com/software/powershell_studio.
  7. Программа PowerShell Plus – https://www.idera.com/productssolutions/freetools/powershellplus.
  8. Утилита PowerShell App Deployment Toolkit – https://psappdeploytoolkit.com/.
  9. Блоги по PowerShell и SCCM – https://smsagent.wordpress.com/page/11/https://www.sccmog.com/category/sccm/http://www.powertheshell.com/transcript/.

Ключевые слова: командлеты, ключи, параметры, командная строка, пример, конструкция, вывести, узнать, отобразить, PowerShell, SCCM-сервер, скрипт.


Комментарии
 
  02.07.2021 - 06:17 |  den.k.v

Пробовал по аналогии с этим: "удалить 3D Builder - Get-AppxPackage -allusers *bing* | Remove-AppxPackage".
Не удаляется приложение. Сценарий отрабатывает, ошибок нет, приложение не удаляется. Версия 2103

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

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru