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>]

说明

cmdlet Out-File 将输出发送到文件。 它隐式使用 PowerShell 的格式设置系统写入文件。 该文件接收与终端相同的显示表示形式。 这意味着输出可能不适合编程处理,除非所有输入对象都是字符串。 如果需要为输出指定参数,请使用 Out-File 而不是重定向运算符 (>) 。 有关重定向的详细信息,请参阅 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 对象向下发送到该 cmdlet 的管道Out-FileOut-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 对象向下发送到该 cmdlet 的管道Out-FileOut-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:使用提供程序并将输出发送到文件

此示例演示如何 Out-File 在不在 FileSystem 提供程序驱动器中使用 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

将输出添加到现有文件的末尾。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

指定目标文件的编码类型。 默认值为 utf8NoBOM

此参数的可接受值如下所示:

  • ascii:使用 ASCII (7 位) 字符集的编码。
  • bigendianunicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。
  • bigendianutf32:使用 big-endian 字节顺序以 UTF-32 格式进行编码。
  • oem:使用 MS-DOS 和控制台程序的默认编码。
  • unicode:使用 little-endian 字节顺序以 UTF-16 格式进行编码。
  • utf7:以 UTF-7 格式进行编码。
  • utf8:以 UTF-8 格式进行编码。
  • utf8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf8NoBOM:以 UTF-8 格式编码,不带字节顺序标记 (BOM)
  • utf32:以 UTF-32 格式进行编码。

从 PowerShell 6.2 开始, Encoding 参数还允许使用已注册代码页的数字 ID (如 -Encoding 1251) 或已注册代码页的字符串名称 () -Encoding "windows-1251" 。 有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。

注意

不再建议使用 UTF-7*。 从 PowerShell 7.1 起,如果为 Encoding 参数指定utf7,则会写入警告。

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:1
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

指定输出文件的路径。

Type:String
Aliases:Path
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Force

重写只读属性并覆盖现有的只读文件。 Force 参数不会覆盖安全限制。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定要写入文件的对象。 输入一个包含对象的变量,或键入可获取对象的命令或表达式。

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

指定输出文件的路径。 LiteralPath 参数与键入时完全相同。 不接受通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。 有关详细信息,请参阅 about_Quoting_Rules

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoClobber

NoClobber 可防止覆盖现有文件,并显示一条消息,指出该文件已存在。 默认情况下,如果文件存在于指定路径中, Out-File 则覆盖该文件而不发出警告。

Type:SwitchParameter
Aliases:NoOverwrite
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoNewline

指定写入文件的内容不以换行符结尾。 输入对象的字符串表示形式连接在一起,形成输出。 在输出字符串之间不插入空格或换行符。 未在最后一个输出字符串之后添加换行符。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

显示运行该 cmdlet 时会发生什么情况。 此 cmdlet 未运行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Width

指定输出的每一行中的字符数。 将截断任何额外字符,不换行。 如果未使用此参数,则宽度由主机的特征决定。 PowerShell 控制台的默认值为 80 个字符。 如果要控制 的所有调用Out-File的宽度以及重定向运算符 (>>>) ,请在使用 Out-File之前设置 $PSDefaultParameterValues['out-file:width'] = 2000

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

PSObject

可以通过管道将任何对象传递给 Out-File

输出

None

Out-File 不生成任何输出。

备注

输入对象会像在终端中一样自动设置格式,但可以使用 Format-* cmdlet 显式控制输出到文件的格式。 例如: Get-Date | Format-List | Out-File out.txt

若要将 PowerShell 命令的输出发送到 Out-File cmdlet,请使用管道。 或者,可以将数据存储在变量中,并使用 InputObject 参数将数据传递到 Out-File cmdlet。

Out-File 将数据保存到文件,但它不会向管道生成任何输出对象。