Помимо управления конфигурациями с помощью графической консоли Configuration Manager, вы можете применять и командную консоль PowerShell. С помощью командлетов вы сможете обращаться к реестру, Active Directory, WMI, файловой системе, операционной системе. Рассмотрим несколько примеров.

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

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

 

Первоначальная настройка консоли PowerShell

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

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

Import-Module .\ConfigurationManager.psd1 –verbose ,

ещё один вариант установить набор командлетов MECM - запустить файл 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.

Множество несложных конструкций можно найти здесь - https://www.youtube.com/watch?v=OakNmNAmAsc.

 

Примеры применения консоли PowerShell

Пример 1. Необходимо удалить все компьютеры в базе MECM, где в имени встречается сочетание букв “TN”. За удаление компьютеров отвечает командлет remove-cmdevice:

Get-CMDevice | where {$_.name -like '*TN*'} | Remove-CMDeviceForce

 

Пример 2. Требуется вывести всех пользователей MECM, фамилии которых начинаются на “S”. Делаете так: 

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

 

Пример 3. Нужно вывести пользователей Active Directory, названия их компьютеров и IP-адреса, операционной системы. В консоли пишете следующее:

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

 

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

$Name = Get-CMAccessAccount -PackageName "Office 2019"

Set-CMAccessAccount -PackageName $Name -Type User -UserName "DGT\Ulitkin.nd" -Access Read –Confirm .

Чтобы разрешить доступ к драйверам, загрузочным образам или приложениям, вместо ключа –PackageName вы можете использовать и такие ключи: 

-Application, -OperatingSystemImage, -OperatingSystemInstaller, -BootImageId, -DriverPackage, и другие.

 

Пример 5. Требуется вывести информацию о наличии старых компьютеров.

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

Здесь вам необходим параметр Computername для получения данных не с локальной машины, а с помощью символа “|” и Select-Object у вас будут перечисляться необходимые параметры дальнейшего вывода значений.

В консоли PowerShell ISE создайте пустой файл, впишите следующий набор командлетов:

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}

Для получения данных о комплектующих компьютера происходит обращение к 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]. Значение каждого WMI-запроса присваиваете новой переменной, параметр Computername вам необходим для получения данных не с локальной машины, а с помощью символа “|” и Select-Object перечисляются необходимые параметры дальнейшего вывода значений.

 

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

В этом случае вы можете воспользоваться встроенным в MECM функционалом работы со скриптами PowerShell. Для этого захйдите в меню 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. В появившемся окне выберете нужный нам скрипт, и ожидайте результат работы. В это время можете наблюдать за процессом его выполнения.

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

 

Отладка

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

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

Start-Transcript -Path D:\PS_Log\log1.txt -NoClobber 

…Код скрипта…

Stop-Transcript