2012-07-12 35 views
11

Đã tìm kiếm điều này nhưng không thể tìm thấy độ phân giải. Bởi đầu ra "thêm", tôi có nghĩa là văn bản bổ sung mà đầu ra ghi ra phát ra sau văn bản thông báo lỗi của bạn. tức là .:Có cách nào để ngăn chặn đầu ra "thêm" từ lệnh ghép ngắn Write-Error không?

write-error -Message "test" 

sản xuất:

write-error -Message "test" : test 
+ CategoryInfo   : NotSpecified: (:) [Write-Error], WriteErrorException 
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException 

Tôi muốn chỉ thấy dòng chữ "thử nghiệm", và lấy nó từ stderr thông qua một đối tượng Process chạy kịch bản PS.

Tôi biết một regex phức tạp (để bắt TẤT CẢ các ký tự tiềm năng có thể xuất hiện trong danh mục, v.v.) có thể được phát triển, nhưng tôi muốn tránh điều đó. Đừng quên rằng Write-Error cũng tiêm một newline char tại mọi vị trí thứ 80 char do console, vì vậy mà sẽ phải được yếu tố trong là tốt.

Có cách nào để nói với Powershell (2.0) không được quá dài dòng khi viết vào stderr và chỉ viết phần tin nhắn?

Trả lời

7

Tôi nghĩ rằng không thể giới hạn kết quả của một lỗi nhưng bạn có thể workaround như thế này:

$Host.UI.WriteErrorLine("My custom error") 
+0

Rất cám ơn! Điều này sẽ làm các trick! – joebalt

+1

Ý tưởng hay, nhưng tiếc là sau đó chuyển hướng đầu ra lỗi thành đầu ra chuẩn '2> & 1' không hoạt động nữa. –

4

$ Host.UI.WriteErrorLine không cập nhật biến $ lỗi:

PS> $error.Clear() 
PS> $Host.UI.WriteErrorLine("My custom error") 
My custom error 

PS> $Error.Count 
0 

Bạn nên sử dụng Write-Error cmdlet nhưng sản lượng vẫn còn verbose:

PS> Write-Error "My custom error" 
Write-Error "My custom error" : My custom error 
    + CategoryInfo   : NotSpecified: (:) [Write-Error], WriteErrorException 
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException 

Th Đây là một tùy chọn để xuất ra thông điệp tiết kiệm hơn với biến $ ErrorView được xây dựng sẵn, giá trị mặc định của nó là 'Normal' (tiết). Bạn có thể đặt nó thành "CategoryView" cho các tin nhắn ngắn gọn.

PS> $ErrorView="CategoryView" 
PS> Write-Error "My custom error" 
NotSpecified: (:) [Write-Error], WriteErrorException 
+1

Cách giải quyết khác cho '$ error' là sử dụng $ error.add (" Lỗi tùy chỉnh của tôi ")'. Cách tốt nhất để tùy biến lỗi là tạo một hàm viết các thông báo lỗi tùy chỉnh và nếu cần thêm nó vào lỗi $. –

+1

Để sửa đổi biến tự động '$?' Trong hàm, có thể thêm một 'Lỗi Viết 'Lỗi tùy chỉnh của tôi" -ErrorAction im lặng tiếp tục. –

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