Echo tương đương trong PowerShell để kiểm tra tập lệnh


233

Tôi muốn xuất ra các biến và giá trị trong tập lệnh PowerShell bằng cách thiết lập cờ và xem dữ liệu trúng tuyển trong toàn bộ tập lệnh.

Làm thế nào tôi sẽ làm điều này?

Ví dụ, PowerShell sẽ tương đương với mã PHP nào sau đây?

echo "filesizecounter: " . $filesizecounter 

Kiểm tra trình soạn thảo / trình gỡ lỗi tập lệnh đi kèm với PowerGUI . Nó có thể phù hợp với những gì bạn đang làm. Tôi hiểu rằng Powershell 2 cũng đi kèm với trình gỡ lỗi (nhưng tôi chưa thử).
dan-gph

Câu trả lời:


275

Có một số cách:

Write-Host: Viết trực tiếp vào bàn điều khiển, không bao gồm trong đầu ra chức năng / cmdlet. Cho phép màu nền trước và màu nền được đặt.

Write-Debug: Viết trực tiếp vào bàn điều khiển, nếu $DebugPreferenceđược đặt thành Tiếp tục hoặc Dừng.

Write-Verbose: Viết trực tiếp lên bàn điều khiển, nếu $VerbosePreferenceđược đặt thành Tiếp tục hoặc Dừng.

Thứ hai là dành cho thông tin tùy chọn thêm, Write-Debug để gỡ lỗi (vì vậy dường như sẽ phù hợp trong trường hợp này).

Bổ sung : Trong PSH2 (ít nhất) các tập lệnh sử dụng liên kết cmdlet sẽ tự động nhận các tham số -Verbose-Debugchuyển đổi, bật cục bộ Write-VerboseWrite-Debug(tức là ghi đè các biến tùy chọn) như các lệnh ghép ngắn và nhà cung cấp đã biên dịch.


4
Điều thú vị về Write-Debug và Write-Verbose là bạn có thể để các câu lệnh gỡ lỗi trong mã của mình và chỉ bật đầu ra khi bạn cần sử dụng biến tùy chọn thích hợp. Tiết kiệm thời gian và là một tính năng hay cho những người dùng chức năng khác của bạn.
JasonMArcher

5
Bạn cũng muốn làm quen với Out-String, bởi vì với bất kỳ đối tượng không tầm thường nào, bạn sẽ cần sử dụng điều đó để chuyển đổi đối tượng thành chuỗi có thể hiển thị trước khi sử dụng bất kỳ ba lệnh ghép ngắn Write- * nào.
Jaykul

113

Powershell có tiếng vang ánh xạ bí danh Write-Output, vì vậy:

echo "filesizecounter : $filesizecounter"


7
echolà một bí danh Write-Outputtheo TechNet của Microsoft và được thảo luận tại đây
Glenn Lawrence

2
Cảm ơn Glenn, có vẻ như bí danh đã được ánh xạ lại trong 6 năm kể từ khi tôi đăng bài này. Điều này là tốt, người ta thực sự không nên sử dụng Write-Host vì nó bỏ qua đường ống dẫn. Tôi đã cập nhật câu trả lời của mình để chỉ ra điều này. Cảm ơn!
Justin R.

3
Tại sao bạn không muốn bỏ qua đường ống nếu tất cả những gì bạn muốn làm là lặp lại đầu ra "gỡ lỗi" cho bàn điều khiển để theo dõi việc thực thi tập lệnh? Đầu ra ghi có một hiệu ứng phụ kỳ lạ trong đó nội dung của lệnh gọi cuối cùng tới Đầu ra ghi sẽ được để lại trên ngăn xếp, ghi đè bất kỳ biến nào bạn cố gắng trả về một cách rõ ràng từ một hàm. Các tác dụng phụ như thế tạo cảm giác như một cách cực kỳ khó hiểu đối với một ngôn ngữ.
Craig

33

PowerShell nội suy, phải không?

Trong PHP

echo "filesizecounter: " . $filesizecounter 

cũng có thể được viết là:

echo "filesizecounter: $filesizecounter" 

Trong PowerShell, một cái gì đó như thế này sẽ phù hợp với nhu cầu của bạn:

Write-Host "filesizecounter: $filesizecounter"

9
PHP không có gì để làm với bất cứ điều gì trong câu hỏi này
reggaeg Ức

25
Write-Host "filesizecounter : " $filesizecounter 

14

Cho đến nay, cách dễ nhất để lặp lại trong powershell, chỉ là tạo đối tượng chuỗi và để đường ống dẫn ra:

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

Tất nhiên, bạn sẽ từ bỏ một số tính linh hoạt khi không sử dụng các phương thức Write- *.


9

echo là bí danh của Write-Output mặc dù nó trông giống như Write-Host .

Đó không phải là sự khác biệt giữa echo và Write-Host trong PowerShell? .

echo là một bí danh cho Đầu ra ghi, ghi vào luồng đầu ra Thành công. Điều này cho phép đầu ra được xử lý thông qua các đường ống hoặc chuyển hướng vào các tệp. Write-Host ghi trực tiếp vào bàn điều khiển, do đó đầu ra không thể được chuyển hướng / xử lý thêm nữa.


8

Máy chủ lưu trữ hoạt động tốt.

$Filesize = (Get-Item $filepath).length;
Write-Host "FileSize= $filesize";

5

Tôi không biết có nên làm như vậy không, nhưng bạn chỉ có thể viết

"filesizecounter: " + $filesizecounter

Và nó sẽ xuất ra:

fileizecount: giá trị


1
"filesizecounter: $filesizecounter"thậm chí còn ngắn hơn.
jiggunjer

3

PowerShell có bí danh cho một số lệnh phổ biến như echo. Nhập nội dung sau vào PowerShell:

Get-Alias echo

để nhận được phản hồi:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

Ngay cả Get-Alias ​​cũng có một bí danh gal -> Get-Alias. Bạn có thể viết gal echođể lấy bí danh cho echo.

gal echo

Các bí danh khác được liệt kê ở đây: https://docs.microsoft.com/en-us/powershell/scripting/learn/USE-famustom-command-names?view=powershell-6

cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren


2

Thử Get-Content .\yourScript.PS1 và bạn sẽ thấy nội dung của kịch bản của bạn.

bạn cũng có thể chèn dòng này vào mã scrip của mình:

get-content .\scriptname.PS1
script code
script code

....


Không hiển thị giá trị thực được xử lý (ví dụ: thay thế env var) vì vậy không phải là câu trả lời cho câu hỏi được hỏi.
iisystems

0

Cũng cần đề cập rằng Set-PSDebug tương tự lệnh bó cũ của trường học echo on:

Set-PSDebug -Trace 1

Lệnh này sẽ dẫn đến hiển thị mọi dòng của tập lệnh thực thi:

Khi Tracetham số có giá trị là 1, mỗi dòng script được theo dõi khi nó chạy. Khi tham số có giá trị là 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 chạy.

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.