about_CommonParameters
about_CommonParameters (공통 매개 변수)
PowerShell에서 아무 cmdlet이나 고르면 항상 따라오는 공통 매개 변수(Common Parameters)에 대해 알아볼게요. 이 매개 변수들은 각 cmdlet이 따로 만들지 않아도 PowerShell이 기본으로 넣어주는 것들이에요. 어떤 cmdlet에서도 똑같이 쓸 수 있고, 동작 방식도 일정해서 한 번 익혀두면 어디서든 그대로 활용할 수 있답니다. 이 글을 따라가다 보면 에러를 다루는 법, 진행 상황을 보여주는 법, 위험한 명령을 미리 확인하는 법까지 자연스럽게 손에 익게 될 거예요.
본문
Short description (짧은 설명)
어떤 cmdlet과도 함께 사용할 수 있는 매개 변수에 대한 설명이에요.
Long description (자세한 설명)
공통 매개 변수는 어떤 cmdlet과도 함께 쓸 수 있게 마련된 매개 변수 묶음이에요. cmdlet 개발자가 직접 만든 게 아니라 PowerShell 자체가 구현해서, 모든 cmdlet에 자동으로 기본 제공되죠.
어떤 cmdlet에든 공통 매개 변수를 쓸 수는 있지만, 모든 cmdlet에 효과가 있는 건 아니에요. 예를 들어 상세 출력(verbose)을 만들지 않는 cmdlet에 Verbose 공통 매개 변수를 붙여도 아무 일도 일어나지 않아요.
공통 매개 변수는 CmdletBinding 특성이나 Parameter 특성을 쓰는 고급 함수(advanced function)에서도 쓸 수 있어요. 이런 특성을 쓰면 PowerShell이 자동으로 공통 매개 변수를 추가해 주거든요. 다만 공통 매개 변수와 같은 이름의 매개 변수를 새로 만들 수는 없어요.
일부 공통 매개 변수는 PowerShell 기본 설정 변수(preference variable)를 이용해 지정해 둔 시스템 기본값이나 환경 설정을 덮어써요. 다만 환경 설정 변수와 달리, 공통 매개 변수는 그 명령에서만 영향을 줘요.
더 자세한 내용은 about_Preference_Variables를 참고해요.
공통 매개 변수 목록은 다음과 같아요. 괄호 안은 별칭(alias)이에요.
Debug(db)ErrorAction(ea)ErrorVariable(ev)InformationAction(infa)InformationVariable(iv)OutVariable(ov)OutBuffer(ob)PipelineVariable(pv)ProgressAction(proga)Verbose(vb)WarningAction(wa)WarningVariable(wv)
Action 계열 매개 변수는 ActionPreference 형식의 값을 받아요. ActionPreference는 다음과 같은 값을 가진 열거형(enumeration)이에요.
| Name | Value |
| Break | 6 |
| Suspend | 5 |
| Ignore | 4 |
| Inquire | 3 |
| Continue | 2 |
| Stop | 1 |
| SilentlyContinue | 0 |
이름과 값 중 아무거나 매개 변수에 써도 돼요.
공통 매개 변수 말고도, 많은 cmdlet이 위험을 줄여주는(risk mitigation) 매개 변수를 제공해요. 시스템이나 사용자 데이터에 위험을 줄 수 있는 cmdlet이라면 보통 이런 매개 변수를 함께 제공하죠.
위험 완화 매개 변수는 다음과 같아요.
WhatIf(wi)Confirm(cf)
Common parameters (공통 매개 변수)
-Debug
명령이 수행한 작업에 대한 프로그래머 수준의 세부 정보를 보여줘요. 이 매개 변수는 해당 명령이 디버깅 메시지를 만들 때만 동작해요. 예를 들어 명령에 Write-Debug cmdlet이 포함되어 있을 때가 그렇죠.
Type: SwitchParameter
Aliases: db
Required: False
Position: Named
Default value: False
Accept pipeline input: False
Accept wildcard characters: False
기본적으로 디버깅 메시지는 표시되지 않아요. $DebugPreference 변수의 값이 SilentlyContinue로 되어 있기 때문이에요.
Debug 매개 변수는 현재 명령에서 $DebugPreference 변수의 값을 Continue로 설정하면서, 그 변수의 값을 덮어써요.
-Debug:$true는 -Debug와 같은 효과예요. $DebugPreference가 기본값인 SilentlyContinue가 아닐 때 디버깅 메시지 출력을 막으려면 -Debug:$false를 사용하면 돼요.
-ErrorAction
명령이 만든 비종료 오류(non-terminating error)에 cmdlet이 어떻게 반응할지를 정해요. 이 매개 변수는 명령이나 Write-Error cmdlet이 만든 비종료 오류에 대해 $ErrorActionPreference 변수의 값을 덮어써요.
Type: ActionPreference
Aliases: ea
Accepted values: Break, Suspend, Ignore, Inquire, Continue, Stop, SilentlyContinue
Required: False
Position: Named
Default value: Depends on preference variable
Accept pipeline input: False
Accept wildcard characters: False
ErrorAction 매개 변수는 현재 명령에서 $ErrorActionPreference 변수의 값을 덮어써요. $ErrorActionPreference 변수의 기본값이 Continue라서, 따로 ErrorAction 매개 변수를 쓰지 않으면 오류 메시지를 보여주면서 계속 실행돼요.
-ErrorAction 매개 변수는 문(statement)을 멈추게 하는 오류(데이터 누락, 잘못된 매개 변수, 권한 부족 같은 것들)가 현재 문을 멈추는 걸 막지는 못해요. 다만 Stop으로 설정하면 비종료 오류를 스크립트 종료 오류로 격상시켜서, try/catch로 잡을 수 있게 돼요. 오류 범주에 대한 자세한 내용은 about_Error_Handling을 확인해요.
Break오류가 발생하거나 예외가 일어나면 디버거로 들어가요.Continue오류 메시지를 보여주면서 명령 실행을 계속해요. 기본값이에요.Ignore오류 메시지를 숨기고 명령 실행을 계속해요.SilentlyContinue와 달리Ignore는 비종료 오류를$Error자동 변수에 추가하지 않아요.Ignore값은 PowerShell 3.0에서 도입됐어요.Inquire오류 메시지를 보여주고 실행을 계속하기 전에 확인을 물어봐요. 이 값은 거의 쓰이지 않아요.SilentlyContinue오류 메시지를 숨기고 명령 실행을 계속해요.Stop오류 메시지를 보여주고 명령 실행을 멈춰요.Stop값은ActionPreferenceStopException을 만들어서 비종료 오류를 종료 오류로 격상시켜요. 그러면 이 오류를try/catch블록이나trap문으로 잡을 수 있어요.Suspend는 워크플로에서만 쓸 수 있는데, 워크플로는 PowerShell 6 이상에서 지원하지 않아요.
Note
스크립트나 함수를 실행하는 명령에서 이 매개 변수를 쓰면, ErrorAction 매개 변수는 $ErrorActionPreference 변수의 값을 덮어쓰지만 아예 바꿔치기 하지는 않아요.
-ErrorVariable
오류 기록은 자동으로 $Error 자동 변수에 저장돼요. 자세한 내용은 about_Automatic_Variables를 참고해요.
명령에 ErrorVariable 매개 변수를 쓰면, PowerShell이 그 명령이 내보낸 오류 기록을 매개 변수가 지정한 변수에도 함께 저장해요.
Type: String
Aliases: ev
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
기본적으로 새로운 오류 메시지는 변수에 이미 저장되어 있던 오류 메시지를 덮어써요. 오류 메시지를 변수 내용에 추가하려면 변수 이름 앞에 더하기 기호(+)를 붙이면 돼요.
예를 들어 다음 명령은 $a 변수를 만들고 그 안에 오류를 담아요.
Get-Process -Id 6 -ErrorVariable a
다음 명령은 오류 메시지를 $a 변수에 추가해요.
Get-Process -Id 2 -ErrorVariable +a
다음 명령은 $a의 내용을 보여줘요.
$a
이 매개 변수를 쓰면 특정 명령의 오류 메시지만 담는 변수를 만들 수 있어요. 그리고 $Error 자동 변수의 동작에는 영향을 주지 않아요. $Error 자동 변수에는 세션의 모든 명령이 만든 오류 메시지가 들어 있어요. 배열 표기법(예: $a[0] 또는 $Error[1,2])을 쓰면 변수에 저장된 특정 오류를 가리킬 수 있어요.
Note
사용자 지정 오류 변수에는 중첩된 함수나 스크립트를 호출하면서 생긴 오류까지 포함해서, 그 명령이 만든 모든 오류가 들어 있어요.
-InformationAction
PowerShell 5.0에서 도입됐어요. 이 매개 변수를 쓴 명령이나 스크립트 안에서 InformationAction 공통 매개 변수는 기본값이 SilentlyContinue인 $InformationPreference 환경 설정 변수의 값을 덮어써요. InformationAction과 함께 스크립트에서 Write-Information을 쓰면, InformationAction 매개 변수의 값에 따라 Write-Information 값이 표시돼요. $InformationPreference에 대한 자세한 내용은 about_Preference_Variables를 참고해요.
Type: ActionPreference
Aliases: infa
Accepted values: Break, Suspend, Ignore, Inquire, Continue, Stop, SilentlyContinue
Required: False
Position: Named
Default value: Depends on preference variable
Accept pipeline input: False
Accept wildcard characters: False
BreakWrite-Information명령이 나오는 지점에서 디버거로 들어가요.StopWrite-Information명령이 나오는 지점에서 명령이나 스크립트를 멈춰요.Ignore정보 메시지를 숨기고 명령 실행을 계속해요.SilentlyContinue와 달리Ignore는 정보 메시지를 완전히 잊어버려서, 정보 스트림에 추가하지 않아요.InquireWrite-Information명령에서 지정한 정보 메시지를 보여주고 계속할지 물어봐요.Continue정보 메시지를 보여주고 계속 실행해요.Suspend는 워크플로에서만 쓸 수 있어서 PowerShell 6 이상에서는 지원하지 않아요.SilentlyContinue정보 메시지가 (기본적으로) 표시되지 않으므로 효과가 없어요. 스크립트는 방해받지 않고 계속 실행돼요.
Note
스크립트나 함수를 실행하는 명령에서 이 매개 변수를 쓰면, InformationAction 매개 변수는 $InformationAction 환경 설정 변수의 값을 덮어쓰지만 아예 바꿔치기 하지는 않아요.
-InformationVariable
PowerShell 5.0에서 도입됐어요. InformationVariable 공통 매개 변수를 쓰면 정보 기록이 매개 변수가 지정한 변수에 저장돼요. PowerShell cmdlet은 Information 스트림에 정보 기록을 쓸 수 있고, Write-Information cmdlet을 써서 정보 기록을 작성할 수도 있어요.
정보 기록은 기본적으로 콘솔에 메시지로 표시돼요. InformationAction 공통 매개 변수를 쓰면 정보 기록의 표시 방식을 조절할 수 있어요. $InformationPreference 환경 설정 변수로 동작을 바꿀 수도 있어요. $InformationPreference에 대한 자세한 내용은 about_Preference_Variables를 참고해요.
Note
정보 변수에는 중첩된 함수나 스크립트를 호출하면서 생긴 정보 메시지까지 포함해서, 그 명령이 만든 모든 정보 메시지가 들어 있어요.
Type: String
Aliases: iv
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
기본적으로 새로운 정보 기록은 변수에 이미 저장되어 있던 값을 덮어써요. 오류 메시지를 변수 내용에 추가하려면 변수 이름 앞에 더하기 기호(+)를 붙이면 돼요.
-OutBuffer
파이프라인으로 객체를 보내기 전에 버퍼에 모아둘 객체 개수를 정해요. 이 매개 변수를 생략하면 객체는 만들어지는 대로 바로 보내져요.
Type: Int32
Aliases: ob
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
이 리소스 관리 매개 변수는 고급 사용자를 위한 거예요. 이 매개 변수를 쓰면 PowerShell이 데이터를 OutBuffer + 1 개씩 묶어서 다음 cmdlet으로 보내요.
다음 예시는 Write-Host cmdlet을 쓰는 두 ForEach-Object 처리 블록 사이에서 번갈아 표시돼요. 표시는 2개 또는 OutBuffer + 1 개씩 번갈아 이뤄져요.
1..4 | ForEach-Object {
Write-Host "$($_): First"; $_
} -OutBuffer 1 | ForEach-Object {
Write-Host "$($_): Second" }
1: First
2: First
1: Second
2: Second
3: First
4: First
3: Second
4: Second
-OutVariable
명령의 출력 객체를 파이프라인을 따라 보내면서, 동시에 지정한 변수에도 저장해요.
Type: String
Aliases: ov
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
이미 저장되어 있는 출력을 바꾸지 않고 변수에 추가하려면 변수 이름 앞에 더하기 기호(+)를 입력하면 돼요.
예를 들어 다음 명령은 $out 변수를 만들고 그 안에 프로세스 객체를 저장해요.
Get-Process powershell -OutVariable out
다음 명령은 프로세스 객체를 $out 변수에 추가해요.
Get-Process iexplore -OutVariable +out
다음 명령은 $out 변수의 내용을 보여줘요.
$out
Note
OutVariable 매개 변수가 만드는 변수의 형식은 [System.Collections.ArrayList]예요.
-PipelineVariable
PipelineVariable은 이 매개 변수를 쓰는 명령이 다음 파이프라인 구간으로 넘겨준 가장 최근 값을 다른 파이프라인 명령도 접근할 수 있게 해줘요. 파이프라인 안의 어떤 명령이든 그 이름의 PipelineVariable로 이 값을 접근할 수 있어요. 값은 다음 파이프라인 구간으로 넘겨질 때 그 변수에 할당돼요. 그래서 여러 위치에서 할당해야 할 수도 있는 특정 임시 변수보다 PipelineVariable이 쓰기 편해요.
$_나 $PSItem과 달리 PipelineVariable을 쓰면, 바로 앞 명령이 아니라 다른 명령이 넘겨주고 저장한 파이프라인 값에도 어떤 파이프라인 명령이든 접근할 수 있어요. 파이프라인 명령은 파이프라인을 따라 다음 항목이 처리되는 동안 직전에 넘어온 마지막 값에 접근할 수 있죠. 이렇게 하면 명령이 자기 출력을 앞선 명령(또는 자기 자신)으로 되돌려 보낼 수 있어요.
Note
고급 함수는 begin, process, end 세 개의 스크립트 블록을 가질 수 있어요. 고급 함수에서 PipelineVariable 매개 변수를 쓰면, 함수가 실행되면서 처음 정의된 스크립트 블록의 값만 그 변수에 할당돼요. 자세한 내용은 Advanced functions를 참고해요. PowerShell 7.2에서 이 동작이 수정되었어요.
Type: String
Aliases: pv
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
유효한 값은 어떤 변수 이름과 마찬가지로 문자열이에요.
Caution
PipelineVariable은 그것이 호출된 파이프라인 안에서만 유효해요. 파이프라인 밖에서 같은 이름을 쓰는 변수는 파이프라인이 실행되기 전에 지워져요. 파이프라인 PipelineVariable은 파이프라인이 끝나면 유효 범위를 벗어나요. 파이프라인 안의 여러 명령이 같은 PipelineVariable을 지정하면 공유 변수는 하나뿐이에요. 그 변수는 해당 변수를 지정한 명령이 가장 최근에 보낸 파이프라인 출력으로 갱신돼요.
Sort-Object나 Select-Object -Last 같은 일부 차단(blocking) 명령은 출력을 내기 전에 파이프라인 항목을 전부 모아요. 그런 차단 명령 앞에 있는 명령에서 할당한 PipelineVariable은, 차단 명령 뒤에 오는 명령에서 쓰일 때 항상 그 앞 명령의 마지막 파이프라인 항목을 담고 있어요.
다음 예시는 PipelineVariable이 어떻게 동작하는지 보여줘요. 이 예시에서는 다섯 개 숫자가 첫 번째 ForEach-Object 명령으로 파이프라인을 통해 전달돼요. 각 파이프라인 항목은 $Temp라는 파이프라인 변수에 저장돼요.
첫 번째 ForEach-Object 명령의 Process 블록은 파이프라인 항목을 아래쪽 ForEach-Object 명령으로 보내요. 각 단계에서 변수의 상태가 표시돼요.
# Create a variable named $Temp
$Temp = 8
Get-Variable Temp | Format-Table
$InformationPreference = 'Continue'
Write-Information '-------------------------------------------------'
111,222,333,444,555 | ForEach-Object -PipelineVariable Temp -Begin {
# Note that the newly create $Temp variable doesn't contain the value 8
# assigned before the pipeline started and that $PSItem is empty in
# the Begin block.
Write-Information "Upstream (Begin): PSItem = '$PSItem', Temp = '$Temp'"
} -Process {
Write-Information "Upstream (Process): PSItem = '$PSItem', Temp = '$Temp'"
return $PSItem
} | ForEach-Object -Process {
Write-Information "`tDownstream: PSItem = '$PSItem', Temp = '$Temp'"
}
Write-Information '-------------------------------------------------'
# The $Temp variable is deleted when the pipeline finishes
Get-Variable Temp | Format-Table
Name Value
---- -----
Temp 8
-------------------------------------------------
Upstream (Begin): PSItem = '', Temp = ''
Upstream (Process): PSItem = '111', Temp = ''
Downstream: PSItem = '111', Temp = '111'
Upstream (Process): PSItem = '222', Temp = '111'
Downstream: PSItem = '222', Temp = '222'
Upstream (Process): PSItem = '333', Temp = '222'
Downstream: PSItem = '333', Temp = '333'
Upstream (Process): PSItem = '444', Temp = '333'
Downstream: PSItem = '444', Temp = '444'
Upstream (Process): PSItem = '555', Temp = '444'
Downstream: PSItem = '555', Temp = '555'
-------------------------------------------------
Name Value
---- -----
Temp
Caution
CimCmdlet이나 CDXML cmdlet이 포함된 파이프라인에서 PipelineVariable 매개 변수를 쓸 때 알려진 문제가 두 가지 있어요. 다음 예시에서 Get-Partition은 CDXML 함수이고 Get-CimInstance는 CimCmdlet이에요.
문제 1: CDXML 함수는 [CmdletBinding()]을 사용해서 PipelineVariable 매개 변수를 허용해요.
Get-Partition -pv pvar
하지만 Windows PowerShell v5.1에서 PipelineVariable을 쓰면 다음과 같은 오류가 나와요.
Get-Partition : Cannot retrieve the dynamic parameters for the cmdlet.
Object reference not set to an instance of an object.
At line:1 char:1
+ get-partition -PipelineVariable pvar
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-Partition], ParameterBindingException
+ FullyQualifiedErrorId : GetDynamicParametersException,Get-Partition
문제 2: 앞선 명령이 CDXML 명령이 아니고 아래쪽에 두 명령 유형 중 하나가 있을 때, PipelineVariable이 마지막으로 누적된 객체로 남아 있어요.
Get-CimInstance Win32_DiskDrive -pv pvar |
ForEach-Object {
Write-Host "Upstream: Disk $($pvar.Index)"
return [pscustomobject]@{ DiskNumber = $_.Index }
} | Get-Partition | ForEach-Object {
Write-Host "Downstream: Disk $($pvar.Index)"
}
두 번째 ForEach-Object 명령에서는 $pvar의 값이 파이프라인의 마지막 객체로 설정되는 걸 볼 수 있어요.
Upstream: Disk 1
Upstream: Disk 2
Upstream: Disk 0
Downstream: Disk 0
Downstream: Disk 0
Downstream: Disk 0
Downstream: Disk 0
Downstream: Disk 0
Downstream: Disk 0
-ProgressAction
스크립트, cmdlet, 공급자가 만드는 진행률 업데이트(예: Write-Progress cmdlet이 만드는 진행률 표시줄)에 PowerShell이 어떻게 반응할지를 정해요. Write-Progress cmdlet은 명령의 상태를 보여주는 진행률 표시줄을 만들어요. ProgressAction 매개 변수는 PowerShell 7.4에서 추가됐어요.
ProgressAction 매개 변수는 ActionPreference 열거형 값 중 하나를 받아요. SilentlyContinue, Stop, Continue, Inquire, Ignore, Suspend, Break 중 하나죠.
유효한 값은 다음과 같아요.
BreakWrite-Progress명령이 나오는 지점에서 디버거로 들어가요.Stop: 진행률 표시줄을 표시하지 않아요. 대신 오류 메시지를 보여주고 실행을 멈춰요.Inquire: 진행률 표시줄을 표시하지 않아요. 계속할지 허락을 물어봐요.Y나A로 답하면 진행률 표시줄을 보여줘요.Continue: (기본값) 진행률 표시줄을 보여주고 실행을 계속해요.SilentlyContinue: 명령을 실행하지만 진행률 표시줄은 표시하지 않아요.
Type: ActionPreference
Aliases: proga
Accepted values: Break, Suspend, Ignore, Inquire, Continue, Stop, SilentlyContinue
Required: False
Position: Named
Default value: Depends on preference variable
Accept pipeline input: False
Accept wildcard characters: False
-Verbose
명령이 수행한 작업에 대한 자세한 정보를 보여줘요. 이 정보는 추적(trace)이나 트랜잭션 로그에 있는 정보와 비슷해요. 이 매개 변수는 해당 명령이 상세 메시지를 만들 때만 동작해요. 예를 들어 명령에 Write-Verbose cmdlet이 포함되어 있을 때가 그렇죠.
Type: SwitchParameter
Aliases: vb
Required: False
Position: Named
Default value: False
Accept pipeline input: False
Accept wildcard characters: False
Verbose 매개 변수는 현재 명령에서 $VerbosePreference 변수의 값을 덮어써요. $VerbosePreference 변수의 기본값이 SilentlyContinue라서, 상세 메시지는 기본적으로 표시되지 않아요.
-Verbose:$true는-Verbose와 같은 효과예요.-Verbose:$false는 상세 메시지 표시를 막아요.$VerbosePreference의 값이SilentlyContinue(기본값)가 아닐 때 이 매개 변수를 쓰면 돼요.
-WarningAction
명령의 경고에 cmdlet이 어떻게 반응할지를 정해요. 기본값은 Continue예요. 이 매개 변수는 해당 명령이 경고 메시지를 만들 때만 동작해요. 예를 들어 명령에 Write-Warning cmdlet이 포함되어 있을 때가 그렇죠.
Type: ActionPreference
Aliases: wa
Accepted values: Break, Suspend, Ignore, Inquire, Continue, Stop, SilentlyContinue
Required: False
Position: Named
Default value: Depends on preference variable
Accept pipeline input: False
Accept wildcard characters: False
WarningAction 매개 변수는 현재 명령에서 $WarningPreference 변수의 값을 덮어써요. $WarningPreference 변수의 기본값이 Continue라서, 따로 WarningAction 매개 변수를 쓰지 않으면 경고를 보여주면서 계속 실행돼요.
Break경고가 발생하면 디버거로 들어가요.Continue경고 메시지를 보여주면서 명령 실행을 계속해요. 기본값이에요.Inquire경고 메시지를 보여주고 실행을 계속하기 전에 확인을 물어봐요. 이 값은 거의 쓰이지 않아요.SilentlyContinue경고 메시지를 숨기고 명령 실행을 계속해요.Stop경고 메시지를 보여주고 명령 실행을 멈춰요.
Note
스크립트나 함수를 실행하는 명령에서 이 매개 변수를 쓰면, WarningAction 매개 변수는 $WarningAction 환경 설정 변수의 값을 덮어쓰지만 아예 바꿔치기 하지는 않아요.
-WarningVariable
명령에 대한 경고 기록을 지정한 변수에 저장해요.
Type: String
Aliases: wv
Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
경고가 사용자에게 표시되지 않아도, 만들어진 모든 경고가 변수에 저장돼요.
이미 저장되어 있는 경고를 바꾸지 않고 변수 내용에 경고를 추가하려면 변수 이름 앞에 더하기 기호(+)를 입력하면 돼요.
예를 들어 다음 명령은 $a 변수를 만들고 그 안에 경고를 담아요.
Get-Process -Id 6 -WarningVariable a
다음 명령은 경고를 $a 변수에 추가해요.
Get-Process -Id 2 -WarningVariable +a
다음 명령은 $a의 내용을 보여줘요.
$a
이 매개 변수를 쓰면 특정 명령의 경고만 담는 변수를 만들 수 있어요. 배열 표기법(예: $a[0] 또는 $warning[1,2])을 쓰면 변수에 저장된 특정 경고를 가리킬 수 있어요.
Note
경고 변수에는 중첩된 함수나 스크립트를 호출하면서 생긴 경고까지 포함해서, 그 명령이 만든 모든 경고가 들어 있어요.
Risk management parameters (위험 관리 매개 변수)
-WhatIf
명령을 실제로 실행하는 대신, 그 명령이 어떤 효과를 낼지 설명하는 메시지를 보여줘요.
Type: SwitchParameter
Aliases: wi
Required: False
Position: Named
Default value: False
Accept pipeline input: False
Accept wildcard characters: False
WhatIf 매개 변수는 현재 명령에서 $WhatIfPreference 변수의 값을 덮어써요. $WhatIfPreference 변수의 기본값이 0(비활성)이라서, WhatIf 매개 변수 없이는 WhatIf 동작이 일어나지 않아요. 자세한 내용은 about_Preference_Variables를 참고해요.
$true는-WhatIf와 같은 효과예요.$false는$WhatIfPreference변수의 값이 1일 때 생기는 자동 WhatIf 동작을 막아요.
예를 들어 다음 명령은 Remove-Item 명령에서 -WhatIf 매개 변수를 사용해요.
Remove-Item Date.csv -WhatIf
항목을 실제로 제거하는 대신, PowerShell이 수행할 작업과 영향을 받을 항목을 나열해요. 이 명령은 다음과 같은 출력을 만들어요.
What if: Performing operation "Remove File" on
Target "C:\ps-test\date.csv".
-Confirm
명령을 실행하기 전에 확인을 물어봐요.
Type: SwitchParameter
Aliases: cf
Required: False
Position: Named
Default value: Depends on preference variable
Accept pipeline input: False
Accept wildcard characters: False
Confirm 매개 변수는 현재 명령에서 $ConfirmPreference 변수의 값과 함께 동작해요. 이 매개 변수를 쓰면 그 값이 true가 돼요. 자세한 내용은 about_Preference_Variables를 참고해요.
-Confirm:$true는-Confirm과 같은 효과예요.-Confirm:$false는$ConfirmPreference의 값이 cmdlet의 예상 위험보다 작거나 같을 때 발생하는 자동 확인을 막아요.
예를 들어 다음 명령은 Remove-Item 명령에서 -Confirm 매개 변수를 사용해요. 항목을 제거하기 전에 PowerShell이 수행할 작업과 영향을 받을 항목을 나열하고 승인을 물어봐요.
PS C:\ps-test> Remove-Item tmp*.txt -Confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Remove File" on Target " C:\ps-test\tmp1.txt
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend
[?] Help (default is "Y"):
Confirm 응답 옵션은 다음과 같아요.
| Response | Result |
| Yes (Y) | Perform the action. |
| Yes to All (A) | Perform all actions and suppress subsequent Confirm |
| | queries for this command. |
| No (N): | Don't perform the action. |
| No to All (L): | Don't perform any actions and suppress subsequent |
| | Confirm queries for this command. |
| Suspend (S): | Pause the command and create a temporary session. |
| Help (?) | Display help for these options. |
Suspend 옵션은 명령을 멈춰 두고 임시 중첩 세션을 만들어요. 그 세션에서 Confirm 옵션을 고르기 전까지 작업할 수 있어요. 중첩 세션의 명령 프롬프트에는 꺾쇠 부등호(>>) 두 개가 붙어서, 원래 부모 명령의 하위 작업임을 나타내요. 중첩 세션에서 명령과 스크립트를 실행할 수 있어요. 중첩 세션을 끝내고 원래 명령의 Confirm 옵션으로 돌아가려면 "exit"를 입력하면 돼요.
다음 예시에서는 Suspend 옵션(S)으로 명령을 잠시 멈춰 두고, 사용자가 명령 매개 변수에 대한 도움말을 확인해요. 필요한 정보를 얻은 뒤 사용자는 "exit"를 입력해 중첩 프롬프트를 끝내고, Confirm 질문에 Yes(y)로 응답해요.
PS C:\ps-test> New-Item -ItemType File -Name Test.txt -Confirm
Confirm
Are you sure you want to perform this action?
Performing operation "Create File" on Target "Destination:
C:\ps-test\test.txt".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default
is "Y"): s
PS C:\ps-test> Get-Help New-Item -Parameter ItemType
-ItemType <string>
Specifies the provider-specified type of the new item.
Required? false
Position? named
Default value
Accept pipeline input? true (ByPropertyName)
Accept wildcard characters? false
PS C:\ps-test> exit
Confirm
Are you sure you want to perform this action?
Performing operation "Create File" on Target "Destination: C:\ps-test\test
.txt".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (defau
lt is "Y"): y
Directory: C:\ps-test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 8/27/2010 2:41 PM 0 test.txt