Sự khác biệt giữa Ghi-Máy chủ và Ghi-Đầu ra trong PowerShell là gì?
Giống...
Write-Host "Hello World ";
Write-Output "Hello World";
Sự khác biệt giữa Ghi-Máy chủ và Ghi-Đầu ra trong PowerShell là gì?
Giống...
Write-Host "Hello World ";
Write-Output "Hello World";
Câu trả lời:
Tóm lại, Write-Host
ghi vào chính bảng điều khiển. Hãy coi nó như một MsgBox trong VBScript . Write-Output
mặt khác, ghi vào đường dẫn, vì vậy lệnh tiếp theo có thể chấp nhận nó làm đầu vào của nó. Bạn không bắt buộc phải sử dụng Write-Output
để viết các đối tượng, như Write-Output
được gọi ngầm cho bạn.
PS> Get-Service
sẽ giống như:
PS> Get-Service | Write-Output
Write-Output gửi đầu ra đến đường ống. Từ đó nó có thể được chuyển đến một lệnh ghép ngắn khác hoặc được gán cho một biến. Write-Host gửi trực tiếp đến bảng điều khiển.
$a = 'Testing Write-OutPut' | Write-Output
$b = 'Testing Write-Host' | Write-Host
Get-Variable a,b
Kết quả đầu ra:
Testing Write-Host
Name Value
---- -----
a Testing Write-OutPut
b
Nếu bạn không cho Powershell biết phải làm gì với đầu ra cho đường ống bằng cách gán nó cho một biến hoặc đặt nó vào lệnh anoher, thì nó sẽ được gửi về trạng thái mặc định, thường là giao diện điều khiển nên kết quả cuối cùng sẽ xuất hiện giống nhau .
Write-Output
gửi dữ liệu dưới dạng một đối tượng thông qua đường ống. Trong ví dụ Câu hỏi, nó sẽ chỉ truyền một chuỗi.
write-host
là máy chủ phụ thuộc. Trong bảng điều khiển write-host
về cơ bản là làm [console]::WriteLine
. Xem cái này để biết thêm thông tin.
Write-Ouput
gửi các đối tượng. Lần này nó là một chuỗi, nhưng nói chung nó sẽ gửi các đối tượng và thường không cần thiết phải sử dụng vì nó là cách mặc định để xuất kết quả / dữ liệu :)
Một sự khác biệt khác giữa Ghi-Máy chủ và Ghi-Đầu ra:
Write-Host hiển thị thông báo trên màn hình, nhưng nó không ghi nó vào nhật ký
Write-Output ghi một thông báo vào nhật ký, nhưng nó không hiển thị trên màn hình.
Và Write-Host được coi là có hại. Bạn có thể xem giải thích chi tiết trong Ghi-Máy chủ lưu trữ Được coi là Có hại .
Write-Output
sẽ hiển thị thông báo trên màn hình, nếu bạn đang tự chạy tập lệnh. Vì vậy, tôi không chắc bạn muốn nói gì với "Write-Output ghi một tin nhắn vào nhật ký, nhưng nó không hiển thị trên màn hình." ?
Bạn có thể hiểu sự khác biệt giữa hai cmds với ví dụ dưới đây:
Ghi-máy chủ "msgtxt" | Get-Service Khi chạy ở trên, bạn sẽ nhận được đầu ra là "msgtxt"
Ghi đầu ra "msgtxt" | Get-Service Khi chạy ở trên, bạn sẽ gặp lỗi vì msgtxt không phải là tên của bất kỳ dịch vụ nào. (Trong điều kiện lý tưởng) (Vì bạn đang ghi nó vào một đường dẫn và nó đang được chuyển làm đầu vào cho Get-Service)