2017-12-20 7 views
2

powershell 버전을 확인하려고하고 있는데 어떤 버전을 기반으로했는지에 따라 다른 버전 간의 명령 및 구문 차이로 인해 특정 기능을 실행해야합니다. 쉽게 비교할 수 있도록 버전 번호 만있는 변수를 만들려고합니다. 여기에 코드가 있습니다.powershell 버전을 확인하고 버전을 기반으로 함수를 실행하십시오.

$PSversion = {$PSVersionTable.PSVersion | sort-object major | ForEach-Object  {$_.major}} 

Switch ($PSversion) { 
    2 {V2} 
    4 {V4} 
    5 {V5} 
} 

function V2 { 
    "You have Powershell Version 2" 
} 

function V4 { 
    "You have Powershell Version 4" 
} 

function V5 { 
    "You have Powershell Version 5" 
} 

변수의 내용을 출력 할 때 빈 줄을 반환 할 때 번호와 줄 바꿈이 생깁니다. 나는 바꾸기를 사용하여 새 줄을 없애려고했지만 항상 그곳에 있습니다. 변수 명령을 powershell 창에 직접 입력 한 다음 변수의 내용을 인쇄하면 새 행이 아닌 버전 번호 만 표시됩니다. 같은 파워 쉘 창에서 스크립트를 실행하면 아무 것도 얻지 못합니다.

enter image description here

이에 어떤 도움을 주시면 감사하겠습니다! 이 방법을 사용할 필요가 없습니다. PowerShell 버전을 확인하고 버전을 기반으로 함수를 실행하는 방법은 제가 찾고있는 전부입니다.

+2

또한 숙박 –

+4

을 정의 된 개선 :'Switch ($ PSVersionTable.PSVersion.Major)' – TheIncorrigible1

+1

이 접근에 대한 일반적인 코멘트 : 내기가있다. 특정 속성, 기능 또는 무엇이든지 버전을 기반으로 추정하는 것보다 더 큰지 확인하십시오. 또한 ['# Requires'] (https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_requires?view=powershell-5.1) 지시문을 살펴 보도록 권합니다. – iRon

답변

5

@ MathiasRJesson이 함수를 사용하기 전에 함수를 이동하는 것에 대한 설명 외에도 $PSversion 변수에 스크립트 블럭을 할당하고 있습니다. 그것을 평가하는 것이 아닙니다.

이 :

$PSversion = $PSVersionTable.PSVersion | sort-object major | ForEach-Object  {$_.major} 

하거나 수 :

$PSversion = {$PSVersionTable.PSVersion | sort-object major | ForEach-Object  {$_.major}} 

은이어야한다

$PSversion = $PSVersionTable.PSVersion.Major 
이 기능을 _after_하는`switch` 문을 이동
+0

도움을 주셔서 감사합니다. 이제 완벽하게 작동합니다! – Brum