PowerShell
PowerShell의 변수
수색…
소개
변수는 값을 저장하는 데 사용됩니다. 값을 모든 유형으로 지정하면 콘솔 / 스크립트 전체에서 값을 사용할 수 있도록 어딘가에 값을 저장해야합니다. PowerShell의 변수 이름은 $ Variable1 에서와 같이 $로 시작하고 값은 $ Variable1 = "Value 1" 처럼 =를 사용하여 지정됩니다 .PowerShell은 많은 수의 변수 유형을 지원합니다. 정수, 십진수, 배열 및 버전 번호 또는 IP 주소와 같은 고급 유형조차도 포함 할 수 있습니다.
단순 변수
powershell의 모든 변수는 미국 달러 기호 ( $
)로 시작합니다. 가장 간단한 예는 다음과 같습니다.
$foo = "bar"
이 명령문은 foo
라는 변수에 문자열 값 "bar"를 할당합니다.
변수 제거
메모리에서 변수를 제거하려면 Remove-Item
cmdlet을 사용하면됩니다. 참고 : 변수 이름에는 $
포함되지 않습니다.
Remove-Item Variable:\foo
Variable
에는 대부분의 * -item cmdlet이 파일 시스템처럼 작동 할 수 있도록하는 공급자가 있습니다.
변수를 제거하는 또 다른 방법은 Remove-Variable cmdlet 및 해당 별칭 인 rv를 사용하는 것입니다.
$var = "Some Variable" #Define variable 'var' containing the string 'Some Variable'
$var #For test and show string 'Some Variable' on the console
Remove-Variable -Name var
$var
#also can use alias 'rv'
rv var
범위
변수의 기본 범위 는 둘러싼 컨테이너입니다. 스크립트 외부 나 다른 컨테이너의 경우 범위는 Global
입니다. 스코프 를 지정하기 위해 변수 이름 $scope:varname
접두사가 붙습니다 $scope:varname
like so :
$foo = "Global Scope"
function myFunc {
$foo = "Function (local) scope"
Write-Host $global:foo
Write-Host $local:foo
Write-Host $foo
}
myFunc
Write-Host $local:foo
Write-Host $foo
산출:
Global Scope Function (local) scope Function (local) scope Global Scope Global Scope
CmdLet 출력 읽기
기본적으로 powershell은 출력을 호출하는 엔터티에 반환합니다. 아래 예를 고려해보십시오.
Get-Process -Name excel
이것은 단순히 이름과 일치하는 실행중인 프로세스를 호출하는 엔터티에 반환합니다. 이 경우 PowerShell 호스트. 그것은 다음과 같은 것을 인쇄합니다.
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1037 54 67632 62544 617 5.23 4544 1 EXCEL
이제 출력에 변수를 지정하면 아무 것도 인쇄하지 않습니다. 물론 변수는 출력을 유지합니다. (그것은 문자열이됩니다, 객체 - 모든 유형의 문제)
$allExcel = Get-Process -Name excel
따라서 동적 이름으로 변수를 지정하려는 시나리오가 있다고 가정 해 -OutVariable
매개 변수를 사용할 수 있습니다.
Get-Process -Name excel -OutVariable AllRunningExcel
여기에 '$'이 누락되어 있습니다. 이 두 할당 간의 주요 차이점은 출력을 AllRunningExcel 변수에 할당하는 것과 별개로 출력한다는 것입니다. 다른 변수에 할당하도록 선택할 수도 있습니다.
$VarOne = Get-Process -Name excel -OutVariable VarTwo
위의 시나리오는 매우 드물지만 변수 $ VarOne과 $ VarTwo는 같은 값을 갖습니다.
이제 이것을 생각해보십시오.
Get-Process -Name EXCEL -OutVariable MSOFFICE
Get-Process -Name WINWORD -OutVariable +MSOFFICE
첫 번째 문은 단순히 Excel 프로세스를 처리하여 MSOFFICE 변수에 할당 한 다음 MS 워드 프로세스가 실행되고 MSOFFICE의 기존 값에 "추가"됩니다. 그것은 이와 같이 보일 것입니다.
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1047 54 67720 64448 618 5.70 4544 1 EXCEL
1172 70 50052 81780 584 1.83 14968 1 WINWORD
여러 변수의 목록 할당
Powershell은 변수를 여러 번 할당 할 수 있으며 배열이나 목록과 같은 거의 모든 것을 처리합니다. 이것은 다음과 같이하는 대신에 :
$input = "foo.bar.baz"
$parts = $input.Split(".")
$foo = $parts[0]
$bar = $parts[1]
$baz = $parts[2]
다음과 같이하면됩니다.
$foo, $bar, $baz = $input.Split(".")
Powershell은리스트와 같은 방식으로 대입을 처리하기 때문에 목록에 더 많은 값이 있으면 할당 할 변수 목록의 값보다 더 많은 값이 있으면 마지막 변수는 나머지 값의 배열이됩니다. 즉, 다음과 같은 작업을 수행 할 수도 있습니다.
$foo, $leftover = $input.Split(".") #Sets $foo = "foo", $leftover = ["bar","baz"]
$bar = $leftover[0] # $bar = "bar"
$baz = $leftover[1] # $baz = "baz"
배열
Powershell의 배열 선언은 다른 변수를 인스턴스화하는 것과 거의 같습니다. 즉, $name =
구문을 사용합니다. 배열의 항목은 쉼표 ( ,
)로 구분하여 선언됩니다.
$myArrayOfInts = 1,2,3,4
$myArrayOfStrings = "1","2","3","4"
arry에 추가하기
배열에 추가하는 것은 +
연산자를 사용하는 것처럼 간단합니다.
$myArrayOfInts = $myArrayOfInts + 5
//now contains 1,2,3,4 & 5!
배열을 함께 결합하기
다시 이것은 +
연산자를 사용하는 것만 큼 간단합니다.
$myArrayOfInts = 1,2,3,4
$myOtherArrayOfInts = 5,6,7
$myArrayOfInts = $myArrayOfInts + $myOtherArrayOfInts
//now 1,2,3,4,5,6,7