web-dev-qa-db-fra.com

Comment faire en sorte que les applets de commande PowerShell 4 telles que Test-NetConnection fonctionnent sur Windows 7?

La situation. Sur une machine Windows 7 SP1, j'ai mis à jour avec Windows6.1-KB2819745-x64-MultiPkg.msu. De plus, dans PowerShell, $ PSVersionTable indique maintenant "PSVersion 4.0".

À l'heure actuelle, je conclus que de nombreuses applets de commande PowerShell 4, telles que Test-NetConnection, ne fonctionneront que sous Windows 8.1. Cependant, je me demandais s'il existait une solution permettant d'importer les modules PowerShell 4 sur mon ordinateur Windows 7.

16
Guy Thomas

Vous ne pouvez pas, ils s'appuient sur les fonctionnalités sous-jacentes du système d'exploitation plus récent (8.0 ou 8.1) et ne peuvent pas être reportés sur W7. L'alternative consiste à écrire vos propres fonctions/modules pour répliquer les nouvelles applets de commande à l'aide de méthodes d'infrastructure .NET. 

Par exemple, la cmdlet Get-FileHash est un élément unique dans Powershell 4.0, mais pour répliquer en 2.0, nous devons utiliser .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()
12
Knuckle-Dragger

Au moins Test-NetConnection peut être ramené sur Windows 7. Il suffit de copier les dossiers NetTCPIP, DnsClient, NetSecurity à partir d'un ordinateur Windows pris en charge avec la même version PS (win8.1, Win10, etc.). Dossier - C:\Windows\System32\WindowsPowerShell\v1.0\Modules. Alors Import-Module -Name C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NetTCPIP -Verbose

Sinon, vous pouvez importer un module depuis une machine distante (par exemple, win2012):

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

J'ai eu le même problème sur mon Windows 7 x64 et les deux solutions ont fonctionné pour moi à partir de PowerShell 5.1.

7
Anton Krouglov

Ajout à la réponse de @Anton Krouglov. Les modules PowerShell sont compatibles entre plates-formes. Ainsi, un module copié à partir de Windows Server 2012 R2 x64 peut être importé dans Windows 7 x86. Même si vous vous exécutez en tant qu'utilisateur standard sans le droit de les copier dans C:\Windows\System32\WindowsPowerShell\v1.0\Modules, vous pouvez le copier dans n'importe quel dossier local et l'exécuter.

En supposant que vous ayez copié les modules NetTCPIP, DnsClient, NetSecurity à partir d'un ordinateur Server 2012 ou version ultérieure et les enregistrer dans un dossier, vous pouvez les importer à l'aide de 

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

Autant que je sache, Win 2008 R2/win 7 ne dispose tout simplement pas des compteurs utilisés par les méthodes .NET pour implémenter get-netstuff.

La nouvelle version de PowerShell peut implémenter la comparaison de hachage, etc., puisque cela n’est lié à rien, mais à un morceau de code. Mais si vous voulez utiliser, par exemple, Get-NetTCPConnection, rien ne s'affiche. J'espère que ça a aidé. 

0
Tolvaj Péter