Как заставить работать командлеты 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.
7 ответов
Ты не можешь. Они полагаются на основные функции новой ОС (8.0 или 8.1) и не могут быть перенесены обратно в Windows 7. Альтернативой является написание собственных функций / модулей для репликации новых командлетов с использованием методов .NET framework.
Могу только предположить, что вы установили не тот пакет. Убедитесь, что вы загрузили правильный пакет со страницы здесь.
Ниже вы увидите, как запускается Windows 7 Service Pack 1 с PowerShell 4 с использованием Test-Connection и Get-FileHash:

Хотя PowerShell 4.0 доступен в Windows 7, как утверждает Накл-Драггер, некоторые функции полагаются на новые функции операционной системы. К сожалению, Test-NetConnection недоступен в Windows 7, как указано в документации . >.
Test- Connection , который присутствует, в основном это ping. Test- NetConnection предлагает гораздо больше функций, позволяя выбирать такие вещи, как TCP-порты, протоколы, трассировка маршрутов и уровни информации.
Сценарий Send-Ping доступен в ScriptCenter в галерее TechNet, но я думаю, что он действительно полезен только в том случае, если вы по какой-то причине застряли на PowerShell 3.0.
Я вижу несколько ответов, подтверждающих переносимость, и мое тестирование подтверждает их утверждения:
Импортируйте все необходимые модули либо из файла, либо через сеанс PSSession на хост, на котором есть необходимые модули. Архитектура консоли PowerShell (x86 или x64), которую вы запускаете, будет определять, какую архитектуру модуля вы импортируете.
- все еще не могу сделать эту работу И
- нужен надежный тест TCP, но может не понадобиться все остальное, предоставляемое Test-NetConnection И
- Нужно, чтобы все это работало даже на PowerShell v2.0
Вы можете попробовать это.
Естественно, должна быть возможность создать цикл, который проверяет несколько соединений и выводит результаты, выбирая свойства $ TCPClient. Мое первоначальное тестирование показывает, что вам нужно выбрать эти свойства.
Адрес, который вы проверили
Порт, который вы тестировали
Насколько мне известно, в Windows Server 2008 R2 / Windows 7 просто нет счетчиков, которые используются методами .NET для реализации get-netstuff.
В новой версии PowerShell может быть реализовано сравнение хэшей и т. Д., Поскольку это ни с чем не связано, это просто кусок кода. Но если вы хотите использовать, например, Get-NetTCPConnection, показывать нечего.
Добавление в Ответ Антона Круглова. Модули PowerShell кроссплатформенные. Таким образом, модуль, скопированный из Windows Server 2012 R2 x64, можно импортировать в Windows 7 x86, и даже если вы работаете как стандартный пользователь без прав на копирование их в C:\Windows\System32\WindowsPowerShell\v1.0\Modules , вы можете скопировать его в любую локальную папку и запустить.
Предположим, вы скопировали модули NetTCPIP , DnsClient и NetSecurity с компьютера под управлением Windows Server 2012 или более поздней версии и сохранили их в папку, которую можно импортировать с помощью
По крайней мере, Test-NetConnection можно перенести обратно в Windows 7. Просто скопируйте папки NetTCPIP, DnsClient и NetSecurity с поддерживаемого компьютера Windows с той же версией PowerShell (Windows 8.1, Windows 10 и т. Д.). Папка — C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules. Тогда Import-Module -Name C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NetTCPIP -Verbose
Кроме того, вы можете импортировать модуль с удаленного компьютера (скажем, win2012 ):
У меня была такая же проблема на моей Windows 7 x64, и оба решения работали для меня, начиная с PowerShell 5.1.
Как заставить командлеты 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
по крайней мере 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 ):
у меня была такая же проблема на моем 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 или более поздней версии и сохраните их в папку, которую вы можете импортировать с помощью
насколько я знаю, Win 2008 R2 / win 7 просто не имеет счетчиков, которые методы .NET используют для реализации get-netstuff.
новая версия PowerShell может реализовать хэш-сравнение и т. д., Так как это ни с чем не связано, просто кусок кода. Но если вы хотите использовать для excample Get-NetTCPConnection, показывать нечего. Надеюсь, это помогло.
в то время как Powershell 4.0 доступен в Windows 7, поскольку Knuckle-Dragger утверждает, что некоторые функции зависят от новых функций операционной системы. К сожалению, Test-NetConnection недоступен в Windows 7, как указано в документация.
!—6—>подключение, который присутствует, в основном ping. Тест —NetConnection предлагает гораздо больше функциональности, позволяющей выбирать такие вещи, как TCP-порты, протоколы, маршрут уровни трассировки и информации.
в галерее Technet доступен скрипт отправки Ping из ScriptCenter, но я думаю, что это действительно полезно, если вы по какой-то причине застряли на Powershell 3.0?
Я могу только предположить, что вы установили неправильный пакет. Убедитесь, что вы загрузили правильный пакет из здесь.
ниже вы увидите в Windows 7 пакет обновления 1 с Powershell 4 с помощью Test-Connection и Get-FileHash:
Test-NetConnection: проверка открытых/закрытых TCP портов из PowerShell
08.06.2022
itpro
PowerShell
комментариев 5
В PowerShell 4.0 (Windows 2012 R2, Windows 8.1 и выше) появился встроенный командлет для проверки сетевых соединений — Test-NetConnection. С помощью данного командлета вы можете проверить доступность удаленного сервера или сетевой службы на нем, блокировку TCP портов файерволами, проверить доступность по ICMP и маршрутизацию. По сути, командлет Test-NetConnection позволяет заменить сразу несколько привычных сетевых утилит: ping, traceroute, сканер TCP портов и т.д.
Основное преимущество командлета Test-NetConnection – он уже входит в состав всех современных версий Windows и вам не нужно устанавливать его отдельно. Командлет входит в состав модуля NetTCPIP (начиная с PoSh v4.0).

Значение 4 в столбце Major говорит о том, что на компьютере установлен PowerShell 4.0.
TCP Port Ping: Использование Test-NetConnection для проверки открытых портов и доступности серверов
Проверим, открыт ли порт TCP 25 (SMTP протокол) на почтовом сервере с помощью Test-NetConnection:
Test-NetConnection -ComputerName msk-msg01 -Port 25
В сокращенном виде аналогичная команда выглядит так:
TNC msk-mail1 -Port 25

Разберем результат команды:
Как вы видите, командлет выполняет разрешение имени сервера в IP адрес, выполняется проверка ответа ICMP (аналог ping) и доступность TCP порта. Указанный сервер доступен по ICMP ( PingSucceeded = True ) и 25 TCP порт также отвечает ( RemotePort=25, TcpTestSucceeded= True ).
У командлета есть специальный параметр –CommonTCPPort, позволяющий указать наименование известного сетевого протокола (HTTP, RDP, SMB, WINRM).
Например, чтобы проверить доступность веб-сервера, можно использовать команду:
Test-NetConnection -ComputerName winitpro.ru -CommonTCPPort HTTP
Test-NetConnection msk-rds1 –CommonTCPPort RDP
Можно вывести все параметры, которые возвращает командлет Test-NetConnection:
Test-NetConnection msk-man01 -port 445|Format-List *

Если нужна только информация по доступности TCP порта, в более лаконичном виде проверка может быть выполнена так:
TNC msk-mail1 -Port 25 -InformationLevel Quiet
Командлет вернул True, значит удаленный порт доступен.
![]()
(New-Object System.Net.Sockets.TcpClient).Connect(‘msk-msg01’, 25)

В Windows 10/ Windows Server 2016 вы можете использовать командлет Test-NetConnection для трассировки маршрута до удаленного сервера при помощи параметра –TraceRoute (аналог tracert). С помощью параметра –Hops можно ограничить максимальное количество хопов при проверке.
Test-NetConnection msk-man01 –TraceRoute
Командлет вернул сетевую задержку при доступе к серверу в милисекундах ( PingReplyDetails (RTT) : 41 ms ) и все IP адреса маршрутизаторов на пути до целевого сервера.

Test-NetConnection в скриптах мониторинга
Следующая команда позволить проверить доступность определенного порта на множестве серверов, список которых хранится в текстовом файле servers.txt. Нас интересуют сервера, где искомая служба не отвечает:
Аналогичным образом вы можете создать простейшую систему мониторинга, которая проверяет доступность серверов и выводит уведомление, если один из серверов недоступен.
Например, вы можете проверить доступность основных служб на всех контроллеров домена (список DC можно получить командлетом Get-ADDomainController). Проверим следующие службы на DC (в утилите PortQry есть аналогичное правило Domain and trusts):
- RPC – TCP/135
- LDAP – TCP/389
- LDAP – TCP/3268
- DNS – TCP/53
$Ports = «135»,»389″,»636″,»3268″,»53″,»88″,»445″,»3269″, «80», «443»
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address,isGlobalCatalog,Site,Forest,OperatingSystem
ForEach($DC in $AllDCs)
<
Foreach ($P in $Ports)<
$check=Test-NetConnection $DC -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
else
>
Скрипт проверит указанные TCP порты на контроллерах домена, и, если один из портов недоступен, выделит его красным цветом (с небольшими доработками можно запустить данный PowerShell скрипт как службу Windows).

Сканер сети на PowerShell
Также вы можете реализовать простой сканер портов и IP подсетей для сканирования удаленных серверов или подсетей на открытые/закрытые TCP порты.