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.
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()
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.
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"
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é.