2012-04-26 10 views
5

Tôi có vòng lặp foreach bên trong tập lệnh PowerShell của tôi với bản in $ output trên trình bao trong mỗi lần lặp. Có rất nhiều kết quả đầu ra và số lượng mục mà shell có thể hiển thị bị giới hạn. Tôi đang tìm cách xuất đầu ra sang một tệp văn bản. Tôi biết làm thế nào để làm điều đó trong dòng lệnh. Làm thế nào là nó có thể trong một powershell mặc dù?Xuất đầu ra powershell thành tệp văn bản

FYI, tôi đang sử dụng một kịch bản hàng loạt từ dòng lệnh để chạy các kịch bản PowerShell như

powershell c:\test.ps1 c:\log.log 

Trả lời

12

Bạn luôn có thể chuyển hướng đầu ra một exe vào một tập tin như vậy (thậm chí từ cmd.exe):

powershell c:\test.ps1 > c:\test.log 

trong PowerShell, bạn cũng có thể chuyển hướng các lệnh cá nhân để nộp nhưng trong những trường hợp, bạn có thể muốn thêm vào file log chứ không phải là ghi đè lên nó ví dụ:

$logFile = 'c:\temp\test.log' 
"Executing script $($MyInvocation.MyCommand.Path)" > $logFile 
foreach ($proc in Get-Process) { 
    $proc.Name >> $logFile 
} 
"Another log message here" >> $logFile 

Như bạn có thể thấy, thực hiện chuyển hướng trong tập lệnh hơi khó chịu vì bạn phải thực hiện rất nhiều chuyển hướng đến tệp. OTOH, nếu bạn chỉ muốn chuyển hướng một phần của đầu ra vào tệp thì bạn có quyền kiểm soát nhiều hơn theo cách này. Một tùy chọn khác là sử dụng Write-Host để thông tin đầu ra cho bàn điều khiển có nghĩa là cho ai đó quan sát kết quả thực thi tập lệnh. Lưu ý rằng không thể chuyển hướng đầu ra Write-Host vào tệp.

Đây là một ví dụ thực hiện từ Cmd.exe

C:\Temp>type test.ps1 
$OFS = ', ' 
"Output from $($MyInvocation.MyCommand.Path). Args are: $args" 

C:\Temp>powershell.exe -file test.ps1 1 2 a b > test.log 

C:\Temp>type test.log 
Setting environment for using Microsoft Visual Studio 2008 Beta2 x64 tools. 
Output from C:\Temp\test.ps1. Args are: 1, 2, a, b 
+1

Vì vậy, nếu tôi đang gặp một cuộc tranh cãi với các kịch bản PowerShell, tôi có thể chỉ đơn giản là làm: powershell c: \ test.ps1 c: \ log.log> c: \ test.log nơi log.log là đối số? – ssn

+0

Có, nhưng hãy thử sử dụng tham số '-File', ví dụ: 'powershell -file c: \ test.ps1 c: \ log.log> c: \ test.log' –

+0

nếu tôi thử sử dụng tham số tệp (hoặc không có tệp) trong tệp bó, tôi nhận được dòng sau đang được thực thi trong lệnh line: powershell -file c: \ test.ps1 c: \ log.log 1> c: \ test.log Tôi không hiểu làm thế nào mà "1" đến đó ..... Và tôi đoán toàn bộ văn bản sau khi tên kịch bản được lấy làm tên tệp đầu vào và do đó đầu ra không phải là những gì được mong đợi. Và hành vi này là như nhau cho dù tôi sử dụng "-file" hay không. – ssn

4

gì về việc sử dụng lệnh 'tee'

C:\ipconfig | tee C:\log.txt 
+0

Đây là những gì tôi đang tìm kiếm. Tôi muốn xuất ra cả màn hình và tệp. Cảm ơn! – Hajjat