카테고리 없음

POWERSHELL SCRIPT - 스크립트의 기능 문서화

뚱땡이 우주인 2018. 7. 1. 14:08


스크립트의 기능 문서화

'자세한 정보'를 특정 단계별로 출력하도록 내부 메시지를 보기 위해서는 명령을 실행할 때 -Verbose 스위치를 붙이면 된다.



Test-NetConnection -ComputerName www.microsoft.com -Verbose


Write-Verbose

Write-Verbose -Message "자세한 정보 표시"


위 명령은 대화식 실행과 같은 일부 시나리오에서만 적용하는 것이 좋으며 가능한 사용을 줄이는 것이 좋다. 스크립트의 실행 과 정에 정보를 표시하는 용도로 사용하라고 만들어 놓은 명령이다.


위 명령은 스크립트에서 제공하는 기능을 문서화하는데 이용할 수 있다.



function ConverTo-InchToMeter {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true)]
        [int]$Inch
    )
    BEGIN {
        #인치를 미터로 변환하는 개수
        $Const = 2.54
    }
    PROCESS {
        Write-Verbose -Message "변환할 인치 (in) : $Inch"
        Write-Verbose -Message "인치를 미터로 변환합니다."
        $result = ($Inch * $Const) / 100
        Write-Verbose -Message "변환 결과 (m) : $result"
    }
    End {

    }
}


# 결과
PS> ConverTo-InchToMeter -Inch 30 -verbose
자세한 정보 표시: 변환할 인치 (in) : 30
자세한 정보 표시: 인치를 미터로 변환합니다.
자세한 정보 표시: 변환 결과 (m) : 0.762


주석 기반 도움말

function Get-SecurityEvents {
<#
.SYNOPSIS
컴퓨터의 보안에 로그 대한 감사 정보를 가져온다.
.DESCRIPTION
이벤트 뷰어의 Windows 로그아래에서 보안 감사 로그를 대상으로 한다.
계정 로그인/로그오프 등의 감사 로그 내용을 가져온다.
.PARAMETER ComputerName
로그를 가져올 컴퓨터의 이름.
.PARAMETER EventID
보안 로그에서 원하는 이벤트의 ID.
.EXAMPLE
Get-SecurityEvents -ComputerName MyComputer
.EXAMPLE
Get-SecurityEvents -ComputerName MyComputer -EventID 4634
.EXAMPLE
Get-SecurityEvents -ComputerName MyComputer -EventID 4634 -Verbose
#>

    [CmdletBinding()]
    Param(
        [Parameter(Position=0,Mandatory=$True)]
        [string]$ComputerName,

        [int]$EventID = 4634
    )
BEGIN
{
Write-Verbose -Message "로그 이름을 입력 받는다."
$LogName = Read-Host "로그 이름을 입력하세요."
}
PROCESS
{
Write-Verbose -Message "'$ComputerName'에서 '$LogName'로그를 가져온다."
Get-EventLog -ComputerName $ComputerName `
-LogName $LogName |
     Where-Object -Property EventID -eq $EventID |
     Select-Object -First 7
}
    END {}
}


  • <# ~ #> : 주석 블록 표시
  • .SYNOPSIS : 주석의 줄거리
  • .DESCRIPTION : 함수나 스크립트의 기능에 대한 자세한 설명
  • .PARAMETER : 함수나 스크립트에서 사용하는 매개변수 정보. 매개변수 개수만큼 반복
  • .EXAMPLE : 사용 방법에 대한 예제. 예제 개수만큼 반복한다.


Get-Help Get-SecurityExample -detailed


Send-OutllokMail에 도움말과 자세한 정보 추가하기

function Send-OutlookMail{
<#
.SYNOPSIS
Outlook.com의 SMTP를 이용해 메일을 발송한다.
.DESCRIPTION
Outlook.com 서비스에서 제공하는 SMTP를 이용해 PowerShell에서 메일을 보낼 수 있다.
SMTP 서버는 ‘smtp.live.com’이며 포트는 587이다.
이 기능은 Microsoft의 계정이 필요하다.
.PARAMETER From
보내는 사람
.PARAMETER To
받는 사람
.PARAMETER Cc
참조 수신자
.PARAMETER Subject
메일 제목
.PARAMETER Body
메일 본문 내용
.EXAMPLE
Send-OutlookMail -To recipient@anymail.com -Subject “메일 제목” -Body “메일 본문”
.EXAMPLE
Send-OutlookMail -From sender@outlook.com -To recipient@anymail.com
-Subject “메일 제목” -Body “메일 본문”
.EXAMPLE
Send-OutlookMail -From sender@outlook.com -To recipient@anymail.com
-Subject “메일 제목” -Body “메일 본문” -Verbose
#>

[CmdletBinding()]
Param(
     [Parameter(Mandatory=$False)]
[string] $From = "김도균 <kimdokyun@outlook.com>",
     [Parameter(Mandatory=$True)]
[string] $To,
[Parameter(Mandatory=$False)]
[string] $Cc = "steelflea@outlook.com",
[Parameter(Mandatory=$True)]
[string] $Subject,
[Parameter(Mandatory=$False)]
[string] $Body = "PowerShell에서 보낸 메일"
)
BEGIN
{
Write-Verbose "Outlook.com의 자격증명을 입력 받는다."
$Cred = (Get-Credential)
$SmtpSvr=“smtp.live.com
$SmtpPort="587"
}
PROCESS
{
Write-Verbose "'$To'에게 '$Subject'제목의 메일을 발송한다."
Send-MailMessage -From $From -To $To -Cc $Cc -Subject $Subject `
-Body $Body -SmtpServer $SmtpSvr -Port $SmtpPort -UseSsl `
-Credential $Cred -Encoding UTF8
}
END
{
Write-Verbose "저장된 자격증명을 지운다."
Clear-Variable -Name Cred
}
}