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
Nguồn
2012-04-26 19:41:44
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
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' –
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