Out-File cmdlet 将输出发送到文件。 它隐式使用 PowerShell 的格式设置系统来将内容写入文件。 该文件接收与终端相同的显示表示形式。 这意味着,除非所有输入对象都是字符串,否则输出可能不适合进行编程处理。

使用重定向运算符 > (cmdlet、函数、脚本)将 PowerShell 命令的输出重定向在功能上等同于管道到 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 cmdlet 获取本地计算机上运行的进程的列表。 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 cmdlet 获取本地计算机上运行的进程的列表。 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 cmdlet 获取本地计算机上运行的进程的列表。 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
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 cmdlet 显示 Alias: 的完整路径。 Get-ChildItem 沿着管道将对象发送到 Out-File cmdlet。 Out-File 使用 FilePath 参数指定输出的完整路径和文件名:C:\TestDir\AliasNames.txt Get-Content cmdlet 使用 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 位)字符集使用编码。
  • ansi :对当前区域性的 ANSI 代码页使用编码。 此选项是在 PowerShell 7.4 中添加的。
  • 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 :不使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf32 :采用 UTF-32 格式编码。
  • 从 PowerShell 6.2 开始,Encoding 参数还允许注册代码页的数字 ID(如 -Encoding 1251 )或已注册代码页的字符串名称(如 -Encoding "windows-1251" )。 有关详细信息,请参阅 Encoding.CodePage .NET 文档。

    从 PowerShell 7.4 开始,可以使用 Encoding 参数的 Ansi 值来传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定它。

    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

    你可以通过管道将任何对象传递给此 cmdlet。

    此 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 转义序列呈现方式的功能。 可以根据 $PSStyle.OutputRendering 属性的设置更改传递给 Out-File 的 ANSI 修饰输出。 有关详细信息,请参阅 about_ANSI_Terminals

  • about_Providers
  • about_Quoting_Rules
  • Out-Default
  • Out-Host
  • Out-Null
  • Out-String
  • Tee-Object
  •