336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

파워셸에서는 변수를 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

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


'ⓟrogramming > PowerShell' 카테고리의 다른 글

POWERSHELL SCRIPT - 파워셸 범위  (0) 2018.06.28
POWERSHELL SCRIPT - 모듈화  (0) 2018.06.28
PowerShell Script - 기초  (0) 2018.06.26
파이프라인 시스템  (0) 2018.06.25
개체 (Object)  (0) 2018.06.23
블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

파워셸에서 사용하는 파일 확장자의 종류

 확장자

 설명

.ps1 

 파워셸 스크립트 파일

 .psm1

 파워셸 스크립트 모듈

 .psd1

 모듈 메니페스트

 .format.ps1xml

 뷰 정의

 .ps1xml

 타입 확장을 포함한 기타 xml파일

 .psc

 파워셸 콘솔 구성 파일

 .pscc

 파워셸 세션 구성 파일


실행 정책

파워셸에서 사용하는 스크립트는 여타의 다른 종류의 스크립트와 눈에 띄는 차이점이 하나 있는데, 스크립트 하단에 전자 서명이 들어갈 수 있다/


파워셸에서 안전한 스크립트를 실행하려면 기본적으로 서명이 필요하다..



실행 정책을 다루는 데 필요한 두 가지 명령은 Get-ExecutionPolicy 와 Set-ExecutionPolicy이다.




# Get-ExecutionPolicy  : 현재 파워셸 세션에서 실행 정책을 확인
PS > Get-ExecutionPolicy                                                     
Unrestricted

# Set-ExecutionPolicy : 원하는 실행 정책을 지정하며, -ExecutionPolicy 매개변수에서 지정한다.
PS> Get-Help Set-ExecutionPolicy -Full                                                                                 
NAME
    Set-ExecutionPolicy
    
SYNTAX
    Set-ExecutionPolicy [-ExecutionPolicy] {Unrestricted | RemoteSigned | AllSigned | Restricted | Default | Bypass | Undefined} [[-
    Scope] {Process | CurrentUser | LocalMachine | UserPolicy | MachinePolicy}] [-Force] [-WhatIf] [-Confirm]  []
    
    
PARAMETERS
    -Confirm
        
        Required?                    false
        Position?                    Named
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      cf
        Dynamic?                     false
        
    -ExecutionPolicy 
        
        Required?                    true
        Position?                    0
        Accept pipeline input?       true (ByValue)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -Force
        
        Required?                    false
        Position?                    Named
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -Scope 
        
        Required?                    false
        Position?                    1
        Accept pipeline input?       true (ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -WhatIf
        
        Required?                    false
        Position?                    Named
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      wi
        Dynamic?                     false
        
    
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer, PipelineVariable, and OutVariable. For more information, see
        about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). 
    
    
INPUTS
    Microsoft.PowerShell.ExecutionPolicy
    Microsoft.PowerShell.ExecutionPolicyScope
    
    
OUTPUTS
    System.Object
    
ALIASES
    None
    

REMARKS
    Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
        -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
        -- To view the Help topic for this cmdlet online, type: " get-help="" set-executionpolicy="" -online"="" or="" go="" to="" https:="" go.microsoft.com="" fwlink="" ?linkid="113394." <="" pre="">

실행 정책의 종류

실행 정책 

설명 

 Restricted

 구성 파일을 로드 하거나 스크립트를 실행하지 않는다.

 AllSigned

 로컬 컴퓨터에서 작성하는 스크립트를 포함하여 모든 스크립트 및 구성 파일에 신뢰할 수 있는 게시자가 서명해야 한다.

 RemoteSigned

 인터넷에서 다운로드한 모든 스크립트 및 구성 파일에 대해 신뢰할 수 있는 게시자가 서명해야 한다.

 UnRestricted

 모든 구성 파일을 로드하고 모든 스크립트를 실행한다. 인터넷에서 다운로드한 서명되지 않은 스크립트를 실행할 경우 실행하기 전에 사용권한을 묻는 메시지가 표시된다.

 Bypass

 어떤 스크립트도 차단하지 않으며 경고나 메시지를 표시하지 않는다.

 Undefined

 현재 할당된 실행 정책을 현재 범위에서 제거한다. 이 옵션으로 그룹 정책에서 설정한 실행 정책을 제거할 수 있다.


PS > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned   


'ⓟrogramming > PowerShell' 카테고리의 다른 글

POWERSHELL SCRIPT - 모듈화  (0) 2018.06.28
PowerShell Script - 변수  (0) 2018.06.26
파이프라인 시스템  (0) 2018.06.25
개체 (Object)  (0) 2018.06.23
모듈과 스냅인  (0) 2018.06.23
블로그 이미지

뚱땡이 우주인

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

파이프라인은 둘 이상의 명령을 포함하여 순차적으로 실행할 수 있는 구조로, 명령 줄 인터페이스에 사용되는 중요한 개념이다.


파이프라인을 사용한 명령은 왼쪽에서 오른쪽 방향으로 각 명령을 실행한다. 즉, 이전 명령의 결과가 다음 명령의 입력이 되는 구조다.



# 시스템의 프로세스 정보를 가져와 파일로 출력
PS > Get-Process | Out-File Users\process.txt

# 출력 방향 재지정
# 결과를 파일로 출력할 때 다음처럼 기호 ">"를 사용하여 직접 파일로 출력 방향을 재 지정할 수 있다.
PS > Get-Process > process.txt


파워셸 명령의 출력 결과는 텍스트가 아니며, 항상 개체를 생성한다. 파워셸은 파이프라인의 맨 끝에 이를 때까지 해당 파이프라인에서 개체를 전달한다.


파이프라인의 끝에 남은 개체는 출력 명령의 재전송을 명시적으로 지정하지 않는 한, Out-Default라는 특수 명령으로 자동 전달된다. 이 Out-Default는 기본적으로 개체를 Out-Host로 전달하며, 화면에 텍스트로 표시한다.


* 파이프라인 개념실습


PS > Get-Process | Out-File c:\ServiceList.txt

PS > Get-Command -Noun *grid*
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Out-GridView                                       3.1.0.0    Microsoft.PowerShell.Utility

PS > Get-EventLog -LogName Security -Newest 5 | Out-GridView

둘 이상의 개체가 혼합된 파이프라인 출력
PS > Get-ChildItem -Path C:\Windows | Get-Member
   TypeName: System.IO.DirectoryInfo

Name                      MemberType     Definition
----                      ----------     ----------
LinkType                  CodeProperty   System.String LinkType{get=GetLinkType;}
Mode                      CodeProperty   System.String Mode{get=Mode;}
Target                    CodeProperty   System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] Target{get=GetTarget;}
Create                    Method         void Create(), void Create(System.Security.AccessControl.DirectorySecurity directorySecurity)

......


   TypeName: System.IO.FileInfo

Name                      MemberType     Definition
----                      ----------     ----------
LinkType                  CodeProperty   System.String LinkType{get=GetLinkType;}
Mode                      CodeProperty   System.String Mode{get=Mode;}

위 명령을 실행하면 FileInfo 와 DirectoryInfo라는 두 종류의 개체를 생성한다. 디렉토리 목록을 나열하면 파일과 폴더를 모두 포함하기 때문에, 파일 개체와 디렉토리 개체가 나오는 것이다.


파이프라인을 통해 여러 종류의 개체를 Get-Member로 보내면 각 개체별로 멤버를 표시한다. 



명령의 파이프라인 지원 방식


  • ByValue : 첫 번째 명령의 출력을 두 번째 명령의 매개변수 중 하나에 바인딩
  • ByPropertyName : ByValue 방식이 실패할 때 시도


'ⓟrogramming > PowerShell' 카테고리의 다른 글

PowerShell Script - 변수  (0) 2018.06.26
PowerShell Script - 기초  (0) 2018.06.26
개체 (Object)  (0) 2018.06.23
모듈과 스냅인  (0) 2018.06.23
PowerShell Basic  (0) 2018.06.19
블로그 이미지

뚱땡이 우주인

,