Как я могу получить командлеты PowerShell 4, такие как Test-NetConnection, для работы в Windows 7?

Ситуация. На машине с Windows 7 SP1 я обновил с Windows6.1-KB2819745-x64-MultiPkg.msu. Кроме того, в PowerShell $ PSVersionTable теперь сообщает "PSVersion 4.0".

В настоящее время я пришел к выводу, что многие командлеты PowerShell 4, такие как Test-NetConnection, будут работать только в Windows 8.1. Тем не менее, мне было интересно, есть ли работа, в которой я могу импортировать модули PowerShell 4 на моем компьютере под управлением Windows 7.

Ответ 1

Вы не можете, они полагаются на базовые функции новой ОС (8.0 или 8.1) и не могут быть перенесены на W7. Альтернативой является создание собственных функций/модулей для репликации новых командлетов с использованием методов.NET framework.

Например, командлет Get-FileHash является однострочным в Powershell 4.0, но для репликации в 2.0 мы должны использовать.NET.

Powershell v4

Get-FileHash -Algorithm SHA1 "C:\Windows\explorer.exe"

Powershell v2

$SHA1 = new-object -TypeName System.Security.Cryptography.SHA1CryptoServiceProvider
$file = [System.IO.File]::Open("C:\Windows\explorer.exe",[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)
[System.BitConverter]::ToString($SHA1.ComputeHash($file)) -replace "-",""
$file.Close()

Ответ 2

По крайней мере Test-NetConnection можно портировать обратно в Windows 7. Просто скопируйте папки NetTCPIP, DnsClient, NetSecurity из поддерживаемой машины Windows с той же версией PS (win8.1, Win10 и т.д.). Папка - C:\Windows\System32\WindowsPowerShell\v1.0\Модули. Затем Import-Module -Name C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NetTCPIP -Verbose

В качестве альтернативы вы можете импортировать модуль с удаленного компьютера (например, win2012):

$rsession = New-PSSession -ComputerName win2012
Import-Module NetTCPIP -PSSession $rsession

У меня была такая же проблема на моем Windows 7 x64, и оба решения работали для меня как с PowerShell 5.1.

Ответ 3

Добавляем к @Anton Krouglov ответ. Модули PowerShell совместимы с кросс-платформой. Таким образом, модуль, скопированный с Windows Server 2012 R2 x64 может быть импортирован в Windows 7 x86, и даже если вы работаете как обычный пользователь без прав на их копирование в C:\Windows\System32\WindowsPowerShell\v1.0\Modules вы можете копировать его в любую локальную папку и запустить

Предполагая, что вы скопировали NetTCPIP, DnsClient, модули NetSecurity с сервера 2012 или выше и сохранили их в папку, которую вы можете импортировать, используя

Get-ChildItem -Directory .\psmodules | foreach { Import-Module -Name $_.FullName -Verbose}
Test-NetConnection -InformationLevel "Detailed"

Ответ 4

Хотя Powershell 4.0 доступен в Windows 7, поскольку некоторые функции Knuckle-Dragger полагаются на новые функциональные возможности операционной системы. К сожалению, Test- NetConnection недоступна в Windows 7, как указано в документации.

Test- Соединение, которое присутствует, в основном ping. Test- NetConnection предлагает гораздо больше функций, позволяющих выбирать такие вещи, как TCP-порты, протоколы, трассировку маршрутов и уровни информации.

Есть сценарий Send-Ping, доступный из ScriptCenter в галерее Technet, но я думаю, что это действительно полезно, если вы почему-то застряли на Powershell 3.0?

Ответ 5

Я могу только предположить, что вы установили неверный пакет. Убедитесь, что вы загружаете правильный пакет из здесь.

Ниже вы увидите, как работает Windows 7 с пакетом обновления 1 (SP1) с помощью Powershell 4 с помощью Test-Connection и Get-FileHash:

enter image description here