2014-12-08 3 views
1

나중에 사용할 수 있도록 일부 변수를 정의하는 함수가 포함 된 스크립트가 있습니다. 예를 들어, 다음과 같습니다Powershell 변수 범위

$Rig = "TestRig1" 

    Function Setup{ 
     If ($Rig -eq "TestRig1") { 
      $Script:Server="Alpharius" 
      $Script:IIS1="Tactical" 
      $Script:IIS2="Assault" 
     } 
    } 

Setup 
<do things with $Server> 

(즉 실제 스크립트 아니지만, 그것은 유사)

어떤이주의하는 더 나은 방법은 개별적으로 각각의 라벨보다는이 있다면 약 궁금 해요 그들의 범위와 변수. 함수 내에서 선언 된 모든 변수가 스크립트 범위가되도록 말할 수있는 방법이 있습니까?

답변

5

하나의 옵션은 도트 소싱을하여 로컬 범위에서 함수를 실행하는 것입니다 :

$Rig = "TestRig1" 

    Function Setup{ 
     If ($Rig -eq "TestRig1") { 
      $Server="Alpharius" 
      $IIS1="Tactical" 
      $IIS2="Assault" 
     } 
    } 

. Setup 
<do things with $Server> 

주 '설정'이전 점과 공간 - 공간이 있어야한다. 그러면 현재 범위에서 함수가 실행되고 변수가 만들어집니다. 이미 범위에있는 기존 변수 이름과 충돌하지 않도록하십시오.

$Rig = "TestRig1" 

$RigParams = @{} 

    Function Setup{ 
     If ($Rig -eq "TestRig1") { 
      $RigParams.Server="Alpharius" 
      $RigParams.IIS1="Tactical" 
      $RigParams.IIS2="Assault" 
     } 
    } 

Setup 
<do things with $RigParams.Server> 

기능 대신 기능 범위에 새로운 변수를 생성하는 부모 범위에서 해시 테이블 키를 업데이트합니다

또 다른 옵션은 해시 테이블을 사용하는 것입니다.

+0

해시 테이블을 모두 테스트 한 결과, 해시 테이블을 작성할 수 없었습니다. ($ RigParams.IIS1 쓰기 호스트에 아무 것도 표시하지 않았지만) 로컬 범위의 함수를 호출하는 것이 정상적으로 작동했습니다. 해시 테이블 변수에 대한 더 많은 독서를 할 것입니다. 제대로 채워지지 않을지 궁금합니다. –

+1

쓰기 호스트에 올바른 구문을 사용했는지 확인하십시오. "$ ($ RigParams.IIS1)" – mjolinor

+0

아, 그럴 것입니다. 감사. –