Tập lệnh PowerShell, hiển thị các lệnh chạy


36

Tôi đang chơi xung quanh với các tập lệnh PowerShell và chúng đang hoạt động rất tốt. Tuy nhiên, tôi tự hỏi liệu có cách nào để hiển thị tất cả các lệnh đã được chạy hay không, giống như bạn đang tự gõ chúng vào. Điều này sẽ tương tự như "echo on" trong các tệp bó. Tôi đã xem xét các đối số dòng lệnh PowerShell, các lệnh ghép ngắn, nhưng tôi không tìm thấy bất cứ điều gì rõ ràng. Cảm ơn!

Câu trả lời:


44

Lệnh sau sẽ xuất từng dòng script thành Write-Debug-

Set-PSDebug -Trace 1

Từ man Set-PSDebug

Khi tham số Trace được đặt thành 1, mỗi dòng script được theo dõi khi nó được thực thi. Khi tham số được đặt thành 2, các phép gán biến, lệnh gọi hàm và lệnh gọi script cũng được theo dõi. Nếu tham số Bước được chỉ định, bạn sẽ được nhắc trước khi mỗi dòng của tập lệnh được thực thi.


Nếu bạn thêm đoạn mã này vào tập lệnh sử dụng Param, hãy đảm bảo đặt dòng này bên dưới khối xác định param hoặc nó có thể gây ra lỗi.
kayleeFrye_onDeck

4

Nơi tôi đã sử dụng echo ontrong CMD, bây giờ tôi sử dụng Write-VerboseSet-PSDebug -Stepthay vào đó. Chúng không giống nhau, nhưng chúng mạnh hơn nếu được sử dụng khéo léo.


2

Xấu xí:

PS > get-content foo.ps1|foreach-object{$_;invoke-expression "$_"}
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
powershell
PS > get-content foo.ps1
$procs=get-process powershell
foreach($proc in $procs){$proc.processname}
PS >

Vấn đề với ở trên là nếu bạn có các lệnh nhiều dòng như thế này:

foreach($proc in $procs){
  $proc.processname
}

Ở trên sẽ thất bại với ví dụ của tôi ở trên nếu điều đó được đặt trong foo.ps1 với cấu trúc đó ...


Vâng, tôi tiếp tục tìm một nửa giải pháp như thế này. Tôi thực sự nghĩ rằng không có "viên đạn bạc" cho những gì tôi muốn. Cảm ơn vì đã sáng tạo với những giải pháp này. Tôi có một vài lựa chọn bây giờ và sẽ phải quyết định nơi sẽ đi từ đây.
Nelson Rothermel

2
help about_History 

Sẽ cho bạn biết về tất cả các lệnh và

Get-History [options]  

sẽ trả về danh sách đầy đủ để bạn thao tác \ display, v.v.


2
Tôi đã tìm thấy "set-psdebug -trace 1" sẽ hiển thị các lệnh, nhưng tôi không muốn có nhiều "tiếng ồn" nữa. get-history không tạo ra bất cứ điều gì trong một kịch bản. Nếu có, tôi có thể dán nó ở cuối tập lệnh, nhưng sau đó các lệnh sẽ không được thực hiện (trước khi xuất lệnh) và bất kỳ trường hợp ngoại lệ nào sẽ bỏ qua nó (trừ khi tôi bắt được nó). Nó vẫn là một điều tốt để ghi nhớ ... Bất kỳ ý tưởng nào khác?
Nelson Rothermel

À - bạn có nghĩa là bạn muốn nắm bắt đầu vào và đầu ra, hoặc ít nhất bạn muốn lặp lại các lệnh đầu vào ngay sau đầu ra tương ứng? Một cách để làm điều đó là đẩy các kết quả thành một mảng và sau đó lặp qua các kết quả lịch sử get xuất ra lệnh theo sau là đầu ra của nó.
Helvick

bảng điểm bắt đầu cũng có thể làm những gì bạn đang tìm kiếm nhưng nó sẽ chỉ bị giới hạn ở phần văn bản của bàn điều khiển.
Helvick

Bạn đã nhận nó - giống như cách một tệp bó hoạt động. Hiện tại chúng tôi có một loạt các tệp bó và tôi đang xem xét tính khả thi của việc thay thế các tệp đó bằng các tập lệnh PowerShell. Chúng tôi có phần mềm để lập lịch, duy trì lịch sử đầu ra, v.v. Nếu không có lệnh đầu vào bị lặp lại, việc gỡ lỗi sẽ khó khăn hơn. Tôi đoán việc đẩy kết quả yêu cầu bạn thực hiện điều đó trên mọi lệnh, đảm bảo bạn bắt được ngoại lệ, v.v. để bạn không bỏ lỡ điều gì. Một lựa chọn khác, nhưng không hoàn toàn là những gì tôi đang tìm kiếm. Chúng tôi có thể chỉ cần chọn một tùy chọn và chạy với nó.
Nelson Rothermel

Tôi đã thử bắt đầu bản ghi, nhưng nó chỉ ghi rằng nó đã bắt đầu / dừng, nhưng không có gì ở giữa. Tôi đọc ở đâu đó có nghĩa là cho các lệnh tương tác.
Nelson Rothermel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.