状況。 Windows 7 SP1マシンでは、Windows6.1-KB2819745-x64-MultiPkg.msuで更新しました。さらに、PowerShellでは$ PSVersionTableが「PSVersion 4.0」を報告するようになりました。
現在、私の結論は、Test-NetConnectionなどの多くのPowerShell 4コマンドレットがWindows 8.1でのみ動作するということです。しかし、Windows 7マシンにPowerShell 4モジュールをインポートできる回避策があるかどうか疑問に思っていました。
新しいOS(8.0または8.1)の基本機能に依存することはできず、W7に移植することはできません。別の方法は、独自の関数/モジュールを記述して、.NETフレームワークメソッドを使用して新しいコマンドレットを複製することです。
たとえば、Get-FileHashコマンドレットはPowershell 4.0では1行ですが、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()
少なくともTest-NetConnectionをWindows 7に戻すことができます。同じPSバージョン(win8.1、Win10など)がサポートされているWindowsマシンからNetTCPIP、DnsClient、NetSecurityフォルダーをコピーするだけです。フォルダー-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
モジュールをServer 2012以降のマシンからコピーし、フォルダーに保存すると、次を使用してインポートできます。
Get-ChildItem -Directory .\psmodules | foreach { Import-Module -Name $_.FullName -Verbose}
Test-NetConnection -InformationLevel "Detailed"
私の知る限り、Win 2008 R2/win 7には、.NETメソッドがget-netstuffを実装するために使用するカウンターがありません。
新しいPowerShellバージョンは、ハッシュ比較などを実装できます。これは、これが何にも関連せず、単なるコードの一部であるためです。ただし、Get-NetTCPConnectionの例に使用する場合は、何も表示されません。役に立てば幸いです。