■ Set-PSBreakpoint 명령에서 -Command/-Action 스위치를 사용해 특정 함수 실행시 특정 조건을 만족하는 경우 중단점을 설정하는 방법을 보여준다. ▶ 실행 명령
|
Set-PSBreakpoint -Command Get-SecurityEvents -Action {if($LogName -ne "Security") {break}} |
■ Set-PSBreakpoint 명령에서 -Variable/-Script 스위치를 사용해 특정 변수에 중단점을 설정하는 방법을 보여준다. ▶ 실행 명령
|
Set-PSBreakpoint -Variable LogName -Script .\test.ps1 |
■ Set-PSBreakpoint 명령에서 -Line/-Script 스위치를 사용해 특정 라인에 중단점을 설정하는 방법을 보여준다. ▶ 실행 명령
|
Set-PSBreakpoint -Line 11 -Script .\test.ps1 |
■ 스크립트 파일 실행시 -Debug 스위치를 사용해 디버깅하는 방법을 보여준다. ▶ 실행 명령
■ Write-Debug 명령에서 -Message 스위치를 사용하는 방법을 보여준다. ▶ 실행 명령
|
Write-Debug -Message "START DEBUG" |
■ Copy-Item 명령에서 -Path/-Destination/-Filter 스위치를 사용해 텍스트 파일만 복사하는 방법을 보여준다. ▶ 실행 명령
|
Copy-Item -Path d:\source -Destination d:\target -Filter *.txt |
■ Get-ChildItem 명령에서 -Path/-Recurse 스위치를 사용해 디렉토리/파일명 리스트를 구하는 방법을 보여준다. ▶ 실행 명령
|
(Get-ChildItem -Path d:\source -Recurse).FullName |
■ Copy-Item 명령에서 -Destination/-FromSession 스위치를 사용해 원격 컴퓨터에서 복사하는 방법을 보여준다. ▶ 실행 명령
|
$Session = New-PSSession -ComputerName "server01" -Credential "password\userid" Copy-Item "d:\remoteSource\sample.txt" -Destination "d:\sourceTarget" -FromSession $Session |
■ Copy-Item 명령에서 -Path/-Destination/-Recurse 스위치를 사용해 소스 디렉토리를 생성 타겟 디렉토리에 복사하는 방법을 보여준다. ▶ 실행 명령
|
Copy-Item -Path "d:\source" -Destination "d:\target" -Recurse # 타겟 디렉토리가 없는 경우 타겟 디렉토리를 생성하고 복사한다. # 타겟 디렉토리가 있는 경우 타겟 디렉토리 아래에 소스 디렉토리를 생성고 복사한다. |
■ Copy-Item 명령에서 -Destination/-ToSession 스위치를 사용해 원격 컴퓨터에 복사하는 방법을 보여준다. ▶ 실행 명령
|
$Session = New-PSSession -ComputerName "server01" -Credential "password\userid" Copy-Item "d:\localSource\sample.txt" -Destination "d:\remoteTarget" -ToSession $Session |
■ Copy-Item 명령에서 -Path/-Destination/-Recurse 스위치를 사용해 소스 디렉토리를 기존 타겟 디렉토리에 복사하는 방법을 보여준다. ▶ 실행 명령
|
Copy-Item -Path "d:\source\*" -Destination "d:\target" -Recurse # 타겟 디렉토리가 없는 경우 에러가 발생한다. |
■ Copy-Item 명령에서 -Path/-Destination 스위치를 사용해 소스 파일을 타겟 디렉토리에 복사하는 방법을 보여준다. ▶ 실행 명령
|
Copy-Item -Path "d:\source\sample.txt" -Destination "d:\target" |
■ Get-Process 명령을 사용해 CPU 사용 시간이 1000초 보다 큰 프로세스 리스트를 구하는 방법을 보여준다. ▶ 실행 명령
|
Get-Process | Where-Object {$PSItem.CPU -gt 1000} |
■ Invoke-Expression 명령에서 파이프라인(|) 연산자를 사용해 스크립트 파일을 실행하는 방법을 보여준다. ▶ 실행 명령
|
"d:\test.ps1" | Invoke-Expression |
■ Invoke-Expression 명령을 사용해 로컬 컴퓨터에서 명령 또는 수식을 실행하는 방법을 보여준다. ▶ 실행 명령
|
Invoke-Expression "echo 'Hello, World!'" Invoke-Expression "Get-Process" Invoke-Expression "Get-Process | Where-Object {$PSItem.CPU -gt 1000}" |
■ Invoke-Expression 명령에서 -Command 스위치를 사용해 스크립트 파일을 실행하는 방법을 보여준다. ▶ 실행 명령
|
Invoke-Expression -Command "d:\test.ps1" |
■ Remove-Item 명령에서 -Path 스위치를 사용해 파일을 삭제하는 방법을 보여준다. ▶ 실행 명령
|
Remove-Item -Path d:\sample.txt |
■ 닷넷 프로그램 버전을 구하는 방법을 보여준다. ▶ 실행 명령
|
(Get-Command d:\TestProject.exe).Version.ToString() |
■ Write-Host 명령에서 -NoNewline 스위치를 사용하는 방법을 보여준다. ▶ 실행 명령
|
Write-Host "Hello, World!" -NoNewline |
■ Test-Path 명령에서 -Path 스위치를 사용해 파일 존재 여부를 구하는 방법을 보여준다. ▶ 실행 명령
|
Test-Path -Path d:\sample.txt |
■ .NET Newtonsoft.Json을 사용해 JSON 파일을 파싱하는 방법을 보여준다. ▶ setting.json
|
{ "MainFormLeft" : 52, "MainFormTop" : 52, "MainFormWidth" : 920, "MainFormHeight" : 690, "MainFormState" : "Maximized", "SkinStyle" : "The Bezier", "RibbonMinimized" : true, "SidebarStyle" : "NavigationPane", "SidebarWidth" : 100, "SidebarCollapsable" : false, "SidebarVisible" : true } |
▶ 실행 명령
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
$JSON = (Get-Content "d:\setting.json" -Encoding UTF8 | Out-String) [Reflection.Assembly]::LoadFile("d:\Newtonsoft.Json.dll") $Setting = [Newtonsoft.Json.Linq.JObject]::Parse($JSON) $Setting.Item("MainFormLeft" ).ToString() $Setting.Item("MainFormTop" ).ToString() $Setting.Item("MainFormWidth" ).ToString() $Setting.Item("MainFormHeight" ).ToString() $Setting.Item("MainFormState" ).ToString() $Setting.Item("SkinStyle" ).ToString() $Setting.Item("RibbonMinimized" ).ToString() $Setting.Item("SidebarStyle" ).ToString() $Setting.Item("SidebarWidth" ).ToString() $Setting.Item("SidebarCollapsable").ToString() $Setting.Item("SidebarVisible" ).ToString() |
Newtonsoft.Json.zip
■ ConvertFrom-Json 명령을 사용해 JSON 파일을 파싱하는 방법을 보여준다. ▶ setting.json
|
{ "MainFormLeft" : 52, "MainFormTop" : 52, "MainFormWidth" : 920, "MainFormHeight" : 690, "MainFormState" : "Maximized", "SkinStyle" : "The Bezier", "RibbonMinimized" : true, "SidebarStyle" : "NavigationPane", "SidebarWidth" : 100, "SidebarCollapsable" : false, "SidebarVisible" : true } |
▶ 실행 명령
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
$JSON = (Get-Content "d:\test.json" -Encoding UTF8 | Out-String) $Setting = ConvertFrom-Json $JSON $Setting.MainFormLeft $Setting.MainFormTop $Setting.MainFormWidth $Setting.MainFormHeight $Setting.MainFormState $Setting.SkinStyle $Setting.RibbonMinimized $Setting.SidebarStyle $Setting.SidebarWidth $Setting.SidebarCollapsable $Setting.SidebarVisible |
■ 넥서스 저장소(Nexus Repository)에 파일을 업로드하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
$CustomWebClientSource = @" using System.Net; public class CustomWebClient : WebClient { public int Timeout; public CustomWebClient() { Timeout = 600000; } protected override WebRequest GetWebRequest(System.Uri uri) { WebRequest request = base.GetWebRequest(uri); if(request != null) { request.Timeout = Timeout; } return request; } } "@; Add-Type -TypeDefinition $CustomWebClientSource -Language CSharp function UploadFile { [CmdletBinding()] Param ( [Parameter(Position = 0, Mandatory = $True)] [string]$SourceFilePath, [Parameter(Position = 1, Mandatory = $True)] [string]$TargetURI, [Parameter(Position = 2, Mandatory = $True)] [string]$UserID, [Parameter(Position = 3, Mandatory = $True)] [string]$Password ) BEGIN { $WebClient = New-Object CustomWebClient $Credentials = New-Object System.Net.NetworkCredential $Credentials.UserName = $UserID $Credentials.Password = $Password $WebClient.Credentials = $Credentials } PROCESS { $WebClient.UploadFile($TagetURI, 'PUT', $SourceFilePath) } END { $WebClient.Dispose() } } UploadFile -SourceFilePath 'd:/test.txt' -TargetURI 'http://nexus.net/repository/arca/test.txt' -UserID 'king' -Password 'password' |
■ Add-Type 명령에서 -TypeDefinition/-Language 스위치를 사용해 닷넷 상속 클래스를 사용하는 방법을 보여준다. ▶ 실행 명령
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
$CustomWebClientSource = @" using System.Net; public class CustomWebClient : WebClient { public int Timeout; public CustomWebClient() { Timeout = 600000; } protected override WebRequest GetWebRequest(System.Uri uri) { WebRequest request = base.GetWebRequest(uri); if(request != null) { request.Timeout = Timeout; } return request; } } "@; Add-Type -TypeDefinition $CustomWebClientSource -Language CSharp |
■ 체질량 지수를 계산하는 방법을 보여준다. ▶ test.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
[CmdletBinding()] Param ( [Parameter(Position = 0, Mandatory = $True)] [double]$Height, [Parameter(Position = 1, Mandatory = $True)] [double]$Weight ) function Calculate-BMI([double]$Height, [double]$Weight) { $BMI = $Weight / ([Math]::Pow($Height, 2)) return $BMI } function Check-ObesityIndex([double]$BMI) { Write-Debug "`$BMI : $BMI" if($BMI -ge 35) { Write-Host "아주 위험! 고도 비만입니다." Write-Debug "`$BMI는 35 이상입니다." } elseif(($BMI -ge 30) -and ($BMI -lt 35)) { Write-Host "위험! 중등도 비만입니다." Write-Debug "`$BMI는 30 이상 35 미만입니다." } elseif(($BMI -ge 25) -and ($BMI -lt 30)) { Write-Host "경고! 경도 비만입니다." Write-Debug "`$BMI는 25 이상 30 미만입니다." } elseif(($BMI -ge 23) -and ($BMI -lt 25)) { Write-Host "주의! 과체중 비만입니다." Write-Debug "`$BMI는 23 이상 25 미만입니다." } elseif(($BMI -ge 18.5) -and ($BMI -lt 23)) { Write-Host "정상입니다." Write-Debug "`$BMI는 18.5 이상 23 미만입니다." } else { Write-Host "주의! 저체중입니다." Write-Debug "`$BMI는 18.5 미만입니다." } } $ResultBMI = Calculate-BMI $Height $Weight Check-ObesityIndex $ResultBMI |
▶ 실행 명령