2016-08-04 1 views
1

ErrorAction 매개 변수를 고급 기능과 함께 올바르게 사용하려면 어떻게해야합니까? 예를 들어 나는 그런 기능을 가지고 :powershell 처리 방법 고급 기능 ErrorAction 매개 변수?

function test1 { 
[CmdletBinding()] 
param([string]$path = "c:\temp") 

$src = Join-Path $path "src" 
$dest = Join-Path $path "dest" 

Copy-Item -Path $src $dest -Recurse -Verbose 
write "SomeText" 
} 

$ SRC가 존재하지 않는 소스 경로를 가정 할 수 있습니다. 내가 ErrorAction으로이 기능을 실행하고 =를 중지

test1 -ea stop 

나는 오류가 발생합니다 내가 "SomeText"메시지가 표시되지 것으로 기대. 그러나 나는 그것을 가지고 : 나는 ErrorAction 매개 변수 복사 품목 TEST1 함수 내에서 cmdlet을 추가 할 수 있지만 내가 명시 적으로 활성화하는 기능을 설정할 수 있도록하려면

Copy-Item : Cannot find path 'C:\temp\src' because it does not exist. At line:5 char:1 + Copy-Item -Path $path\src $path\dest -Recurse -Verbose + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\temp\src:String) [Copy-Item], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand SomeText 

/오류 조치 동작을 비활성화하십시오.
.

제대로 작동하려면 어떻게해야합니까?

+0

을 확인해야합니다. PowerShell의 어떤 버전입니까? 전체 매개 변수 이름 ('test1 -ErrorAction Stop')을 사용하면 차이가 있습니까? –

+0

마찬가지로 PowerShell 5에서는 재현 할 수 없습니다. –

+0

** Verbose ** 매개 변수가 ** Copy-Item **에 추가 된 경우 오류없이 바로 중지됨을 알았습니다. 그러나 ** Verbose ** 매개 변수를 사용하면 작동하지 않습니다. PowerShell v.5 –

답변

1

당신은 $PSBoundParameters를 사용하고 ALOS이 문제를 재현 할 수 없습니다 $ErrorActionPreference

function test1 { 
    [CmdletBinding()] 
    param([string]$path = "c:\temp") 

    $src = Join-Path $path "src" 
    $dest = Join-Path $path "dest" 

    $errorAction = $PSBoundParameters["ErrorAction"] 
    if(-not $errorAction){ 
     $errorAction = $ErrorActionPreference 
    } 


    Copy-Item -Path $src $dest -Recurse -Verbose -ErrorAction $errorAction 
    write "SomeText" 
} 

$ErrorActionPreference = 'Stop' 
test1 

$ErrorActionPreference = 'continue' 
test1 -ErrorAction Stop 
0

나는이 같은 대신 입력 매개 변수에 대한 유효성 검사 이벤트를 배치 할 제안 :

param([ValidateScript({Test-Path $_})][string]$path = "c:\temp") 
관련 문제