about_Functions
about_Functions
PowerShell에서 함수를 만들고 쓰는 방법을 하나씩 풀어볼게요. 함수는 처음에 조금 낯설 수 있지만, 바로 그 활용도 때문에 한번 익혀두면 평생 써먹는 기능이에요.
본문
짧은 설명 (Short description)
PowerShell에서 함수를 만들고 사용하는 방법을 설명해요.
자세한 설명 (Long description)
함수는 우리가 이름을 붙여 만든 PowerShell 문장 목록이에요. 함수를 실행할 때는 함수 이름을 입력하면 돼요.
PowerShell은 두 종류의 함수를 정의해요.
- function — 이름으로 호출할 수 있는 코드 블록이에요. 입력을 받고 출력을 돌려줄 수 있으며,
function키워드로 정의해요. - filter — 파이프라인에서 데이터를 처리하도록 설계된 함수 종류예요.
filter키워드로 정의해요.
함수의 문장은 네 종류의 미리 정의된 문장 블록 가운데 하나로 묶을 수 있어요. 이 블록들은 begin, process, end, clean 키워드로 이름 지어져요. 이 키워드를 쓰지 않으면 PowerShell이 문장을 알맞은 코드 블록에 알아서 넣어줘요.
함수는 cmdlet처럼 동작할 수도 있어요. C# 프로그래밍 없이도 cmdlet과 똑같이 동작하는 함수를 만들 수 있어요. 자세한 내용은 about_Functions_Advanced를 참고하세요.
중요: 스크립트 파일과 스크립트 기반 모듈 안에서는 함수를 호출하기 전에 먼저 정의해야 해요.
함수 구문 (Function syntax)
함수는 다음 구문으로 정의해요.
function [<scope:>]<name> {
param([type]$Parameter1 [,[type]$Parameter2])
dynamicparam {<statement list>}
begin {<statement list>}
process {<statement list>}
end {<statement list>}
clean {<statement list>}
}
함수에는 다음 항목들이 들어가요.
function키워드- 스코프 (선택)
- 직접 고른 이름
- 원하는 개수의 명명된 매개 변수 (선택), 동적 매개 변수 포함
- 중괄호
{}안에 들어가는 하나 이상의 PowerShell 문장
정의에서 (begin, process, end, clean) 키워드 중 하나도 쓰지 않으면, PowerShell은 문장을 end 블록에 넣어요.
dynamicparam 키워드와 함수의 동적 매개 변수에 대한 자세한 내용은 about_Functions_Advanced_Parameters를 참고하세요.
함수는 이렇게 단순할 수도 있어요.
function Get-PowerShellProcess { Get-Process pwsh }
함수가 정의되면 내장된 cmdlet처럼 사용할 수 있어요. 예를 들어 새로 만든 Get-PowerShellProcess 함수를 호출하려면 이렇게 해요.
Get-PowerShellProcess
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
110 78.72 172.39 10.62 10936 1 pwsh
함수는 이렇게 단순할 수도, cmdlet만큼 복잡할 수도 있어요.
함수는 화면에 표시하거나 변수에 할당하거나 다른 함수나 cmdlet에 넘길 수 있는 값을 돌려줄 수 있어요. 출력을 돌려주려면 return 키워드를 쓸 수 있어요. return 키워드는 함수에서 반환된 다른 출력에 영향을 주거나 억제하지 않아요. 다만 return 키워드는 그 줄에서 함수를 종료해요. 자세한 내용은 about_Return을 참고하세요.
필터 구문 (Filter syntax)
filter 함수의 의도는 파이프라인의 각 개체에서 실행되는 함수를 짧게 정의하는 속기 방법을 제공하는 거예요.
filter의 구문은 다음과 같아요.
filter [<scope:>]<name> {<statement list>}
filter 함수의 구문을 단순화하기 위해 문장 블록 키워드(begin, process, end, clean)를 생략해요. 그러면 PowerShell이 문장을 process 블록에 넣어줘요. filter 함수에서 다른 블록도 쓸 수 있지만, 원래 의도는 파이프라인의 각 개체를 처리하는 일만 하는 함수를 짧게 정의하는 거예요.
다음 filter는 파이프라인에서 로그 항목을 받아 항목 전체 또는 항목의 message 부분만 표시해요.
filter Get-EventMessage ([switch]$MessageOnly) {
if ($MessageOnly) { Out-Host -InputObject $_.Message }
else { $_ }
}
이렇게 사용할 수 있어요.
Get-WinEvent -LogName System -MaxEvents 100 | Get-EventMessage -MessageOnly
입력 처리 메서드 (Input processing methods)
이 섹션에서 설명하는 메서드를 입력 처리 메서드라고 불러요. 함수에서는 이 세 메서드가 begin, process, end 블록으로 이름 지어져요. PowerShell 7.3에서는 clean 블록 프로세스 메서드가 추가됐어요.
함수에서 이 블록들을 꼭 써야 하는 건 아니에요. 이름 있는 블록을 쓰지 않으면 PowerShell은 코드를 함수의 end 블록에 넣어요. 하지만 이 이름 있는 블록 중 하나를 쓰거나 dynamicparam 블록을 정의하면 모든 코드를 이름 있는 블록 안에 넣어야 해요.
다음 예시는 1회성 전처리를 위한 begin 블록, 파이프라인 데이터를 처리하는 process 블록, 1회성 후처리를 위한 end 블록을 담은 함수의 윤곽을 보여줘요.
Function Test-ScriptCmdlet {
[CmdletBinding(SupportsShouldProcess=$true)]
param ($Parameter1)
begin{}
process{}
end{}
}
begin
이 블록은 함수의 선택적 1회성 전처리를 제공하는 데 사용해요. PowerShell 런타임은 파이프라인에 있는 함수 인스턴스마다 이 블록의 코드를 한 번씩 실행해요.
process
이 블록은 함수의 레코드 단위 처리를 제공하는 데 사용해요. 다른 블록은 정의하지 않고 process 블록만 쓸 수도 있어요. process 블록이 실행되는 횟수는 함수를 어떻게 쓰느냐와 함수가 어떤 입력을 받느냐에 따라 달라져요.
자동 변수 $_ 또는 $PSItem에는 process 블록에서 사용할 파이프라인의 현재 개체가 들어 있어요. $input 자동 변수에는 함수와 scriptblock에서만 사용할 수 있는 열거자(enumerator)가 들어 있어요. 자세한 내용은 about_Automatic_Variables를 참고하세요.
- 파이프라인 입력 없이 함수를 호출하면 PowerShell은
process블록을 한 번만 실행해요. - 파이프라인 안에서는 함수에 도달하는 입력 개체마다
process블록이 한 번씩 실행돼요. - 함수에 도달하는 파이프라인 입력이 비어 있으면
process블록은 실행되지 않아요.begin,end,clean블록은 여전히 실행돼요. begin,end,clean블록은 여전히 실행돼요.
중요: 함수 매개 변수가 파이프라인 입력을 받고
process블록이 정의되지 않으면 레코드 단위 처리가 실패해요. 이 경우 입력과 관계없이 함수는 한 번만 실행돼요.
end
이 블록은 함수의 선택적 1회성 후처리를 제공하는 데 사용해요.
clean
clean 블록은 PowerShell 7.3에서 추가됐어요.
clean 블록은 begin, process, end 블록에 걸쳐 있는 리소스를 정리하는 편리한 방법이에요. 의미상으로는 스크립트 함수나 스크립트 cmdlet의 다른 모든 이름 있는 블록을 덮는 finally 블록과 비슷해요. 리소스 정리는 다음 시나리오에서 강제돼요.
- 파이프라인 실행이 종료 오류 없이 끝났을 때
- 파이프라인 실행이 종료 오류로 중단됐을 때
- 파이프라인이 잘렸을 때, 예:
Select-Object -First - 파이프라인이
Ctrl+c또는StopProcessing()으로 중지됐을 때
clean 블록은 Success 스트림에 기록된 모든 출력을 버려요.
주의:
clean블록을 추가하는 것은 호환성을 깨는 변경이에요.clean은 키워드로 파싱되기 때문에 사용자가 scriptblock의 첫 문장으로clean이라는 명령을 직접 호출하는 것을 막아요. 다만 문제가 될 일은 거의 없어요. 호출 연산자(& clean)를 사용해 명령을 여전히 호출할 수 있어요.
단순한 함수 (Simple functions)
함수는 복잡해야 유용한 게 아니에요. 가장 단순한 함수는 다음 형식이에요.
function <function-name> { statements }
예를 들어 다음 함수는 '관리자 권한으로 실행' 옵션으로 PowerShell을 시작해요.
function Start-PSAdmin { Start-Process PowerShell -Verb RunAs }
함수를 사용하려면 Start-PSAdmin이라고 입력해요.
함수에 문장을 추가하려면 각 문장을 별도의 줄에 입력하거나 세미콜론(;)으로 문장을 구분해요.
예를 들어 다음 함수는 시작 날짜 이후에 변경된 현재 사용자 디렉터리의 모든 .jpg 파일을 찾아요.
function Get-NewPicture {
$start = Get-Date -Month 1 -Day 1 -Year 2010
$allPics = Get-ChildItem -Path $Env:USERPROFILE\*.jpg -Recurse
$allPics | Where-Object {$_.LastWriteTime -gt $Start}
}
유용한 작은 함수들의 도구 상자를 만들 수 있어요. 이 함수들을 PowerShell 프로필에 추가하세요. 자세한 내용은 about_Profiles와 이 문서의 뒷부분을 참고하세요.
함수 이름 (Function names)
함수에는 어떤 이름이든 붙일 수 있어요. 다만 다른 사람과 공유하는 함수라면 표준 PowerShell 이름 규칙을 따르는 게 좋아요.
- 이름은 동사-명사 쌍으로 구성해야 해요. 여기서 동사는 함수가 수행하는 동작을, 명사는 cmdlet이 동작을 수행하는 대상을 나타내요.
- 모든 PowerShell 명령에는 승인된 동사(approved verbs)를 사용해야 해요. 승인된 동사를 사용하면 사용자에게 일관성을 만들어줘요.
표준 PowerShell 동사에 대한 자세한 내용은 Approved Verbs를 참고하세요.
매개 변수가 있는 함수 (Functions with parameters)
함수에 명명된 매개 변수, 위치 매개 변수, [switch] 매개 변수, 동적 매개 변수를 포함한 매개 변수를 쓸 수 있어요. 함수의 동적 매개 변수에 대한 자세한 내용은 about_Functions_Advanced_Parameters를 참고하세요.
명명된 매개 변수 (Named parameters)
원하는 만큼 명명된 매개 변수를 정의할 수 있어요. 명명된 매개 변수에 기본값을 포함할 수 있는데, 이 문서 뒷부분에서 설명할게요.
다음 샘플 구문처럼 중괄호 안에서 param 키워드로 매개 변수를 정의할 수 있어요.
function <name> {
param ([type]$Parameter1 [,[type]$Parameter2])
<statement list>
}
다음 샘플 구문처럼 중괄호 밖에서 param 키워드 없이 매개 변수를 정의할 수도 있어요.
function <name> [([type]$Parameter1[,[type]$Parameter2])] {
<statement list>
}
예를 들어 다음 함수는 대체 구문으로 두 매개 변수를 정의해요.
function Add-Numbers([int]$One, [int]$Two) {
$One + $Two
}
첫 번째 방법이 선호되긴 하지만, 두 방법 사이에 차이는 없어요.
함수를 실행할 때 매개 변수에 제공한 값은 매개 변수 이름을 담은 변수에 할당돼요. 그 변수의 값은 함수 안에서 쓸 수 있어요.
다음 예시는 Get-SmallFiles라는 함수예요. 이 함수는 $Size 매개 변수를 갖고 있어요. 함수는 $Size 매개 변수 값보다 작은 모든 파일을 표시하고, 디렉터리는 제외해요.
function Get-SmallFiles {
param ($Size)
Get-ChildItem $HOME | Where-Object {
$_.Length -lt $Size -and !$_.PSIsContainer
}
}
함수 안에서 매개 변수에 정의된 이름인 $Size 변수를 쓸 수 있어요.
이 함수를 사용하려면 다음 명령을 입력해요.
Get-SmallFiles -Size 50
매개 변수 이름 없이 명명된 매개 변수 값을 입력할 수도 있어요. 예를 들어 다음 명령은 Size 매개 변수를 지정한 명령과 같은 결과를 줘요.
Get-SmallFiles 50
매개 변수의 기본값을 정의하려면 매개 변수 이름 뒤에 등호와 값을 입력해요. 다음은 Get-SmallFiles 예시의 변형이에요.
function Get-SmallFiles ($Size = 100) {
Get-ChildItem $HOME | Where-Object {
$_.Length -lt $Size -and !$_.PSIsContainer
}
}
값 없이 Get-SmallFiles를 입력하면 함수는 $Size에 100을 할당해요. 값을 제공하면 함수는 그 값을 사용해요.
선택적으로 매개 변수의 기본값을 설명하는 짧은 도움말 문자열을 제공할 수 있어요. 매개 변수 설명에 PSDefaultValue 특성을 추가하고 PSDefaultValue의 Help 속성을 지정하면 돼요. Get-SmallFiles 함수의 Size 매개 변수 기본값(100)을 설명하는 도움말 문자열을 제공하려면 다음 예시처럼 PSDefaultValue 특성을 추가해요.
function Get-SmallFiles {
param (
[PSDefaultValue(Help = '100')]
$Size = 100
)
Get-ChildItem $HOME | Where-Object {
$_.Length -lt $Size -and !$_.PSIsContainer
}
}
PSDefaultValue 특성 클래스에 대한 자세한 내용은 PSDefaultValue Attribute Members를 참고하세요.
위치 매개 변수 (Positional parameters)
위치 매개 변수는 매개 변수 이름이 없는 매개 변수예요. PowerShell은 매개 변수 값의 순서를 사용해 각 값을 함수의 매개 변수와 연결해요.
위치 매개 변수를 쓸 때는 함수 이름 뒤에 값을 하나 이상 입력해요. 위치 매개 변수 값은 $args 배열 변수에 할당돼요. 함수 이름 뒤에 오는 값은 $args 배열의 첫 번째 위치인 $args[0]에 할당돼요.
다음 Get-Extension 함수는 제공한 파일 이름에 .txt 확장자를 추가해요.
function Get-Extension {
$name = $args[0] + ".txt"
$name
}
Get-Extension myTextFile
myTextFile.txt
[switch] 매개 변수 ([switch]parameters)
switch는 값이 필요 없는 매개 변수예요. 함수 이름 뒤에 [switch] 매개 변수 이름을 입력하면 돼요.
다음 예시는 [switch] 매개 변수를 정의하는 방법을 보여줘요.
function Switch-Item {
param ([switch]$On)
if ($On) { "Switch on" }
else { "Switch off" }
}
함수 이름 뒤에 On [switch] 매개 변수를 입력하면 함수는 Switch on을 표시해요. [switch] 매개 변수가 없으면 Switch off를 표시해요.
Switch-Item -On
Switch on
Switch-Item
Switch off
함수를 실행할 때 switch에 부울 값을 할당할 수도 있어요. 다음 예시를 볼게요.
Switch-Item -On:$true
Switch on
Switch-Item -On:$false
Switch off
스플래팅으로 매개 변수 값 넘기기 (Use splatting to pass parameter values)
스플래팅(splatting)으로 명령의 매개 변수를 나타낼 수 있어요. 이 기능은 Windows PowerShell 2.0에서 도입됐어요.
세션에서 명령을 호출하는 함수에 이 기법을 사용해요. 명령 매개 변수를 선언하거나 나열할 필요가 없고, 명령 매개 변수가 바뀌어도 함수를 바꿀 필요가 없어요.
다음 샘플 함수는 Get-Command cmdlet을 호출해요. 명령은 @args를 사용해 Get-Command의 매개 변수를 나타내요.
function Get-MyCommand { Get-Command @args }
Get-MyCommand 함수를 호출하면 Get-Command의 모든 매개 변수를 사용할 수 있어요. 매개 변수와 매개 변수 값은 @args를 사용해 명령에 전달돼요.
Get-MyCommand -Name Get-ChildItem
CommandType Name ModuleName
----------- ---- ----------
Cmdlet Get-ChildItem Microsoft.PowerShell.Management
@args 기능은 선언되지 않은 cmdlet 매개 변수와 남은 인수의 값을 나타내는 $args 자동 매개 변수를 사용해요.
자세한 내용은 about_Splatting을 참고하세요.
함수에 개체 파이프하기 (Piping objects to functions)
어떤 함수든 파이프라인에서 입력을 받을 수 있어요. begin, process, end, clean 키워드를 사용해 함수가 파이프라인 입력을 처리하는 방식을 제어할 수 있어요. 다음 샘플 구문이 이 키워드들을 보여줘요.
process 문장 목록은 파이프라인의 각 개체에 대해 한 번씩 실행돼요. process 블록이 실행되는 동안 각 파이프라인 개체는 한 번에 하나씩 $_ 자동 변수에 할당돼요.
다음 함수는 process 키워드를 사용해요. 함수는 파이프라인에서 값을 표시해요.
function Get-Pipeline
{
process {"The value is: $_"}
}
1, 2, 4 | Get-Pipeline
The value is: 1
The value is: 2
The value is: 4
파이프라인 입력이나 매개 변수 입력을 모두 받을 수 있는 함수를 원한다면 process 블록이 두 경우를 모두 처리해야 해요. 예를 들어:
function Get-SumOfNumbers {
param (
[int[]]$Numbers
)
begin { $retValue = 0 }
process {
if ($MyInvocation.ExpectingInput) {
"Pipeline input: $_"
$retValue += $_
} else {
foreach ($n in $Numbers) {
"Command line input: $n"
$retValue += $n
}
}
}
end { "Sum = $retValue" }
}
PS> 1,2,3,4 | Get-SumOfNumbers
Pipeline input: 1
Pipeline input: 2
Pipeline input: 3
Pipeline input: 4
Sum = 10
PS> Get-SumOfNumbers 1,2,3,4
Command line input: 1
Command line input: 2
Command line input: 3
Command line input: 4
Sum = 10
파이프라인에서 함수를 사용하면 함수로 파이프된 개체가 $input 자동 변수에 할당돼요. 함수는 파이프라인에서 개체가 오기 전에 begin 문장 블록으로 문장을 실행해요. 함수는 파이프라인에 개체가 더 없을 때 end 문장 블록으로 문장을 실행해요.
다음 예시는 begin과 end 문장 블록에서 사용된 $input 자동 변수를 보여줘요.
function Get-PipelineBeginEnd {
begin { "Begin: The input is $input" }
end { "End: The input is $input" }
}
파이프라인 입력으로 함수를 실행하면 다음 결과가 표시돼요.
1, 2, 4 | Get-PipelineBeginEnd
Begin: The input is
End: The input is 1 2 4
begin 문장이 실행될 때 함수에는 아직 파이프라인 입력이 없어요. end 문장은 함수에 값이 생긴 뒤에 실행돼요.
함수에 process 키워드가 있으면 $input의 각 개체는 $input에서 제거되어 $_에 할당돼요. 다음 예시는 process 문장 목록을 갖고 있어요.
function Get-PipelineInput
{
process {"Processing: $_ " }
end {"End: The input is: $input" }
}
이 예시에서 함수로 파이프된 각 개체는 process 문장 목록으로 보내져요. process 문장은 각 개체에서 한 번에 하나씩 실행돼요. 함수가 end 키워드에 도달할 때 $input 자동 변수는 비어 있어요.
1, 2, 4 | Get-PipelineInput
Processing: 1
Processing: 2
Processing: 4
End: The input is:
자세한 내용은 Using Enumerators를 참고하세요.
PowerShell 7.3에서 clean 블록이 추가됐어요. clean 블록은 begin, process, end 블록에서 만들고 사용한 리소스를 정리하는 편리한 방법이에요. 의미상으로는 스크립트 함수나 스크립트 cmdlet의 다른 모든 이름 있는 블록을 덮는 finally 블록과 비슷해요. 리소스 정리는 다음 시나리오에서 강제돼요.
- 파이프라인 실행이 종료 오류 없이 정상적으로 끝났을 때
- 파이프라인 실행이 종료 오류로 중단됐을 때
- 파이프라인이 잘렸을 때, 예:
Select-Object -First - 파이프라인이
Ctrl+C또는StopProcessing()으로 중지됐을 때
주의:
clean블록을 추가하는 것은 호환성을 깨는 변경이에요.clean은 키워드로 파싱되기 때문에 사용자가 scriptblock의 첫 문장으로clean이라는 명령을 직접 호출하는 것을 막아요. 다만 문제가 될 일은 거의 없어요. 호출 연산자(& clean)를 사용해 명령을 여전히 호출할 수 있어요.
함수 스코프 (Function scope)
함수는 함수를 만든 스코프에 존재해요.
함수가 스크립트의 일부라면 해당 스크립트 안의 문장에서 그 함수를 쓸 수 있어요. 기본적으로 스크립트 안의 함수는 그 스크립트 밖에서는 쓸 수 없어요.
함수의 스코프를 지정할 수도 있어요. 예를 들어 다음 예시에서는 함수가 전역 스코프에 추가돼요.
function Global:Get-DependentSvs {
Get-Service | Where-Object {$_.DependentServices}
}
함수가 전역 스코프에 있으면 스크립트, 함수, 명령줄에서 그 함수를 사용할 수 있어요.
함수는 새 스코프를 만들어요. 변수 같은 함수 안에서 만든 항목은 함수 스코프 안에서만 존재해요.
자세한 내용은 about_Scopes를 참고하세요.
Function: 드라이브로 함수 찾고 관리하기 (Find and manage functions using the Function: drive)
PowerShell의 모든 함수와 filter는 자동으로 Function: 드라이브에 저장돼요. 이 드라이브는 PowerShell Function 공급자가 표시해요.
Function: 드라이브를 가리킬 때는 컴퓨터의 C 드라이브나 D 드라이브를 가리킬 때처럼 Function 뒤에 콜론을 입력해요.
다음 명령은 현재 PowerShell 세션의 모든 함수를 표시해요.
Get-ChildItem Function:
함수의 명령은 함수의 definition 속성에 scriptblock으로 저장돼요. 예를 들어 PowerShell에 포함된 Help 함수의 명령을 표시하려면 이렇게 입력해요.
(Get-ChildItem Function:help).Definition
다음 구문을 사용할 수도 있어요.
$Function:help
자세한 내용은 about_Function_Provider를 참고하세요.
새 세션에서 함수 재사용하기 (Reuse functions in new sessions)
PowerShell 명령 프롬프트에서 함수를 입력하면 그 함수는 현재 세션의 일부가 돼요. 세션이 끝날 때까지 함수를 사용할 수 있어요.
모든 PowerShell 세션에서 함수를 사용하려면 함수를 PowerShell 프로필에 추가해요. 프로필에 대한 자세한 내용은 about_Profiles를 참고하세요.
함수를 PowerShell 스크립트 파일에 저장할 수도 있어요. 함수를 텍스트 파일에 입력한 다음 그 파일을 .ps1 파일 확장자로 저장해요.
함수 도움말 만들기 (Create help for functions)
Get-Help cmdlet은 함수, cmdlet, 공급자, 스크립트에 대한 도움말을 가져와요. 함수에 대한 도움말을 얻으려면 Get-Help 다음에 함수 이름을 입력해요.
예를 들어 Get-MyDisks 함수에 대한 도움말을 얻으려면 이렇게 입력해요.
Get-Help Get-MyDisks
다음 두 방법 가운데 하나로 함수에 대한 도움말을 작성할 수 있어요.
- 함수용 주석 기반 도움말 (Comment-Based Help) — 주석의 특수 키워드로 도움말을 만들어요. 함수용 주석 기반 도움말을 만들려면 주석을 함수의 시작, 끝 또는 함수 본문 안에 배치해야 해요. 주석 기반 도움말에 대한 자세한 내용은 about_Comment_Based_Help를 참고하세요.
- 함수용 XML 기반 도움말 (XML-Based Help) — 도움말 내용을 여러 언어로 지역화해야 한다면 XML 기반 도움말이 필요해요. 함수를 XML 기반 도움말 파일과 연결하려면
.EXTERNALHELP주석 기반 도움말 키워드를 사용해요. 이 키워드가 없으면Get-Help는 함수 도움말 파일을 찾지 못하고 자동 생성된 도움말만 반환해요..EXTERNALHELP키워드에 대한 자세한 내용은 about_Comment_Based_Help를 참고하세요. XML 기반 도움말에 대한 자세한 내용은 How to Write Cmdlet Help를 참고하세요.
더 알아보기
- about_Automatic_Variables
- about_Comment_Based_Help
- about_Function_Provider
- about_Functions_Advanced
- about_Functions_Advanced_Methods
- about_Functions_Advanced_Parameters
- about_Functions_CmdletBindingAttribute
- about_Functions_OutputTypeAttribute
- about_Parameters
- about_Profiles
- about_Scopes
- about_Script_Blocks