Как я могу получить командлеты 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: