Установка Windows Managment Framework 4 средствами групповых политик
25 Oct 2017
Для установки Powershel 4 требуется установленный .NET Framework
Программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), которая подходит для разных языков программирования. Функциональные возможности CLR доступны в любых языках программирования, использующих эту среду.
4.5. Необходимо убедится, что он установлен и если нет, то установить его. Один из способов проверить установку, это через реестр.
Скрипт installNetFramework.bat
:
@ECHO OFF
REM Check to see if .Net Framework 4.5 is installed
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.5"
IF %errorlevel%==1 GOTO INSTALLNET
IF %errorlevel%==0 GOTO EXIT
:INSTALLNET
Start /wait \\192.168.223.201\install$\Updates\WindowsManagmentFramework\wmf4\NDP452-KB2901907-x86-x64-AllOS-ENU.exe /norestart /q
:EXIT
exit
Скрипт installWMF4.bat
:
@ECHO OFF
REG QUERY "HKLM\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine" /f 4.0
IF %errorlevel%==1 GOTO INSTALLWMF
IF %errorlevel%==0 GOTO EXIT
:INSTALLWMF
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query %RegQry% > checkOS.txt
Find /i "x86" < CheckOS.txt > StringCheck.txt
If %ERRORLEVEL% == 0 (
expand -f:* "\\192.168.223.201\install$\Updates\WindowsManagmentFramework\wmf4\Windows6.1-KB2819745-x86-MultiPkg.msu" %temp%
pkgmgr.exe /n:%temp%\Windows6.1-2819745-x86.xml /quiet /norestart
) ELSE (
expand -f:* "\\192.168.223.201\install$\Updates\WindowsManagmentFramework\wmf4\Windows6.1-KB2819745-x64-MultiPkg.msu" %temp%
pkgmgr.exe /n:%temp%\Windows6.1-2819745-x64.xml /quiet /norestart
)
:EXIT
Exit
Сценарии укзываются в групповой политике в разделе "Конфигурация компьютера" -> "Конфигурация Windows" -> "Сценарии (запуск/завершение)" -> "Завершение работы". В соответствующем порядке.
После установки WMF 4 слетает конфигурация PSSessionConfiguration, нужно заново включить удаленный доступ:
Enable-PSRemoting -SkipNetworkProfileCheck -Force
#Если не помогло тогда перерегестрируем конфигурацию:
Get-PSSessionConfiguration -Name Microsoft.PowerShell | Unregister-PSSessionConfiguration -Force
Register-PSSessionConfiguration -Name Microsoft.PowerShell -Force
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Пришлось добавить стартовый powershell скрипт для включения PSRemoting, состоящий из выше приведенной строки.
Пример ошибки:
PS C:\> Enter-PSSession C029
Enter-PSSession : Сбой подключения к удаленному серверу C029. Сообщение об ошибке: Службе WS-Management не удается обра
ботать запрос. Не удается найти конфигурацию сеанса Microsoft.PowerShell в WSMan: диск в компьютере C029. Дополнительны
е сведения см. в разделе справки, "about_Remote_Troubleshooting".
строка:1 знак:1
+ Enter-PSSession C029
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (C029:String) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId : CreateRemoteRunspaceFailed
Политики для настройка удаленного доступа (PSRemoting) в GPO:
- Политики
- Конфигурация Windows
- Параметры безопасности
- Брандмауэр Windows в режиме повышенной безопасности
- Правила для входящих подключений
Удаленное управление Windows (HTTP - входящий трафик) Правило входящего трафика для удаленного управления Windows через WS-Management. [TCP 5985]
- Системные службы
Служба удаленного управления Windows (WS-Management) (Режим запуска: Автоматически)
- Административные шаблоны
- Компоненты Windows
- Удаленное управление Windows
- Служба удаленного управления Windows
Разрешить удаленное администрирование сервера средствами WinRM (Включено)
Фильтр IPv4: *
Фильтр IPv6: *
Скрипт показывающий установленные версии .NET Framework:
```powershell
<#
Script Name : Get-NetFrameworkVersion.ps1
Description : This script reports the various .NET Framework versions installed on the local or a remote computer.
Author : Martin Schvartzman
Last Update : Aug-2016
Keywords : NETFX, Registry
Reference : https://msdn.microsoft.com/en-us/library/hh925568
#>
param($ComputerName = $env:COMPUTERNAME)
$dotNetRegistry = 'SOFTWARE\Microsoft\NET Framework Setup\NDP'
$dotNet4Registry = 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
$dotNet4Builds = @{
30319 = '.NET Framework 4.0'
378389 = '.NET Framework 4.5'
378675 = '.NET Framework 4.5.1 (8.1/2012R2)'
378758 = '.NET Framework 4.5.1 (8/7 SP1/Vista SP2)'
379893 = '.NET Framework 4.5.2'
380042 = '.NET Framework 4.5 and later with KB3168275 rollup'
393295 = '.NET Framework 4.6 (Windows 10)'
393297 = '.NET Framework 4.6 (NON Windows 10)'
394254 = '.NET Framework 4.6.1 (Windows 10)'
394271 = '.NET Framework 4.6.1 (NON Windows 10)'
394802 = '.NET Framework 4.6.2 (Windows 10 Anniversary Update)'
394806 = '.NET Framework 4.6.2 (NON Windows 10)'
460798 = '.NET Framework 4.6.2 (Windows 10 Creators Update)'
460805 = '.NET Framework 4.7 (NON Windows 10)'
461308 = '.NET Framework 4.7 (Windows 10 Fall Creators Update)'
461310 = '.NET Framework 4.7.1 (NON Windows 10)'
}
foreach($Computer in $ComputerName) {
if($regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)) {
if ($netRegKey = $regKey.OpenSubKey("$dotNetRegistry")) {
foreach ($versionKeyName in $netRegKey.GetSubKeyNames()) {
if ($versionKeyName -match '^v[123]') {
$versionKey = $netRegKey.OpenSubKey($versionKeyName)
$version = [version]($versionKey.GetValue('Version', ''))
New-Object -TypeName PSObject -Property @{
ComputerName = $Computer
NetFXBuild = $version.Build
NetFXVersion = '.NET Framework ' + $version.Major + '.' + $version.Minor
} | Select-Object ComputerName, NetFXVersion, NetFXBuild
}
}
}
if ($net4RegKey = $regKey.OpenSubKey("$dotNet4Registry")) {
if(-not ($net4Release = $net4RegKey.GetValue('Release'))) {
$net4Release = 30319
}
New-Object -TypeName PSObject -Property @{
ComputerName = $Computer
NetFXBuild = $net4Release
NetFXVersion = $dotNet4Builds[$net4Release]
} | Select-Object ComputerName, NetFXVersion, NetFXBuild
}
}
}
```
Проверка установленной версии WMF на удаленном компьютере:
PS C:\> $ComputerName = "c016.mkucou.local"
PS C:\> Invoke-Command -Computername $ComputerName -Scriptblock {$PSVersionTable.psversion}
Major Minor Build Revision PSComputerName
----- ----- ----- -------- --------------
4 0 -1 -1 c016.mkucou.local