Обновление версии PowerShell в Windows
В этой статье мы рассмотрим, как обновить версию Windows PowerShell до актуальной 5.1 и установить (обновить) PowerShell Core 7.0. В предыдущей статье мы рассказывали, что на данный момент есть две ветки PowerShell: старая версия Windows PowerShell (максимальная версия 5.1, которая более не развивается) и новая платформа PowerShell Core (сейчас доступна версия 7.0). Несмотря на то, что нумерация версий PowerShell продолжается с 5.1 (6.0, 6.1, 7.0 и т.д.), это две разные платформы. Соответственно мы рассмотрим отдельно как обновить Windows PowerShell и PowerShell Core.
Обновление Windows PowerShell до 5.1
Попробуем обновить версию Windows PowerShell в Windows Server 2012 R2 до версии 5.1.
По-умолчанию Windows Server 2012 R2 (Windows 8.1) устанавливается с версией 4.0.
Сначала проверим текущую версию PowerShell (на скриншоте видно, что это PowerShell 4.0):
Чтобы обновить вашу версию PowerShell до 5.1, нужно установить пакет Windows Management Framework 5.1, который в свою очередь требует наличия .NET Framework 4.5.2 (или более поздней версии). Убедитесь, что у вас установлена версий .NET 4.5.2 или выше командой:
(Get-ItemProperty ‘HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full’ -Name Release).Release
В моем случае код 378675 говорит о том, что установлена версия .NET 4.5.1. Поэтому мне нужно скачать и установить более новую .NET Framework 4.8 (ссылка на офлайн установщик https://go.microsoft.com/fwlink/?linkid=2088631 — ndp48-x86-x64-allos-enu.exe).
Установите .NET 4.8 (потребуется перезагрузка).
Скачайте WMF 5.1 для Windows Server 2012 R2 — Win8.1AndW2K12R2-KB3191564-x64.msu (https://go.microsoft.com/fwlink/?linkid=839516).
Установите Windows Management Framework 5.1.
После перезагрузки сервера, запустите консоль PS и убедитесь, что версия была обновлена до PowerShell 5.1.
Установка/обновление PowerShell Core 7.0
Обратите внимание, что последняя версия Windows PowerShell, устанавливаемая в Windows 10 и Windows Server 2109 — PowerShell 5.1. Вместо нее Microsoft начала разрабатывать кроссплатформенную версию PowerShell Core. На данный момент доступны версии PowerShell Core 6.0, 6.1, 6.2 и 7.0. По сути PowerShell Core это новая платформа, которая устанавливается в системе вместе с Windows PowerShell. Т.е. нельзя обновить PowerShell 5.1 до PowerShell Core 7.0. PowerShell 7 устанавливается на компьютере отдельно от Windows PowerShell 5.1.
Если у вас уже установлен PowerShell Core 6.0, вы можете обновить версию PowerShell на своем компьютере до последней версии PowerShell 7.0 Core (либо можно установиь PowerShell Core 7.0 рядом с Windows PowerShell 5.1). В этом примере мы попробуем обновить версию PowerShell Core в Windows 10 1909. Есть два способа обновления:
- Можно вручную скачать msi установщик PowerShell Core на GitHub
- Можно скачать и запустить установку (обновление) непосредственно из консоли PowerShell
Если вы хотите установаить PowerShell Core с помощью MSI пакета, перейдите на старицу проекта https://github.com/PowerShell/PowerShell, найдите последний релиз (на момент написания статьи это v7.0.0 Release of PowerShell от 4 марта, доступны также более новые v7.1.0-preview Release of PowerShell, но лучше пока не ставить их до выхода стабильной версии). Разверните список Assets и найдите пакет для вашей версии Windows (PowerShell-7.0.0-win-x64.msi или PowerShell-7.0.0-win-x86.msi).
Скачайте msi файл и установите его.
msiexec.exe /package PowerShell-7.0.0-win-x64.msi /quiet ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1
Вы можете обновить PowerShell непосредственно из консоли.
Обновим (установим) последнюю версию PoSh Core с помощью команды:
- -Destination – каталог установки PowerShell Core
- -Preview – установка Preview версии
- -Quiet – тихая установка
- -AddToPath – добавить путь к каталогу установки PowerShell Core в переменные окружения
Данная команда загружает установочный MSI файл PowerShell 7.0 с GitHub и запускает установку, затем запускается установка через MSI Installer.
После окончания установки открывается окно PowerShell Core (pwsh.exe), проверьте версию PowerShell и убедитесь, что теперь это PoSh 7.0.0.
Если у вас установлен менеджер пакетов Chocolatey, вы можете установить или обновить версию PowerShell командами:
choco install powershell -y
choco upgrade powershell -y
Обратите внимание, что имя исполняемого файла среды PowerShell изменился. Теперь это c:\Program Files\PowerShell\7\pwsh.exe . У него собственная иконка в меню Start.
- Для запуска Windows PowerShell, основанного на .NET Framework используется команда powershell.exe
- Для запуска PowerShell Core, основанного на .NET Core, нужно использовать команду pwsh.exe
Т.е. теперь на этом компьютере есть две версии: Windows PowerShell 5.1 и PowerShell Core 7.0
RootUsers
Guides, tutorials, reviews and news for System Administrators.
Install PowerShell 5 in Windows Server 2008 R2
Windows Management Framework (WMF) 5.1 contains PowerShell 5.1. By default Windows Server 2008 R2 SP1 runs the older PowerShell version 2. By downloading and installing WMF 5.1 to a Windows Server 2008 R2 system, we can upgrade it to PowerShell version 5.1.
This post is part of our Microsoft 70-744 Securing Windows Server 2016 exam study guide series. For more related posts and information check out our full 70-744 study guide.
Download WMF 5.1 to a Windows Server 2008 R2 system
This also works with Windows Server 2012 and 2012 R2. By default Windows Server 2016 already has PowerShell 5.0 installed, so this is not required there. Note that to upgrade Windows Server 2008 R2 you must be using Service Pack 1 (SP1).
First we’ll confirm the verison of PowerShell on our 2008 R2 system. This can be done by opening PowerShell, and running $PSVersionTable, as shown below.
As expected we have PowerShell version 2.0, which is the default in this operating system.
WMF 5.0 or higher is needed to provide the just-enough administration (JEA) PowerShell feature implemented in Windows Server 2016 into the older 2008 R2 SP1 operating system.
Before we download and install WMF though, we must first install .NET Framework 4.5.2 or later, as this is a prerequisite for WMF 5.1 in Windows Server 2008 R2 SP1, and by default 2008 R2 SP1 comes with .NET 3.5. You can download a newer version of .NET from here: https://www.microsoft.com/net/download/framework
After installation has completed you’ll need to perform a system reboot to proceed.
A system reboot is not required after installing WMF.
Once installed open PowerShell and run $PSVersionTable again, we can now see that PSVersion is listed as 5.1 as expected.
We will now be able to configure our Windows Server 2008 R2 SP1 system to use just-enough administration (JEA), as we’ll cover in future posts.
Summary
By first updating the .NET Framework and then installing either WMF 5.0 or 5.1, we can upgrade our PowerShell version to support Just-Enough Administration (JEA) in older versions of Windows, such as Windows Server 2008 R2, 2012, and 2012 R2.
This post is part of our Microsoft 70-744 Securing Windows Server 2016 exam study guide series. For more related posts and information check out our full 70-744 study guide.
Модуль PSWindowsUpdate: управление обновлениями Windows из PowerShell
Для управления обновлениями Windows из командной строки очень удобно использовать специальный PowerShell модуль – PSWindowsUpdate. Модуль PSWindowsUpdate не встроен в Windows и является сторонним модулем, доступным в галерее скриптов Technet. PSWindowsUpdate позволяет администраторам удаленно проверять, устанавливать, удалять и скрывать определенные обновления на компьютерах и рабочих станциях. Модуль PSWindowsUpdate особо ценен при использовании для управления обновлениями в Core редакциях Windows Server, в которых отсутствуют графический интерфейс, а также при настройке образа Windows в режиме аудита.
Установка модуля управления обновлениями PSWindowsUpdate
Если вы используете Windows 10, вы можете установить модуль PSWindowsUpdate из онлайн репозитория через менеджер пакетов PackageManagement всего одной командой:
Install-Module -Name PSWindowsUpdate
В моем случае появилось предупреждение, что версия PSWindowsUpdate 1.5.2.6 уже установлена. Чтобы установить более новую версию, нужно запустить команду:
Install-Module -Name PSWindowsUpdate –Force
После окончания установки нужно проверить наличие пакета:
Get-Package -Name PSWindowsUpdate
Если у вас установлена более старая версия Windows (Windows 7/8.1/ Windows Server 2008 R2/ 2012 R2) или отсутствует прямой доступ в Интернет, вы можете установить модуль PSWindowsUpdate вручную.
Модуль PSWindowsUpdate можно установить на любые поддерживаемые версии Windows, начиная с Vista / Windows Server 2008 с установленным PowerShell 2.0 (но рекомендуется PowerShell версии 3.0 и выше).
После установки модуля PSWindowsUpdate на своем компьютере вы можете удаленно установить его на другие компьютеры или сервера с помощью командлета Update-WUModule . Например, чтобы скопировать PSWindowsUpdate модуль с вашего компьютера на два удаленных сервера, выполните команды (нужен доступ к удаленным серверам по протоколу SMB, порт TCP 445):
$Targets = «Server1», «Server2»
Update-WUModule -ComputerName $Targets –Local
Чтобы сохранить модуль в сетевой каталог для дальнейшего импорта модуля на других компьютерах, выполните:
Save-Module -Name PSWindowsUpdate –Path \\fs01\ps\
Обзор команд модуля PSWindowsUpdate
Список доступных командлетов модуля можно вывести так:
get-command -module PSWindowsUpdate
Вкратце опишем назначение команд модуля:
- Clear-WUJob – использовать Get-WUJob для вызова задания WUJob в планировщике;
- Download-WindowsUpdate (алиас для Get-WindowsUpdate –Download) — получить список обновлений и скачать их;
- Get-WUInstall, Install-WindowsUpdate (алиас для Get-WindowsUpdate –Install) – установить обвновления;
- Hide-WindowsUpdate (алиас для Get-WindowsUpdate -Hide:$false) – скрыть обновление;
- Uninstall-WindowsUpdate -удалить обновление с помощью Use Remove-WindowsUpdate;
- Add-WUServiceManager – регистрация сервера обновления (Windows Update Service Manager) на компьютере;
- Enable-WURemoting — включить правила файервола, разрешающие удаленное использование командлета PSWindowsUpdate;
- Get-WindowsUpdate (Get-WUList) — выводит список обновлений, соответствующим указанным критериям, позволяет найти и установить нужное обновление. Это основной командлет модуля PSWindowsUpdate. Позволяет скачать и установить обновления с сервера WSUS или Microsoft Update. Позволяет выбрать категории обновлений, конкретные обновления и указать правила перезагрузки компьютера при установке обновлений;
- Get-WUApiVersion – получить версию агента Windows Update Agent на компьютере;
- Get-WUHistory – вывести список установленных обновлений (история обновлений);
- Get-WUInstallerStatus — проверка состояния службы Windows Installer;
- Get-WUJob – запуска заданий обновления WUJob в Task Scheduler;
- Get-WULastResults — даты последнего поиска и установки обновлений (LastSearchSuccessDate и LastInstallationSuccessDate);
- Get-WURebootStatus — позволяет проверить, нужна ли перезагрузка для применения конкретного обновления;
- Get-WUServiceManager – вывод источников обновлений;
- Get-WUSettings – получить настройки клиента Windows Update;
- Invoke-WUJob – удаленное вызов заданий WUJobs в Task Schduler для немедленного выполнения заданий PSWindowsUpdate.
- Remove-WindowsUpdate – удалить обновление;
- Remove-WUServiceManager – отключить Windows Update Service Manager;
- Set-PSWUSettings – сохранить настройки модуля PSWindowsUpdate в XML файл;
- Set-WUSettings – настройка параметров клиента Windows Update;
- Update-WUModule – обновить модуль PSWindowsUpdate (можно обновить модуль на удаленном компьютере, скопировав его с текущего, или обновить из PSGallery).
Управление обновлениями Windows на удаленных компьютерах через PowerShell
Практически все командлеты модуля PSWindowsUpdate позволяют управлять установкой обновлений на удаленных компьютерах. Для этого используется атрибут -Computername Host1, Host2, Host3.
Чтобы управлять обновлениями на удаленных компьютерах, нужно добавить их имена в список доверенных хостов winrm:
Установите модуль PSWindowsUpdate на удаленных компьютерах и разрешите в файерволе доступ по динамическим RPC портам к процессу dllhost.exe.
Получаем список доступных обновлений Windows из PowerShell
Вывести список обновлений, доступных для данного компьютера на сервере обновлений можно с помощью команд Get-WindowsUpdate или Get-WUList.
Чтобы проверить список доступных обновлений на удаленном компьютере, выполните:
Get-WUList –ComputerName server2
Вы можете проверить, откуда должна получать обновления ваша ОС Windows. Выполните команду:
Как вы видите, компьютер настроен на получение обновлений с локального сервера WSUS (Windows Server Update Service = True). В этом случае вы должны увидесть список обновлений, одобренных для вашего компьютера на WSUS.
Если вы хотите просканировать ваш компьютер на серверах Microsoft Update (кроме обновлений Windows на этих серверах содержатся обновления Office и других продуктов) в Интернете, выполните команду:
Вы получаете предупреждение:
Чтобы разрешить сканирование на Microsoft Update, выполните команду:
Add-WUServiceManager -ServiceID «7971f918-a847-4430-9279-4a52d1efe18d» -AddServiceFlag 7
Теперь можете выполнить сканирование на Microsoft Update. Как вы видите, в данном случае были найдены дополнительные обновления для Microsoft Visual C++ 2008 и Microsoft Silverlight.
Чтобы проверить версию агента Windows Update на компьютере, выполните команду:
Чтобы убрать определенные продукты или конкретные пакеты из списка обновлений, которые получает ваш компьютер, вы их можете исключить по:
- Категории (-NotCategory);
- Названию (-NotTitle);
- Номеру обновления (-NotKBArticleID).
Например, исключим из списка обновления драйверов, OneDrive и одну конкретную KB:
Get-WUlist -NotCategory «Drivers» -NotTitle OneDrive -NotKBArticleID KB4533002
Install-WindowsUpdate: установка обновлений с помощью PSWindowsUpdate
Чтобы автоматически загрузить и установить все доступные обновления для вашей Windows, выполните:
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot
Ключ AcceptAll включает одобрение установки для всех пакетов, а AutoReboot разрешает автоматическую перезагрузку Windows после установки обновлений.
Можете сохранить историю установи обновлений в лог файл (можно использовать вместо WindowsUpdate.log).
Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File «c:\$(get-date -f yyyy-MM-dd)-WindowsUpdate.log» -force
Можно установить только конкретные обновления по номерам KB:
Get-WindowsUpdate -KBArticleID KB2267602, KB4533002 -Install
В данном случае нужно подтверждать установку каждого обновления вручную.
Если вы хотите исключить некоторые обновления из списка на установку, выполните:
Install-WindowsUpdate -NotCategory «Drivers» -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot
Модуль позволяет удаленно запустить установку обновлений сразу на нескольких компьютерах или серверах (на компьютерах должен присутствовать модуль PSWindowsUpdate). Это особенно удобно, так как позволяет администратору не заходить вручную на все сервера во время плановой установки обновлений. Следующая команда установит все доступные обновление на трех удаленных серверах:
В модуле PSWindowsUpdate 2.1 вместо командлета Invoke-WUInstall нужно использовать Invoke-WUJob. Этот командлет создает на удаленном компьютере задание планировщика, запускаемое от SYSTEM.
Поэтому в новых версиях модуля для удаленной установки обновлений используйте такую команду:
Можно установить обновления на удаленном компьютере и отправить email отчет администратору:
Install-WindowsUpdate -ComputerName server1 -MicrosoftUpdate -AcceptAll — IgnoreReboot -SendReport –PSWUSettings @
Get-WUHistory: просмотр истории установленных обновлений Windows
С помощью команды Get-WUHistory вы можете получить список обновлений, установленных на компьютере ранее автоматически или вручную.
Можно получить информацию о дате установки конкретного обновления:
Get-WUHistory| Where-Object <$_.Title -match "KB4517389">| Select-Object *|ft
Чтобы получить информацию об наличии установленного обновления на нескольких удаленных компьютерах, можно воспользоваться таким кодом:
«server1″,»server2» | Get-WUHistory| Where-Object <$_.Title -match "KB4011634">| Select-Object *|ft
Remove-WindowsUpdate: Удаление обновлений
Для корректного удаления обновлений используется командлет Remove-WindowsUpdate. Вам достаточно указать номер KB в качестве аргумента параметра KBArticleID. Чтобы отложить автоматическую перезагрузку компьютера можно добавить ключ –NoRestart :
Remove-WindowsUpdate -KBArticleID KB4011634 -NoRestart
Hide-WindowsUpdate: как скрыть ненужные обновления с помощью PowerShell
Вы можете скрыть определенные обновления, чтобы они никогда не устанавливались службой обновлений Windows Update на вашем компьютер (чаще всего скрывают обновления драйверов). Например, чтобы скрыть обновления KB2538243 и KB4524570, выполните такие команды:
$HideList = «KB2538243», «KB4524570»
Get-WindowsUpdate -KBArticleID $HideList -Hide
или используйте alias:
Hide-WindowsUpdate -KBArticleID $HideList -Verbose
Теперь при следующем сканировании обновлений с помощью команды Get-WUlist скрытые обновления не будут отображаться в списке доступных для установки патчей.
Вывести список обновлений, которые скрыты на данном компьютере можно так:
Обратите внимание, что в колонке Status у скрытых обновлений появился атрибут H (Hidden).
Отменить скрытие некоторых обновлений можно так:
Get-WindowsUpdate -KBArticleID $HideList -WithHidden -Hide:$false
Show-WindowsUpdate -KBArticleID $HideList
Для тех, кто себя некомфортно чувствует в консоли PowerShell, для управления обновлениями Windows 10 могу порекомендовать графическую утилиту Windows Update MiniTool.