다음을 통해 공유


주석_에_대한

간단한 설명

PowerShell 주석을 사용하는 방법을 설명하고 특수 사용 사례를 나열합니다.

긴 설명

주석을 작성하여 PowerShell 코드에 주석을 달거나 구조화하여 가독성을 높일 수 있습니다. 코드를 실행하면 PowerShell에서 주석 텍스트가 무시됩니다.

주석은 코드 판독기에게 중요한 컨텍스트를 제공합니다. 다음 용도로 주석을 사용해야 합니다.

  • 더 간단한 용어로 복잡한 코드 설명
  • 특정 접근 방식을 선택한 이유 설명
  • 알아야 할 문서 에지 사례
  • 지원 참조 자료에 대한 링크 제공

일부 주석은 PowerShell에서 특별한 의미를 갖습니다. 특별 설명을참조하세요.

PowerShell 주석 스타일

PowerShell은 다음 두 가지 주석 스타일을 지원합니다.

  • 있습니다. 텍스트(공백 포함)가 주석의 일부가 아닌 경우 # 앞에 올 수 있습니다. 주석 처리되지 않은 소스 코드와 동일한 줄에 배치된 한 줄 주석을 줄 끝 주석이라고 합니다.

  • 있습니다. 블록 주석은 여러 줄에 걸쳐 있을 수 있으며 주석 처리되지 않은 소스 코드의 앞, 후 또는 중간에 포함할 수 있습니다. 블록 내의 모든 텍스트는 공백을 포함하여 동일한 주석의 일부로 처리됩니다.

    중요하다

    블록 주석 내에 한 줄 주석을 포함할 수 있습니다. 그러나 블록 주석은 중첩할 수 없습니다. 블록 주석을 중첩하려고 하면, 외부 블록 주석은 첫 번째로 발견되는 #>에서 종료됩니다.

예제

예제 1: 한 줄 주석

# This is a single-line comment.
# This is also a single-line comment.

예제 2: 메모 차단

<#
    This is a block comment.
    Text within the block is a part of the same comment.
Whitespace is unimportant in a block comment.
#>

예제 3: 줄 끝 주석

$var = 4 # This is an end-of-line comment

예제 4: 인라인 블록 주석

'Foo'; <# This is an inline block comment #> 'Bar'

예제 5: 전체 예제

<#
    .DESCRIPTION
    Demonstrates PowerShell's different comment styles.
#>
param (
    [string] $Param1, # End-of-line comment
    <# Inline block comment #> $Param2
)

$var = 1, <# Inline block comment #> 2, 2

# Single-line comment.
# Another single-line comment.
$var.Where(
    <# Arg1 note #> { $_ -eq 2 },
    <# Arg2 note #> 'First',
    <# Arg3 note #> 1
)

특별 메모

PowerShell에는 특정 사용을 지원하는 몇 가지 주석 키워드가 포함되어 있습니다.

주석 기반 도움말

한 줄 또는 블록 주석을 사용하여 함수 및 스크립트에 대한 주석 기반 도움말 콘텐츠를 작성할 수 있습니다. 사용자는 Get-Help cmdlet을 사용하여 함수 또는 스크립트에 대한 주석 기반 도움말을 볼 수 있습니다. PowerShell은 설명 및 예제 사용과 같은 정보를 제공하는 데 사용할 수 있는 15개의 주석 키워드를 정의합니다.

<#
    .DESCRIPTION
    Comment-based help using a block comment.
#>
function Get-Function { }
# .DESCRIPTION
# Comment-based help using multiple single-line comments.
function Get-Function { }

자세한 내용은 다음을 참조하세요.

#Requires

#Requires 문은 현재 PowerShell 세션이 지정된 필수 구성 요소를 충족하지 않는 한 스크립트가 실행되지 않도록 합니다. #Requires 스크립트의 모든 줄에 나타날 수 있지만 위치에 관계없이 동일한 방식으로 처리됩니다.

#Requires -Modules AzureRM.Netcore
#Requires -Version 6.0

param (
    [Parameter(Mandatory)]
    [string[]] $Path
)

자세한 내용은 about_Requires참고하십시오.

서명 블록

스크립트는 PowerShell 실행 정책을 준수할 수 있도록 서명할 수 있습니다. 서명되면 서명 블록이 스크립트의 끝에 추가됩니다. 이 블록은 스크립트가 실행되기 전에 PowerShell에서 읽는 여러 단일 줄 주석의 형태를 취합니다.

# SIG # Begin signature block
# ...
# SIG # End signature block

자세한 내용은 서명 정보을 참조하세요.

셰뱅

Unix와 유사한 시스템에서 shebang(#!)는 스크립트의 시작 부분에서 스크립트를 실행하는 데 사용해야 하는 셸을 나타내는 데 사용되는 지시문입니다. Shebang은 PowerShell 언어의 일부가 아닙니다. PowerShell은 이를 일반 주석으로 해석합니다. Shebang은 운영 체제에 의해 해석됩니다.

다음 예제에서 shebang은 비 PowerShell 컨텍스트에서 스크립트를 호출할 때 PowerShell이 스크립트를 실행하도록 합니다.

#!/usr/bin/env pwsh
Write-Host 'Begin script'

코드 편집기 영역 표식

일부 코드 편집기에서는 코드 섹션을 축소하고 확장할 수 있는 지역 표식을 지원합니다. PowerShell의 경우 지역 표식은 #region 시작하여 #endregion끝나는 주석입니다. 영역 표식은 선의 시작 부분에 있어야 합니다. 지역 표식은 PowerShell ISE 및 PowerShell 확장을 사용하는 Visual Studio Code에서 지원됩니다. 지역 표식은 PowerShell 언어의 일부가 아닙니다. PowerShell은 이를 일반 주석으로 해석합니다.

자세한 내용은 Visual Studio Code 설명서에서 Basic 편집의 접기 섹션을 참조하세요.

문자열 토큰의 주석

#<# #> 확장 가능한 또는 축자 문자열 내에서 특별한 의미가 없습니다. PowerShell은 문자 그대로 문자를 해석합니다.

PS> '# This is not interpreted as a comment.'
# This is not interpreted as a comment.

PS> "This is <# also not interpreted #> as a comment."
This is <# also not interpreted #> as a comment.

그러나 특정 PowerShell 기능은 주석이 포함된 문자열로 작동하도록 설계되었습니다. 주석 해석은 특정 기능에 따라 달라집니다.

정규식 주석

PowerShell의 정규 표현식(Regex)은 두 가지 주석 스타일을 지원하는 .NET Regex 엔진을 사용합니다.

  • 인라인 주석((?#))
  • 줄 끝 주석(#)

Regex 주석은 PowerShell의 모든 regex 기반 기능에서 지원됩니다. 예를 들어:

PS> 'book' -match '(?# This is an inline comment)oo'
True

PS> 'book' -match '(?x)oo# This is an end-of-line comment'
True

PS> $regex = 'oo # This is an end-of-line comment'
PS> 'book' -split $regex, 0, 'IgnorePatternWhitespace'
b
k

메모

줄 끝에 있는 정규식 주석에는 (?x) 형식이나 IgnorePatternWhitespace 옵션이 필요합니다.

자세한 내용은 다음을 참조하세요.

JSON 주석

PowerShell 6.0부터 ConvertFrom-Json cmdlet은 다음 JSON 주석 스타일을 지원합니다.

  • 한 줄 주석(//)
  • 블록 주석(/* */)

메모

Invoke-RestMethod cmdlet은 수신된 JSON 데이터를 자동으로 역직렬화합니다. PowerShell 6.0 이상에서는 JSON 데이터에서 주석이 허용됩니다.

예를 들어:

'{
    "Foo": "Bar" // This is a single-line comment
}' | ConvertFrom-Json
Foo
---
Bar

경고

PowerShell 7.4부터 Test-Json cmdlet은 주석이 있는 JSON을 더 이상 지원하지 않습니다. JSON에 주석이 포함된 경우 오류가 반환됩니다. 7.4 이전의 지원되는 버전에서는 Test-Json가 주석이 있는 JSON을 성공적으로 구문 분석합니다. PowerShell 7.5에서 Test-Json JSON 주석을 무시하는 옵션이 포함되어 있습니다.

CSV 주석

Import-CsvConvertFrom-Csv W3C 확장 로그 형식을 지원합니다. 해시 문자(#)로 시작하는 줄은 주석으로 처리되며 주석이 #Fields: 시작하고 열 이름의 구분된 목록을 포함하지 않는 한 무시됩니다. 이 경우 cmdlet은 해당 열 이름을 사용합니다. Windows IIS 및 기타 웹 서버 로그의 표준 형식입니다. 자세한 내용은 확장 로그 파일 형식참조하세요.

@'
# This is a CSV comment
Col1,Col2
Val1,Val2
'@ | ConvertFrom-Csv
Col1 Col2
---- ----
Val1 Val2

Windows PowerShell 5.1에서 기본 Export-CsvConvertTo-Csv 동작은 형식 정보를 #TYPE 주석 형식으로 포함하는 것입니다. PowerShell 6.0부터 기본값은 주석을 포함하지 않지만, "IncludeTypeInformation" 매개 변수를 사용하여 이를 재정의할 수 있습니다.

[pscustomobject] @{ Foo = 'Bar' } | ConvertTo-Csv -IncludeTypeInformation
#TYPE System.Management.Automation.PSCustomObject
"Foo"
"Bar"

#TYPE 주석이 CSV 데이터에 포함된 경우 Import-CsvConvertFrom-Csv 이 정보를 사용하여 역직렬화된 개체의 pstypenames 속성을 설정합니다.

class Test { $Foo = 'Bar' }
$test = [Test]::new()

$var = $test | ConvertTo-Csv -IncludeTypeInformation | ConvertFrom-Csv
$var.pstypenames
Test
CSV:Test

주석 ConvertFrom-StringData

문자열 데이터 안에서, ConvertFrom-StringData cmdlet은 #으로 시작하는 줄을 주석으로 간주합니다. 자세한 내용은 다음을 참조하세요.

노트

  • 블록 주석은 중첩할 수 없습니다. 다음 예제에서 Baz 주석의 일부가 아닙니다.

    <#
    'Foo'
    <# 'Bar' #>
    'Baz'
    #>
    
  • <# #> 한 줄 주석 내에서 특별한 의미가 없습니다. # 블록 주석 내에서 특별한 의미가 없습니다.

  • 주석으로 처리하려면 주석 문자가 주석이 아닌 토큰의 일부가 되어서는 안 됩니다. 다음 예제에서 #Bar<#Bar#>Foo... 토큰의 일부입니다. 따라서 주석으로 처리되지 않습니다.

    PS> Foo#Bar
    Foo#Bar: The term 'Foo#Bar' is not recognized as a name [...]
    
    PS> Foo<#Bar#>
    Foo<#Bar#>: The term 'Foo<#Bar#>' is not recognized as a name [...]