Chỉ cần đi để hiển thị, @JamesKo, nếu bạn đặt câu hỏi sai bạn nhận được câu trả lời sai :-(Một số người đưa ra câu trả lời tốt ở đây dựa trên (a) thiếu sự tiếp xúc với Linux và (b) bạn sử dụng thuật ngữ verbose.Trong phần sau tôi sẽ hướng dẫn bạn cách Linux liên quan đến PowerShell về chủ đề này, nhưng vui lòng chuyển sang câu trả lời cuối cùng nếu bạn vội vàng .--)
nền
Trong PowerShell, verbose có một ý nghĩa rất cụ thể mà PowerShell man page thậm chí còn khá mơ hồ về:
Hiển thị thông tin chi tiết về thao tác được thực hiện bởi lệnh . Thông tin này giống với thông tin trong một dấu vết hoặc trong nhật ký giao dịch . Tham số này chỉ hoạt động khi lệnh tạo ra một thông báo tiết.
Nó thậm chí có vẻ giống như những gì bạn muốn ...nhưng chúng ta hãy so sánh với các tài liệu Linux cho set -x
đó, tùy thuộc vào hương vị của bạn của Linux, có thể này (từ man-pages project) ...
Vỏ sẽ viết thư cho sai số chuẩn một dấu vết cho mỗi lệnh sau nó mở rộng lệnh và trước khi nó thực thi nó.
hay này (từ gnu) ...
In một dấu vết của các lệnh đơn giản, cho các lệnh, lệnh trường hợp, chọn lệnh, và số học cho các lệnh và lập luận của họ hoặc danh sách từ liên quan sau khi chúng được mở rộng và trước khi chúng được thực thi .
Dòng đầu tiên của câu hỏi của bạn được đồng ý rõ ràng và chính xác với những câu hỏi này. Nhưng tiết trong PowerShell thì khác. Tóm lại, bật chế độ tiết (có thể là bằng công tắc dòng lệnh -Verbose
hoặc biến số $VerbosePreference
) chỉ đơn giản là cho phép đầu ra từ dòng chi tiết tới bàn điều khiển. (Giống như Linux cung cấp hai luồng, stdout và stderr, PowerShell cung cấp nhiều luồng: luồng đầu ra, luồng lỗi, luồng cảnh báo, luồng tiết và luồng gỡ lỗi. Bạn làm việc với các luồng này giống hệt với Linux - bạn có thể thậm chí sử dụng, ví dụ như, commands 4>&1
sáp nhập dòng verbose để stdout, ví dụ. (Bạn có thể đọc thêm về nhiều dòng sản lượng PowerShell trong phần cơ bản Viết Streams của PowerShell One-Liners: Accessing, Handling and Writing Data và tham khảo nhanh tốt là Complete Guide to PowerShell Punctuation.)
Câu trả lời
Lệnh Set-PSDebug sẽ cung cấp cho bạn truy tìm bash-equivalent. Bạn thậm chí có thể điều chỉnh chi tiết theo dõi vớiTham số. Thứ nhất, đây là sự kiểm soát, trước khi sử dụng Set-PSDebug
:
PS> Get-PSDepth
0
Với giá trị của bạn nhận được mỗi dòng mã như nó thực thi, ví dụ:
PS> Set-PSDebug -Trace 1
PS> Get-PSDepth
DEBUG: 1+ >>>> Get-PSDepth
DEBUG: 141+ >>>> {
DEBUG: 142+ >>>> $nest = -1
DEBUG: 143+ >>>> $thisId = $pid
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG: 145+ >>>> $thisId = (gwmi win32_process -Filter "processid='$thisId'").ParentProcessId
DEBUG: 146+ >>>> $nest++
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG: 148+ >>>> $nest
0
DEBUG: 149+ >>>> }
Với giá trị của bạn cũng nhận được các bài tập và đường dẫn mã biến:
PS> Set-PSDebug -Trace 2
PS> Get-PSDepth
DEBUG: 1+ >>>> Get-PSDepth
DEBUG: ! CALL function '<ScriptBlock>'
DEBUG: 141+ >>>> {
DEBUG: ! CALL function 'Get-PSDepth' (defined in file 'C:\Users\msorens\Documents\WindowsPowerShell\profile.ps1')
DEBUG: 142+ >>>> $nest = -1
DEBUG: ! SET $nest = '-1'.
DEBUG: 143+ >>>> $thisId = $pid
DEBUG: ! SET $thisId = '9872'.
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG: 145+ >>>> $thisId = (gwmi win32_process -Filter "processid='$thisId'").ParentProcessId
DEBUG: ! SET $thisId = '10548'.
DEBUG: 146+ >>>> $nest++
DEBUG: ! SET $nest = '0'.
DEBUG: 144+ while (>>>> (ps -id $thisId).Name -eq 'powershell') {
DEBUG: 148+ >>>> $nest
0
DEBUG: 149+ >>>> }
Đó là dấu vết của mô phỏng le cmdlet Tôi viết có tên là Get-PSDepth
. Nó in các lệnh, nhiệm vụ, v.v. với tiền tố DEBUG
, được trộn lẫn với đầu ra thực tế, trong trường hợp này là dòng đơn chứa chỉ 0
.
Ở nơi đầu tiên, một người dùng với đại diện của bạn đã thực hiện một nghiên cứu trước khi hỏi? [google: Echo trên powershell] (http://www.google.com/search?q=Echo+on+for+powershell&oq=Echo+on+for+powershell) – LotPings
@LotPings Rất tiếc, nó không xảy ra với tôi cho Google "echo on for powershell". –