2012-02-20 18 views
6

kịch bản đơn giản:-ErrorAction Dừng không làm việc trong Copy-mục

"test" | Out-File "C:\existing_file.txt" 
$ErrorActionPreference = "Continue" 
Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" -ErrorAction Stop 
"hello" | Out-Host 

Tôi có đầu ra này:

Copy-Item : Could not find a part of the path "C:\NonExistingDir\file.txt". 
C:\Users\ESavin\AppData\Local\Temp\d3d410e0-79b3-4736-b7e7-5aba1ab11a12.ps1:1 знак:10 
+ Copy-Item <<<< "C:\existing_file.txt" "C:\NonExistingDir\file.txt" -ErrorAction Stop 
    + CategoryInfo   : NotSpecified: (:) [Copy-Item], DirectoryNotFoundException 
    + FullyQualifiedErrorId : System.IO.DirectoryNotFoundException,Microsoft.PowerShell.Commands.CopyItemCommand 

hello 

Tại sao tôi nhận được "hello" trong đầu ra ?? -ErrorAction Stop không hoạt động?

update:

mã này:

"test" | Out-File "C:\existing_file.txt" 
$ErrorActionPreference = "Stop" 
Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" 
"hello" | Out-Host 

làm việc như mong đợi. không có "hello" trong đầu ra.

Sao chép mục bị bỏ qua -Lỗi hành động và chỉ sử dụng $ ErrorActionPreference ??

Trả lời

0

Lạ. Tôi sao chép-dán hai dòng của bạn trong một kịch bản, chạy nó, và tất cả mọi thứ hoạt động tốt: Tôi không thấy "hello" xuất hiện. "Hành động -GrrorAction" của bạn nên được ưu tiên hơn bất kỳ $ ErrorActionPreference nào mà bạn đã đặt ở cấp phiên.

+0

Bạn phải tạo ra "C: \ existing_file.txt" trên máy tính của bạn để tái tạo ví dụ của tôi – Jack128

0

Bạn phải có một trong hai chạy:

Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" -ErrorAction Continue 
"hello" | Out-Host 

hoặc thiết lập $ErrorActionPreference="continue" và chạy

Copy-Item "C:\existing_file.txt" "C:\NonExistingDir\file.txt" 
"hello" | Out-Host 

Đó là những chỉ có hai cách để bạn sẽ có được kết quả bạn đang hiển thị. Vì vậy, hãy chắc chắn rằng bạn đang làm những gì bạn đang yêu cầu làm.

+0

Bạn don'n hiểu, hoặc tôi đã giải thích xấu. Tôi muốn STOP thực thi scipt nếu lỗi return-item. nhưng -ErrorAction Stop không dừng script. Câu hỏi là "Tại sao" ?? – Jack128

+0

@ Jack128 - đó là những gì tôi đang nói. Những gì bạn đã làm nên hoạt động. Hãy chắc chắn rằng bạn đã làm những gì bạn nói bạn đã làm. – manojlds

+0

Có. Tôi chắc chắn. Tôi đã mở powerhell ise, gõ "test" | Out-File "C: \ existing_file.txt" Sao chép-mục "C: \ existing_file.txt" "C: \ NonExistingDir \ file.txt" -ErrorAction Stop "hello" | Out-Host và nhận "hello" ở đầu ra – Jack128

5

Như được chỉ ra bởi sự trợ giúp của tham số ErrorAction không có hiệu lực đối với các lỗi kết thúc, mà của bạn.

The ErrorAction parameter has no effect on terminating errors (such as 
    missing data, parameters that are not valid, or insufficient 
    permissions) that prevent a command from completing successfully. 

Nguồn: Get-Help about_commonparametershttp://technet.microsoft.com/en-us/library/dd315352.aspx

+0

Bạn có chắc đó là lỗi chấm dứt không? Tôi không nghĩ vậy. Hãy thử điều này: 'copy x y; copy x y' (giả định rằng file "x" không tồn tại). Bạn sẽ thấy rằng nó thực hiện hai lần. Bây giờ hãy thử điều này: 'copy -ErrorAction Stop x y; copy x y' Nó sẽ chỉ thực thi cái đầu tiên. –

+0

Thông thường các trường hợp ngoại lệ là chấm dứt lỗi. Nhưng kể từ năm 2012, PowerShell đã nhận được rất nhiều thay đổi, điều này có thể không còn đúng nữa. Vì vậy, tôi sẽ không nhìn sâu hơn vào nó. Tôi phải đề cập đến cũng rằng câu hỏi này không có câu trả lời được chấp nhận, do đó, sự liên quan của chủ đề được giảm hơn nữa. – Tom

Các vấn đề liên quan