Как заставить командлеты PowerShell 4, такие как Test-NetConnection, работать в Windows 7?

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

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

6 ответов


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

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

PowerShell для В4

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()

по крайней мере Test-NetConnection можно портировать обратно в Windows 7. Просто скопируйте папки NetTCPIP, DnsClient, NetSecurity с поддерживаемой машины Windows с той же версией PS (win8.1, Win10 etc). Папка - C:\Windows\System32\WindowsPowerShell\v1.0\Modules - ... Тогда 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.


добавление к ответу @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"

насколько я знаю, Win 2008 R2 / win 7 просто не имеет счетчиков, которые методы .NET используют для реализации get-netstuff.

новая версия PowerShell может реализовать хэш-сравнение и т. д., Так как это ни с чем не связано, просто кусок кода. Но если вы хотите использовать для excample Get-NetTCPConnection, показывать нечего. Надеюсь, это помогло.


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

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

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


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

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

enter image description here