Out-File

將輸出傳送到檔案。

語法

ByPath (預設值)

Out-File
    [-FilePath] <string>
    [[-Encoding] <Encoding>]
    [-Append]
    [-Force]
    [-NoClobber]
    [-Width <int>]
    [-NoNewline]
    [-InputObject <psobject>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ByLiteralPath

Out-File
    [[-Encoding] <Encoding>]
    -LiteralPath <string>
    [-Append]
    [-Force]
    [-NoClobber]
    [-Width <int>]
    [-NoNewline]
    [-InputObject <psobject>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

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

指令檔會 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
+               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

指令檔會 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

指令檔會 Get-Process 取得本地電腦上執行的程序清單。 Process 物件儲存在變數 中。 $Procs Out-File 使用 FilePath 參數,並在目前目錄中建立一個名為 Process.txt的檔案。 InputObject 參數將程序物件傳送到$Procs檔案 Process.txt。 編碼參數將輸出轉換為 ASCII 格式。 寬度參數限制檔案中每行為 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:。 指令Get-Location小子顯示完整路徑。Alias: Get-ChildItem 將物件從管線傳送到 Out-File cmdlet。 Out-File 使用 FilePath 參數來指定輸出的完整路徑與檔名, C:\TestDir\AliasNames.txt。 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
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Confirm

在執行 Cmdlet 之前,提示您進行確認。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:參見

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Encoding

指定目標檔案的編碼類型。 預設值為 utf8NoBOM。

此參數可接受的值如下:

  • ascii:使用 ASCII (7 位) 字元集的編碼方式。
  • ansi:使用符合當前文化特性的 ANSI 代碼頁的編碼方式。 此選項已在PowerShell 7.4中新增。
  • bigendianunicode:使用高位元組序以 UTF-16 格式編碼。
  • bigendianutf32:使用大端字節順序以 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 1251)或已註冊代碼頁的字串名稱(例如 -Encoding "windows-1251")。 如需詳細資訊,請參閱 Encoding.CodePage的 .NET 檔。

從 PowerShell 7.4 開始,您可以使用 Ansi 參數的 值,傳遞目前文化的 ANSI 代碼頁的數值 ID,而不需要手動指定。

Note

UTF-7* 不再建議使用。 自 PowerShell 7.1 起,如果您為 utf7 參數指定 ,則會撰寫警告。

參數屬性

類型:Encoding
預設值:UTF8NoBOM
接受的值:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:1
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-FilePath

指定輸出檔的路徑。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:路徑

參數集

ByPath
Position:0
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Force

覆寫唯讀屬性並覆寫現有唯讀檔案。 Force 參數不會覆寫安全性限制。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-InputObject

指定要寫入檔案的物件。 輸入包含 物件的變數,或輸入取得物件的命令或表達式。

參數屬性

類型:PSObject
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:True
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-LiteralPath

指定輸出檔的路徑。 LiteralPath 參數是完全按照它打型的使用。 不接受萬用卡角色。 如果路徑包含逸出字元,請以單引弧括住它。 單引號會告知PowerShell不要將任何字元解譯為逸出序列。 如需詳細資訊,請參閱 about_Quoting_Rules。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:PSPath, LP

參數集

ByLiteralPath
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-NoClobber

NoClobber 防止現有檔案被覆寫,並顯示該檔案已存在的訊息。 預設情況下,如果指定路徑中有檔案,會 Out-File 無預警覆寫該檔案。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False
別名:NoOverwrite

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-NoNewline

指定寫入檔案的內容不以換行字元結尾。 輸入物件的字串表示會串連以形成輸出。 輸出字串之間不會插入空格或換行符。 最後一個輸出字串之後不會新增任何換行符。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 該 Cmdlet 未被執行。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:威斯康辛

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Width

指定每行輸出中最大字元數。 任何額外的字元都會被截斷,而不是包裹。 若未使用此參數,寬度由主機特性決定。 PowerShell 主控台的預設是 80 個字元。 如果你想控制所有調用的Out-File寬度,以及重定向運算子(>和>>),請在使用Out-File前設定$PSDefaultParameterValues['Out-File:Width'] = 2000。

參數屬性

類型:Int32
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。

輸入

PSObject

您可以將任何物件通過管道傳遞至此命令工具。

輸出

None

此 Cmdlet 不會傳回任何輸出。

備註

輸入物件會自動格式化,就像終端機裡的樣子,但你可以用 Format-* cmdlet 明確控制輸出到檔案的格式化。 例如, Get-Date | Format-List | Out-File out.txt

要將 PowerShell 指令的輸出傳送到 Out-File cmdlet,請使用 pipeline。 或者,你可以把資料存進變數,然後用 InputObject 參數把資料傳給 Out-File cmdlet。

Out-File 將資料儲存到檔案,但不會產生任何輸出物件到管線。

PowerShell 7.2 新增了控制 ANSI 轉義序列渲染的能力。 經過 Out-File ANSI 裝飾的輸出會根據屬性設定 $PSStyle.OutputRendering 進行調整。 如需詳細資訊,請參閱 about_ANSI_Terminals。