Cách tốt nhất để ghi vào bảng điều khiển trong PowerShell


142

Tôi có một chút nhầm lẫn về các cách khác nhau để in (echo) lên bàn điều khiển. Tôi đã thấy rằng có nhiều cách để ghi đầu ra vào bàn điều khiển, chẳng hạn như:

Write-Host "Hello world1"
"Hello World2"
Out-Host -InputObject "Hello World3"

Tất cả ba cách sẽ in ra bàn điều khiển. Phần giữa đơn giản hơn và ít dài dòng hơn và dễ sử dụng hơn. Tôi cũng thấy rằng khi bạn viết một hàm như:

function GetValues()
{
    "1"
    "2"
}

Nó vẫn trả về hai chuỗi trong đường ống:

Và tôi vẫn có thể in ra các giá trị:

foreach ($s in GetValues)
{
    Write-Host "s: " $s
}

Điều tôi đã tìm thấy là chỉ sử dụng chuỗi trích dẫn không xuất hiện trên các máy chủ tùy chỉnh và tôi đã phải sử dụng Máy chủ ghi để nhận giá trị để in trên máy chủ tùy chỉnh.

Bằng cách nào đó tôi thấy điều này khó hiểu. Được "Print something"cho là bí danh Write-Hosthoặc ý định là gì?

Câu trả lời:


101

Hành vi mặc định của PowerShell chỉ là đổ mọi thứ rơi ra khỏi đường ống mà không bị phần tử đường ống khác nhặt hoặc được gán cho một biến (hoặc chuyển hướng) vào Out-Host. Những gì Out-Hostkhông rõ ràng là phụ thuộc vào máy chủ.

Chỉ cần để mọi thứ rơi ra khỏi đường ống không phải là sự thay thế Write-Hosttồn tại vì lý do duy nhất là xuất văn bản trong ứng dụng máy chủ.

Nếu bạn muốn đầu ra, sau đó sử dụng các Write-*lệnh ghép ngắn. Nếu bạn muốn trả về giá trị từ một hàm, thì chỉ cần kết xuất các đối tượng ở đó mà không có lệnh ghép ngắn nào.


1
Tôi đã gõ nó trong tập lệnh .vbs. Chỉ dòng mã đó và nó ném lỗi cho tôi.
FrenkyB

58

Một giữa viết vào đường ống. Write-HostOut-Hostviết lên bàn điều khiển. 'echo' là một bí danh Write-Outputcũng ghi vào đường ống. Cách tốt nhất để ghi vào bàn điều khiển là sử dụng Write-Hostlệnh ghép ngắn.

Khi một đối tượng được ghi vào đường ống, nó có thể được sử dụng bởi các lệnh khác trong chuỗi. Ví dụ:

"hello world" | Do-Something

nhưng điều này sẽ không hoạt động kể từ khi Write-Hostghi vào bảng điều khiển, không phải vào đường ống dẫn (Do-Something sẽ không nhận được chuỗi):

Write-Host "hello world" | Do-Something

3
Câu trả lời này là đúng về mặt kỹ thuật, nhưng tôi nghi ngờ nó sẽ dẫn đến một người dùng PowerShell lạc lối. Nguyên tắc đầu tiên của PowerShell hiệu quả là tạo ra đầu ra hữu ích trong đường ống. Nếu bạn đang sử dụng Write-Host rất nhiều, có lẽ bạn đang làm sai.
OldFart

6
Chà, đó không phải là những gì OP yêu cầu, làm thế nào để viết lên bàn điều khiển? Có một sự khác biệt giữa viết cho chủ nhà và viết cho đường ống, và người ta phải biết mỗi người làm gì. Tôi sẽ cập nhật câu trả lời của tôi với một sự làm rõ.
Shay Levy
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.