Out-File
將輸出傳送至檔案。
語法
Out-File
[-FilePath] <string>
[[-Encoding] <Encoding>]
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Out-File
[[-Encoding] <Encoding>]
-LiteralPath <string>
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Cmdlet 會將 Out-File
輸出傳送至檔案。 它會隱含地使用PowerShell的格式設定系統來寫入檔案。 檔案會接收與終端機相同的顯示表示法。 這表示除非所有輸入物件都是字串,否則輸出可能不適合以程式設計方式處理。
使用重新導向運算子 (>
) 重新導向 PowerShell 命令的輸出 (Cmdlet, 函式, 腳本) 的功能相當於管線 Out-File
,而不需要額外的參數。
PowerShell 7.4 在用來重新導向原生命令的 stdout 數據流時,已變更重新導向運算符的行為。 如需重新導向的詳細資訊,請參閱about_Redirection。
範例
範例 1:傳送輸出並建立檔案
此範例示範如何將本機計算機進程清單傳送至檔案。 如果檔案不存在, Out-File
請在指定的路徑中建立檔案。
Get-Process | Out-File -FilePath .\Process.txt
Get-Content -Path .\Process.txt
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
29 22.39 35.40 10.98 42764 9 Application
53 99.04 113.96 0.00 32664 0 CcmExec
27 96.62 112.43 113.00 17720 9 Code
Cmdlet Get-Process
會取得本機計算機上執行的進程清單。 Process 物件會向下傳送至 Out-File
Cmdlet。 Out-File
會 使用 FilePath 參數,並在名為 Process.txt 的目前目錄中建立檔案。 命令 Get-Content
會從檔案取得內容,並在PowerShell控制台中顯示它。
範例 2:防止覆寫現有的檔案
此範例會防止覆寫現有的檔案。 根據預設,會 Out-File
覆寫現有的檔案。
Get-Process | Out-File -FilePath .\Process.txt -NoClobber
Out-File : The file 'C:\Test\Process.txt' already exists.
At line:1 char:15
+ Get-Process | Out-File -FilePath .\Process.txt -NoClobber
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Cmdlet Get-Process
會取得本機計算機上執行的進程清單。 Process 物件會向下傳送至 Out-File
Cmdlet。 Out-File
會 使用 FilePath 參數,並嘗試寫入目前目錄中名為 Process.txt 的檔案。 NoClobber 參數可防止覆寫檔案,並顯示檔案已經存在的訊息。
範例 3:以 ASCII 格式將輸出傳送至檔案
此範例示範如何使用特定編碼類型來編碼輸出。
$Procs = Get-Process
Out-File -FilePath .\Process.txt -InputObject $Procs -Encoding ASCII -Width 50
Cmdlet Get-Process
會取得本機計算機上執行的進程清單。 Process 物件會儲存在變數 $Procs
中。 Out-File
會 使用 FilePath 參數,並在名為 Process.txt 的目前目錄中建立檔案。 InputObject 參數會將進程對象$Procs
傳遞至檔案Process.txt。 Encoding 參數會將輸出轉換成 ASCII 格式。 Width 參數會將檔案中的每個行限制為 50 個字元,因此可能會截斷某些數據。
範例 4:使用提供者並將輸出傳送至檔案
此範例示範當您不在 FileSystem 提供者磁碟驅動器中時,如何使用 Out-File
Cmdlet。 Get-PSProvider
使用 Cmdlet 來檢視本機電腦上的提供者。 如需詳細資訊,請參閱 about_Providers。
PS> Set-Location -Path Alias:
PS> Get-Location
Path
----
Alias:\
PS> Get-ChildItem | Out-File -FilePath C:\TestDir\AliasNames.txt
PS> Get-Content -Path C:\TestDir\AliasNames.txt
CommandType Name
----------- ----
Alias % -> ForEach-Object
Alias ? -> Where-Object
Alias ac -> Add-Content
Alias cat -> Get-Content
命令Set-Location
會使用 Path 參數,將目前的位置設定為登錄提供者 Alias:
。 Cmdlet Get-Location
會顯示 的完整路徑 Alias:
。
Get-ChildItem
將物件向下傳送至 Out-File
Cmdlet。 Out-File
會 使用 FilePath 參數來指定輸出的完整路徑和檔名 C :\TestDir\AliasNames.txt。 Cmdlet Get-Content
會使用 Path 參數,並在 PowerShell 控制台中顯示檔案的內容。
範例 5:設定整個範圍的檔案輸出寬度
這個範例會使用 $PSDefaultParameterValues
將 和 重新導向運算子的所有>
>>
調用Out-File
參數設定Width
為 2000。 這可確保在目前範圍內將格式化數據輸出到檔案的任何地方,PowerShell 會使用 2000 的線條寬度,而不是 PowerShell 主機控制台寬度所決定的線條寬度。
function DemoDefaultOutFileWidth() {
try {
$PSDefaultParameterValues['out-file:width'] = 2000
$logFile = "$pwd\logfile.txt"
Get-ChildItem Env:\ > $logFile
Get-Service -ErrorAction Ignore |
Format-Table -AutoSize |
Out-File $logFile -Append
Get-Process | Format-Table Id,SI,Name,Path,MainWindowTitle >> $logFile
}
finally {
$PSDefaultParameterValues.Remove('out-file:width')
}
}
DemoDefaultOutFileWidth
如需 的詳細資訊 $PSDefaultParameterValues
,請參閱 about_Preference_Variables。
參數
-Append
將輸出新增至現有檔案的結尾。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Confirm
執行 Cmdlet 之前先提示您確認。
類型: | SwitchParameter |
別名: | cf |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Encoding
指定目標檔案的編碼類型。 預設值是 utf8NoBOM
。
此參數可接受的值如下:
ascii
:使用 ASCII (7 位) 字元集的編碼方式。ansi
:針對目前文化特性的 ANSI 代碼頁,使用 的編碼方式。 此選項已在PowerShell 7.4中新增。bigendianunicode
:使用 big-endian 位元組順序以 UTF-16 格式編碼。bigendianutf32
:使用 big-endian 位元組順序以 UTF-32 格式編碼。oem
:使用 MS-DOS 和控制台程式的預設編碼方式。unicode
:使用位元組順序以UTF-16格式編碼。utf7
:以 UTF-7 格式編碼。utf8
:以 UTF-8 格式編碼。utf8BOM
:使用位元節順序標記以 UTF-8 格式編碼 (BOM)utf8NoBOM
:以 UTF-8 格式編碼,不含位元組順序標記 (BOM)utf32
:以 UTF-32 格式編碼。
從 PowerShell 6.2 開始,Encoding 參數也允許已註冊代碼頁的數值識別元(例如 -Encoding 1251
)或已註冊代碼頁的字串名稱(例如 )。-Encoding "windows-1251"
如需詳細資訊,請參閱 Encoding.CodePage 的 .NET 檔。
從 PowerShell 7.4 開始,您可以使用 Ansi
Encoding 參數的值,傳遞目前文化特性 ANSI 代碼頁的數值標識碼,而不需要手動指定它。
注意
不再建議使用UTF-7* 。 自 PowerShell 7.1 起,如果您為 Encoding 參數指定utf7
,則會撰寫警告。
類型: | Encoding |
接受的值: | ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32 |
Position: | 1 |
預設值: | UTF8NoBOM |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-FilePath
指定輸出檔案的路徑。
類型: | String |
別名: | Path |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | False |
-Force
覆寫唯讀屬性,並覆寫現有的唯讀檔案。 Force 參數不會覆寫安全性限制。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-InputObject
指定要寫入檔案的物件。 輸入包含 物件的變數,或輸入取得物件的命令或表達式。
類型: | PSObject |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | True |
接受萬用字元: | False |
-LiteralPath
指定輸出檔案的路徑。 LiteralPath 參數的型別完全一樣使用。 不接受通配符。 如果路徑包含逸出字元,請以單引弧括住它。 單引號會告知PowerShell不要將任何字元解譯為逸出序列。 如需詳細資訊,請參閱 about_Quoting_Rules。
類型: | String |
別名: | PSPath, LP |
Position: | Named |
預設值: | None |
必要: | True |
接受管線輸入: | True |
接受萬用字元: | False |
-NoClobber
NoClobber 可防止覆寫現有的檔案,並顯示檔案已經存在的訊息。 根據預設,如果檔案存在於指定的路徑中, Out-File
則會覆寫檔案而不發出警告。
類型: | SwitchParameter |
別名: | NoOverwrite |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-NoNewline
指定寫入檔案的內容不會以換行符結尾。 輸入物件的字串表示會串連以形成輸出。 輸出字串之間不會插入空格或換行符。 最後一個輸出字串之後不會新增任何換行符。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-WhatIf
顯示執行 Cmdlet 後會發生的情況。 Cmdlet 未執行。
類型: | SwitchParameter |
別名: | wi |
Position: | Named |
預設值: | False |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Width
指定每個輸出列中的字元數上限。 任何其他字元都會被截斷,不會包裝。 如果未使用此參數,則寬度取決於主機的特性。 PowerShell 控制台的預設值為 80 個字元。 如果您想要控制 所有調用Out-File
的寬度,以及重新導向運算符 (>
和 >>
),請使用 Out-File
之前設定$PSDefaultParameterValues['out-file:width'] = 2000
。
類型: | Int32 |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
輸入
您可以使用管線將任何物件傳送至此 Cmdlet。
輸出
None
此 Cmdlet 不會傳回任何輸出。
備註
輸入物件會在終端機中自動格式化,但您可以使用 Format-*
Cmdlet 來明確控制輸出到檔案的格式。 例如,Get-Date | Format-List | Out-File out.txt
若要將 PowerShell 命令的輸出傳送至 Out-File
Cmdlet,請使用管線。 或者,您可以將資料儲存在變數中,並使用 InputObject 參數將數據傳遞至 Out-File
Cmdlet。
Out-File
會將資料儲存至檔案,但不會產生管線的任何輸出物件。
PowerShell 7.2 新增了控制 ANSI 逸出序列轉譯方式的功能。 傳遞至 Out-File
的 ANSI 裝飾輸出可以根據 屬性的 $PSStyle.OutputRendering
設定來變更。 如需詳細資訊,請參閱 about_ANSI_Terminals。