2017-11-08 8 views
5

ZusammenfassungUnterschied zwischen `PowerShellVersion` und` PowerShellHostVersion`

Was ist der Unterschied zwischen dem Powershell-Modul Manifest Werten PowerShellVersion und PowerShellHostVersion?

Long Version

Wenn ein neues Modul zu schaffen manifest gibt es Einstellungen sowohl für die Mindestversion von Powershell in diesem Modul erforderlich und auch die minimalen Version der Powershell-Host erforderlich. das heißt

New-ModuleManifest -Path '.\MyModule.psd1' -PowerShellVersion '5.0' -PowerShellHostVersion '2.0'

PowerShellVersion betrifft $PSVersionTable.PSVersion.Major (NB: Bezieht sich auf die Hauptversion, da alle gültigen Werte 0 Set für ihre Nebenversion/keine Build oder Revisionsnummern haben).

PowerShellHostVersion ist derjenige, auf dem ich nicht klar bin. Meine Überzeugung ist, dass dies sich auf $Host.Version bezieht (d. H. Mit PowerShellHostName in Bezug auf $Host.Name). Aus meiner Erfahrung haben beide ISE (Windows PowerShell ISE Host) und ConsoleHost ihre Versionsnummern inline mit der PS-Version; Daher scheint es seltsam zu sein, dass diese nicht mit der PS-Version synchronisiert sind, wie im Beispiel angedeutet. Meine Hoffnung ist, dass dies selten verwendete Parameter für seltene Anwendungsfälle sind; aber ich möchte sicherstellen, dass ich richtig verstanden habe, wozu diese dienen und ob es ein gemeinsames Szenario gibt, in dem sie anwendbar sind.

die Beispielwerte in MSDN's documentation unterscheiden (d.h. PowershellVersion ist 5.0 gegeben, während PowershellHostVersion2.0 bekommt)

Die Official Documentation nur eine kreisförmige Beschreibung gibt (d.h. fügt nicht mehr Informationen als die Parameternamen selbst impliziert).

+2

Ab PowerShell 5.1 haben PowerShell-Remote-Hosts die Version 1.0. – PetSerAl

+1

In Bezug auf @ PetSerAIs Kommentar: reproduziert von running: 'Enter-PSSession -ComputerName .'' $ Host.Version'. Hostname ist 'ServerRemoteHost'. '$ PSVersionTable' gibt nach wie vor' 5.1.14409.1012'. – JohnLBevan

+0

Führen Sie "findstr/I/S/R" Host aus. * Version Host. * Geben Sie "* .psd1" (von einer Eingabeaufforderung mit erhöhten Rechten) in "pushd"% psmodulepath% "' und 'for/F" delims = "ein. % G in ('wo powershell.exe') pushed "% ~ dpG" 'Ordner. Ich kann keine nützliche 'PowerShellHostVersion'-Darstellung finden. Also, warum willst du es in deinem Modul einrichten? – JosefZ

Antwort

0

My belief is that this relates to $Host.Version

Ihre Meinung ist richtig. Getestet durch Änderung des erstellten Manifests, um den Wert PowerShellHostVersion auf 6.0 zu setzen. Beim Import erhalten den Fehler:

Import-Module : The current Windows PowerShell host is: 'ConsoleHost' (version 
5.1.15063.674). The module 'C:\MyModule.psd1' requires a minimum Windows PowerShell 
host version of '6.0' to run. 
At line:1 char:1 
+ Import-Module .\MyModule.psd1 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ResourceUnavailable: (C:\MyModule.psd1:String) [Import-M 
    odule], InvalidOperationException 
    + FullyQualifiedErrorId : Modules_InsufficientPowerShellHostVersion,Microsoft.PowerShel 
    l.Commands.ImportModuleCommand 

Version $Host.Version bezogen, und der Name bezieht sich auf $Host.Name

PS C:\> $Host.Version 

Major Minor Build Revision 
----- ----- ----- -------- 
5  1  15063 674 

This Shavy Levy blog post und der verknüpften PowerShell Team follow up ab 2010 eine interessante Geschichte geben. Auf meinem Rechner bekomme ich die gleiche Ausgabe für $Host.Version von Console und ISE-Hosts.
Keine Ahnung, welche Version Power GUI und andere erwähnte Hosts verwenden.