2012-08-02 19 views
8

Estamos proporcionando scripts a los clientes que trabajarán solo en Powershell 2.0.¿Cómo asegurarnos de que estamos usando PowerShell 2.0?

A través de comandos podemos asegurar que PowerShell 2.0 está instalado, como a continuación

$version = Get-host | Select-object Version 

Pero si proporcionamos script de cómo garantizar que se están ejecutando desde PowerShell 2.0?

Al ejecutar el script, las características de Powershell 2.0 pueden dar errores de scripts al iniciar el script en sí. ¿No es así?

Respuesta

11

Puede anotar la secuencia de comandos con #requires y afirman que no debería ejecutar en cualquier cosa menos de PowerShell v2:

#requires -Version 2.0 

(nota al margen: este es sorprendentemente difícil de encontrar, incluso si usted sabe vagamente que existe.)

+0

¿Usted ¿Quiere decir que debería agregarse como primera línea en mi script para evitar que funcione en 1.0? – Samselvaprabu

+1

@Samselvaprabu: lea esto sobre Requirments: http://tfl09.blogspot.de/2009/01/more-in-powershells-require-statement.html – CloudyMarble

+1

Agregó un enlace a la documentación real. – Joey

0

intenta utilizar $PSVersionTable

Usted consigue algo como:

Name       Value 
    ----       ----- 
CLRVersion      2.0.50727.5456 
BuildVersion     6.1.7601.17514 
PSVersion      2.0 
WSManStackVersion    2.0 
PSCompatibleVersions   {1.0, 2.0} 
SerializationVersion   1.1.0.1 
PSRemotingProtocolVersion  2.1 
+0

Tenga en cuenta que '$ PSVersionTable' está ausente en v1. Es un buen indicador, pero un cheque ingenuo solo para la propiedad 'PSVersion' no funcionará solo. – Joey

+0

@Joey: su derecha, encontré este hilo Supongo que es lo que el OP necesita: http://stackoverflow.com/questions/1825585/how-to-determine-what-version-of-powershell-is-installed – CloudyMarble

2

Basándose en la versión de acogida no es lo más seguro que hacer que el script se puede ejecutar en máquinas que no tienen la misma versión de host que la versión de PowerShell.

La variable $ PSVersionTable se agregó en v2. Puede comprobar si la variable existe, si lo hace se está ejecutando v2 y por encima, también se puede comprobar PSVersion.Major propiedad:

if($PSVersionTable) 
{ 
    'PowerShell {0}' -f $PSVersionTable.PSVersion.Major 
} 
else 
{ 
    'PowerShell 1' 
} 
2

me gustaría hacer algo como esto:

# get version 
$ver = $PsVersionTable.psversion.major 
# Check to see if it's V2 

If ($ver -NE 2) 
    {"incorrect version - exiting; return} 
# Everything that follows is V2 

Hope this helps!

Cuestiones relacionadas