ⓟrogramming/PowerShell

PowerShell Script - 변수

뚱땡이 우주인 2018. 6. 26. 22:58

파워셸에서는 변수를 VARIABLE: 이라는 PSDrive에 저장하고 관리한다.

PSDrive는 디스크 드라이브처럼 다루는 데이터 저장소로 이 드라이브에서 변경하거나 확인, 제거할 수 있다.


변수를 관리하는 별도의 명령 집합도 제공한다.


PS > Get-Command -Noun Variable                                                                                        

CommandType     Name                                               Version    Source                                                
-----------     ----                                               -------    ------                                                
Cmdlet          Clear-Variable                                     3.1.0.0    Microsoft.PowerShell.Utility                          
Cmdlet          Get-Variable                                       3.1.0.0    Microsoft.PowerShell.Utility                          
Cmdlet          New-Variable                                       3.1.0.0    Microsoft.PowerShell.Utility                          
Cmdlet          Remove-Variable                                    3.1.0.0    Microsoft.PowerShell.Utility                          
Cmdlet          Set-Variable                                       3.1.0.0    Microsoft.PowerShell.Utility 
파워셸에서는 새로운 파워셸 세션을 열 때마다 고유한 VARIABLE: 드라이브를 갖는다.
이 드라이브에서는 셸 동작을 제어하는 내장변수 몇 가지가 포함된다.
이들 내장 변수 중의 일부는 읽기만 가능하고 수정이 불가능한 상수다.
예를들어, $ShellId는 일기 전용 변수지만, $Verbose Preference는 변경할 수 있다.

변수이름

중괄호({})를 사용해 감싸면 중간에 공백이 있는 다른 문자나 단어를 사용할 수 있다.
다음과 같은 예는 모두 정상적인 변수이다.
  • X
  • UserName
  • Number5
  • Moved_Svr
  • {System Path}
변수를 선언할때 $를 변수명 앞에 붙인다.
$ 표시는 파워셀 엔진에 변수 자체가 아니라 변수의 내용을 액세스하고자 한다는 의도를 알리는 것이다.

# var 변수에 daily 저장
PS > $var = 'daily'

# var dp 700에 들어갈 것 같지만 실제는 daily라는 새로운 변수가 만들어지고 여기에 700 값이 들어간다.                                                                                               
PS > Set-Variable -Name $var -Value 700                                                                                
PS > $var                                                                                                              
daily
PS > $daily                                                                                                            
700

# var 변수의 값을 바꾸기 원한 것이라면 다음과 같이 고쳐야 한다.
PS > Set-Variable -Name var -Value 700                                                                                 
PS > $var                                                                                                              
700

변수의 형식

PS > $a = Get-Process  

PS > $a | Get-Member                                                                                                   
   TypeName: System.Diagnostics.Process

기본적으로 파워셸의 처리 단위는 개체(PSObject)이므로 굳이 특정 형식을 지정할 필요가 없다.


그렇지만 변수에 형색을 꼭 지정해야 할 경우 다음과 같다.

[데이터 형식] $변수명


예) [int]$Num=42





Outlool.com 의 SMTP를 이용한 메일 전송
[CmdletBinding()]
Param(
    # Parameter help description
    [Parameter(Mandatory = $false)]
    [string]$From = "김도균 ",
    [Parameter(Mandatory = $true)]
    [string] $To,
    [Parameter(Mandatory = $false)]
    [string] $Cc = "steelflea@outlook.com",
    [Parameter(Mandatory = $true)]
    [string] $Subject,
    [Parameter(Mandatory = $false)]
    [string] $Body = "Sent from PowerShell",
    [Parameter(Mandatory = $true)]
    [pscredential] $Cred = (Get-Credential)
)

$SmtpSvr = "smtp.live.com"
$SmtpPort = "587"

Send-MailMessage -From $From -To $To -Cc $Cc `
-Subject $Subject -Body $Body -SmtpServer $SmtpSvr `
-Port $SmtpPort -UseSsl -Credential $Cred -Encoding utf8

# 사용자 지정 매개변수를 정할 때 스크립트에서 사용될 파워셀 명령의 매개변수와 일관성을 갖도록 만드는 것이 좋다.