Рубрика:
Администрирование /
Инструменты
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
СЕРГЕЙ БОЛДИН, системный администратор в энергетической компании, bsergey2@gmail.com
Про PowerShell и SCCM
Скрипты PowerShell позволяют упростить и автоматизировать многие операции при работе с Configuration Manager
Наиболее распространенный метод управления SCCM-сервером – с помощью графической консоли. В ней визуально отображаются компоненты и их содержимое, статусы и ошибки, удобно вносить изменения в конфигурации и создавать отчеты. Помимо этого, в Configuration Manager может применяться и PowerShell, который при помощи огромного количества команд [1] позволяет обращаться к реестру, Active Directory, WMI, файловой системе, операционной системе. Рассмотрим несколько примеров управления либо получения нужной информации с помощью командной строки.
Командлеты PowerShell разбиты на группы и пишутся через дефис. Чтобы получить какую-то информацию, нужно использовать Get-группу, для установки значений – Set-группу, для остановки – Stop, New\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. Удалить все компьютеры в 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
В данном случае для получения данных о комплектующих компьютера нам необходимо обратиться к 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. Мониторинг работы скрипта
Конечно же, мы рассмотрели только малую часть того, как можно получать, выводить и структурировать информацию. Помимо этого, с помощью 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
ПО для PowerShell
Помимо стандартной оболочки написания скрипта PowerShell и PowerShell ISE существуют и более расширенные, но небесплатные.
Например, PowerShell Studio 2019 [6], Ошибка! Недопустимый объект гиперссылки.Ошибка! Недопустимый объект гиперссылки.Ошибка! Недопустимый объект гиперссылки. [7]. Еще стоит упомянуть про утилиту PowerShell App Deployment Toolkit [8], которая интегрируется с SCCM и помогает распространять приложения.
Достоинства: расширяются знания по администрированию SCCM-сервера.
Недостатки: тратится время на изучение командлетов, а также тестирование и отладку.
Использование командной строки PowerShell в Configuration Manager дает системному администратору дополнительные навыки и более глубокое понимание тонкостей работы в администрировании данного сервера, сбора и обработки полученной информации.
- Описание PowerShell – https://docs.microsoft.com/en-us/previous-versions/system-center/powershell/system-center-2012-r2/jj821733(v%3dsc.20) .
- Подключение PowerShell к SCCM – https://msdn.microsoft.com/en-us/library/dn528996.aspx?f=255&MSPPError=-2147217396.
- Простые конструкции PowerShell – https://www.youtube.com/watch?v=OakNmNAmAsc.
- Описание командлетов для WMI – https://forsenergy.com/ru-ru/windowspowershellhelp/html/a4c499fa-deec-4c4b-b3fb-6e195d48a396.htm, https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/Get-WmiObject?view=powershell-5.1.
- Использование PowerShell в SCCM – https://docs.microsoft.com/ru-ru/sccm/apps/deploy-use/create-deploy-scripts#security-scopes, https://www.systemcenterdudes.com/sccm-deploy-powershell-script/.
- Программа PowerShell Studio 2019 – https://www.sapien.com/software/powershell_studio.
- Программа PowerShell Plus – https://www.idera.com/productssolutions/freetools/powershellplus.
- Утилита PowerShell App Deployment Toolkit – https://psappdeploytoolkit.com/.
- Блоги по PowerShell и SCCM – https://smsagent.wordpress.com/page/11/, https://www.sccmog.com/category/sccm/, http://www.powertheshell.com/transcript/.
Ключевые слова: командлеты, ключи, параметры, командная строка, пример, конструкция, вывести, узнать, отобразить, PowerShell, SCCM-сервер, скрипт.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|