2016-08-04 17 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の関数内コマンドレットを追加、私は明示的に有効にする機能に設定することができるようにしたいでき

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 v5 –

答えて

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") 
関連する問題