2008-12-15 36 views

Trả lời

13

Có và có.

Bạn có thể sử dụng đối tượng được xây dựng trong $host nếu tất cả những gì bạn muốn làm là thay đổi màu văn bản. Tuy nhiên, bạn không thể thay đổi chính thông báo lỗi - đó là mã cứng.

Điều bạn có thể làm là (a) chặn thông báo lỗi và thay vào đó (b) bẫy các lỗi và hiển thị lỗi của riêng bạn.

Hoàn thành (a) bằng cách đặt $ErrorActionPreference = "SilentlyContinue" - điều này sẽ không DỪNG lỗi, nhưng nó sẽ chặn thư.

Hoàn thành (b) yêu cầu công việc nhiều hơn một chút. Theo mặc định, hầu hết các lệnh PowerShell không tạo ra ngoại lệ có thể bẫy. Vì vậy, bạn sẽ phải học cách chạy các lệnh và thêm tham số -EA "Stop" để tạo ra một ngoại lệ có thể bẫy nếu có điều gì đó không ổn. Khi bạn đã thực hiện điều đó, bạn có thể tạo một cái bẫy trong vỏ bằng cách nhập:

trap { 
# handle the error here 
} 

Bạn có thể đặt bẫy này trong kịch bản tiểu sử của mình thay vì nhập mỗi lần. Bên trong bẫy, bạn có thể xuất ra bất kỳ văn bản lỗi nào mà bạn thích bằng cách sử dụng lệnh ghép ngắn Viết-Lỗi.

Có lẽ nhiều việc hơn bạn muốn làm, nhưng về cơ bản bạn sẽ làm những gì bạn hỏi.

7

Đây là một loạt nội dung sẽ cho phép bạn tùy chỉnh đầu ra bảng điều khiển của mình. Bạn có thể đặt các cài đặt này theo ý muốn trong hồ sơ của mình hoặc tạo các hàm/tập lệnh để thay đổi chúng cho các mục đích khác nhau. Có thể bạn muốn một chế độ "Đừng làm phiền tôi" đôi khi, hoặc "Hiển thị cho tôi mọi thứ sai" ở những người khác. Bạn có thể tạo một hàm/tập lệnh để thay đổi giữa các hàm.

## Change colors of regular text 
$Host.UI.RawUI.BackGroundColor = "DarkMagenta" 
$Host.UI.RawUI.ForeGroundColor = "DarkYellow" 

## Change colors of special messages (defaults shown) 
$Host.PrivateData.DebugBackgroundColor = "Black" 
$Host.PrivateData.DebugForegroundColor = "Yellow" 
$Host.PrivateData.ErrorBackgroundColor = "Black" 
$Host.PrivateData.ErrorForegroundColor = "Red" 
$Host.PrivateData.ProgressBackgroundColor = "DarkCyan" 
$Host.PrivateData.ProgressForegroundColor = "Yellow" 
$Host.PrivateData.VerboseBackgroundColor = "Black" 
$Host.PrivateData.VerboseForegroundColor = "Yellow" 
$Host.PrivateData.WarningBackgroundColor = "Black" 
$Host.PrivateData.WarningForegroundColor = "Yellow" 

## Set the format for displaying Exceptions (default shown) 
## Set this to "CategoryView" to get less verbose, more structured output 
## http://blogs.msdn.com/powershell/archive/2006/06/21/641010.aspx 
$ErrorView = "NormalView" 

## NOTE: This section is only for PowerShell 1.0, it is not used in PowerShell 2.0 and later 
## More control over display of Exceptions (defaults shown), if you want more output 
$ReportErrorShowExceptionClass = 0 
$ReportErrorShowInnerException = 0 
$ReportErrorShowSource = 1 
$ReportErrorShowStackTrace = 0 

## Set display of special messages (defaults shown) 
## http://blogs.msdn.com/powershell/archive/2006/07/04/Use-of-Preference-Variables-to-control-behavior-of-streams.aspx 
## http://blogs.msdn.com/powershell/archive/2006/12/15/confirmpreference.aspx 
$ConfirmPreference = "High" 
$DebugPreference = "SilentlyContinue" 
$ErrorActionPreference = "Continue" 
$ProgressPreference = "Continue" 
$VerbosePreference = "SilentlyContinue" 
$WarningPreference = "Continue" 
$WhatIfPreference = 0 

Bạn cũng có thể sử dụng tham số -ErrorAction và -ErrorVariable trên lệnh ghép ngắn để chỉ ảnh hưởng đến lệnh gọi cmdlet đó. Cái thứ hai sẽ gửi lỗi đến biến được chỉ định thay vì $ Error mặc định.

+0

Lưu ý rằng các biến số $ ReportErrorShow * không thực sự có tác dụng trong PowerShell 2.0. Xem http://technet.microsoft.com/en-us/library/dd347675.aspx – Timbo

+0

Điểm tốt, PS v2.0 có một hệ thống khác ngay bây giờ. Tôi sẽ cập nhật câu trả lời của mình. – JasonMArcher

1

Ngoài ra, bạn có thể làm điều này để viết một dòng cụ thể của văn bản lỗi:

$Host.UI.WriteErrorLine("This is an error") 

(đạo cụ để Chris Sears cho câu trả lời này)

1

này có thể hoặc không thể là những gì bạn muốn, nhưng có một $ ErrorView biến sở thích mà bạn có thể thiết lập:

$ErrorView = "CategoryView" 

này đưa ra một thông báo lỗi một dòng ngắn hơn, ví dụ:

[PS]> get-item D:\blah 
ObjectNotFound: (D:\blah:String) [Get-Item], ItemNotFoundException 
Các vấn đề liên quan