web-dev-qa-db-ja.com

Test-NetConnectionなどのPowerShell 4コマンドレットをWindows 7で動作させるにはどうすればよいですか?

状況。 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モジュールをインポートできる回避策があるかどうか疑問に思っていました。

17
Guy Thomas

新しい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()
12
Knuckle-Dragger

少なくとも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では両方のソリューションが機能しました。

8
Anton Krouglov

@Anton Krouglovの回答に追加。 PowerShellモジュールは、クロスプラットフォーム互換です。したがって、Windows Server 2012 R2 x64からコピーされたモジュールはWindows 7 x86にインポートできます。また、C:\Windows\System32\WindowsPowerShell\v1.0\Modulesにコピーする権限のない標準ユーザーとして実行している場合でも、任意のローカルフォルダーにコピーできます。走る

NetTCPIPDnsClientNetSecurityモジュールをServer 2012以降のマシンからコピーし、フォルダーに保存すると、次を使用してインポートできます。

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

私の知る限り、Win 2008 R2/win 7には、.NETメソッドがget-netstuffを実装するために使用するカウンターがありません。

新しいPowerShellバージョンは、ハッシュ比較などを実装できます。これは、これが何にも関連せず、単なるコードの一部であるためです。ただし、Get-NetTCPConnectionの例に使用する場合は、何も表示されません。役に立てば幸いです。

0
Tolvaj Péter