Помимо управления конфигурациями с помощью графической консоли 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-CMDevice –Force
Пример 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
КОММЕНТАРИИ - 0