2013-04-24 17 views
14

Trong powershellLàm thế nào để Viết-Verbose từ Invoke-Command?

Write-Verbose và cờ -Verbose được sử dụng để cung cấp thông tin chi tiết khi lệnh được chạy ở chế độ tiết. Tôi đang chạy một số kịch bản từ xa và muốn nắm bắt đầu ra đầu ra tiết. Tuy nhiên, Invoke-Command dường như không nắm bắt được kênh tiết.

PS:> Invoke-Command -ComputerName MY-COMPUTERNAME -Verbose { Write-Verbose "blah" } 
PS:> 

Làm cách nào để nắm bắt đầu ra tiết khi chạy tập lệnh từ xa?

+1

Có vẻ như đây là lỗi với PowerShell. Tôi đã tạo một yêu cầu lỗi mà bạn có thể đi lên bỏ phiếu tại https://connect.microsoft.com/PowerShell/feedback/details/806241/invoke-command-does-not-pass-the-verbose-parameter-to -remote-session – deadlydog

Trả lời

10

Hãy thử nó theo cách này:

Invoke-Command -ComputerName MY-COMPUTERNAME {$VerbosePreference='Continue'; Write-Verbose "blah" } 
+0

Tôi hiểu, do đó, không phải là kênh tiết không bị bắt quá nhiều vì cờ '-Verbose' không vượt qua VerbosePreference vào ngữ cảnh từ xa (thậm chí nó làm cái quái gì?). Bất kỳ ý tưởng làm thế nào để thiết lập các VerbosePreference từ xa mà không cần sửa đổi các kịch bản chính nó? –

+0

Tôi không biết cách nào để thực hiện điều đó ngay trong lệnh gọi. Bạn có thể tạo phiên tùy chỉnh có tùy chọn đó làm mặc định và sau đó nhắm mục tiêu lệnh gọi lại đến phiên đó. nhưng mặc định cho biến số ưa thích đó là 'SilentlyContinue' và tùy chọn duy nhất bạn có với lệnh gọi là đặt lại nó trong khối tập lệnh. – mjolinor

+1

Công tắc -Khoa nào đang làm trong ví dụ của bạn là đầu ra Verabse enabline của lệnh ghép ngắn lệnh gọi nếu $ VerbosePreference cục bộ của bạn được thiết lập để loại bỏ nó. Thật không may nó không xuất hiện để tạo ra bất kỳ đầu ra tiết, vì vậy về cơ bản nó không làm bất cứ điều gì ..... – mjolinor

13

điều tốt nhất tôi nghĩ bạn có thể làm là tạo một hàm có [CmdletBinding()] để nó hỗ trợ chuyển đổi -verbose. Sau đó, bạn sẽ có thể nắm bắt trạng thái tiết của hàm cục bộ bằng cách sử dụng $ VerbosePreference cục bộ và chuyển nó theo lệnh gọi. Điều này sẽ chỉ hoạt động trong Powershell 3.0 trở lên, vì bạn sẽ cần sử dụng công cụ sửa đổi phạm vi $ Using.

Function write-blah{ 
[CmdletBinding()] 
Param() 
Invoke-Command -ComputerName MY-COMPUTERNAME {$VerbosePreference=$Using:VerbosePreference; Write-Verbose "blah" } 
} 

Sau đó, bạn sẽ gọi hàm của bạn như thế này.

Write-Blah -verbose 

Khi thử nghiệm, điều này đã hiệu quả đối với tôi. Tôi tin rằng chức năng của bạn phải hỗ trợ các tham số, do đó khối Param() trống.

+1

Câu trả lời thích hợp hơn, vì nó là chung chung hơn. – Moerwald

Các vấn đề liên quan