it-swarm.com.de

Wie bekomme ich PowerShell 4-Cmdlets wie Test-NetConnection für Windows 7?

Die Situation. Auf einem Windows 7 SP1-Computer habe ich mit Windows6.1-KB2819745-x64-MultiPkg.msu aktualisiert. Darüber hinaus meldet $ PSVersionTable in PowerShell jetzt "PSVersion 4.0".

Derzeit ist meine Schlussfolgerung, dass viele PowerShell 4-Cmdlets wie Test-NetConnection nur unter Windows 8.1 funktionieren. Ich habe mich jedoch gefragt, ob es eine Problemumgehung gab, mit der ich PowerShell 4-Module auf meinem Windows 7-Computer importieren konnte.

16
Guy Thomas

Sie können sich nicht auf die zugrunde liegenden Funktionen des neueren Betriebssystems (8.0 oder 8.1) verlassen und können nicht auf W7 zurück portiert werden. Alternativ können Sie Ihre eigenen Funktionen/Module schreiben, um die neuen Cmdlets mithilfe von .NET Framework-Methoden zu replizieren. 

Beispielsweise ist das Get-FileHash-Cmdlet in Powershell 4.0 ein One-Liner. Um es jedoch in 2.0 zu replizieren, müssen Sie .NET verwenden.

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

Zumindest Test-NetConnection kann nach Windows 7 portiert werden. Kopieren Sie einfach die Ordner NetTCPIP, DnsClient, NetSecurity von unterstützten Windows-Computern mit derselben PS-Version (Win8.1, Win10 usw.). Ordner - C:\Windows\System32\WindowsPowerShell\v1.0\Modules. Dann Import-Module -Name C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NetTCPIP -Verbose

Alternativ können Sie das Modul von einem entfernten Computer importieren (sagen Sie win2012):

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

Ich hatte das gleiche Problem unter Windows 7 x64 und beide Lösungen funktionierten für mich ab PowerShell 5.1.

7
Anton Krouglov

Hinzufügen zu @Anton Krouglovs Antwort. PowerShell-Module sind plattformübergreifend. So kann ein aus Windows Server 2012 R2 x64 kopiertes Modul in Windows 7 x86 importiert werden. Selbst wenn Sie als Standardbenutzer ohne Rechte zum Kopieren nach C:\Windows\System32\WindowsPowerShell\v1.0\Modules arbeiten, können Sie es in einen beliebigen lokalen Ordner kopieren und ausführen

Angenommen, Sie haben NetTCPIP, DnsClient, NetSecurity-Module von einem Computer mit Server 2012 oder höher kopiert und in einem Ordner gespeichert, in den Sie sie importieren können 

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

Soweit ich weiß, verfügt Win 2008 R2/win 7 einfach nicht über die Indikatoren, die die .NET-Methoden zum Implementieren von get-netstuff verwenden.

Die neue PowerShell-Version kann Hashvergleiche usw. implementieren, da dies nichts mit etwas zu tun hat, sondern nur ein Stück Code. Wenn Sie jedoch Get-NetTCPConnection als Beispiel verwenden möchten, ist nichts zu zeigen. Ich hoffe es hat geholfen. 

0
Tolvaj Péter