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>]
说明
              Out-File cmdlet 将输出发送到文件。 它隐式使用 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
              Get-Process cmdlet 获取在本地计算机上运行的进程的列表。 
              进程 对象将管道发送到 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 获取在本地计算机上运行的进程的列表。 
              进程 对象将管道发送到 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。 
              编码 参数将输出转换为 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:。 
              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
将输出添加到现有文件的末尾。
参数属性
| 类型: | SwitchParameter | 
| 默认值: | None | 
| 支持通配符: | False | 
| 不显示: | False | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-Confirm
在运行 cmdlet 之前,提示你进行确认。
参数属性
| 类型: | SwitchParameter | 
| 默认值: | False | 
| 支持通配符: | False | 
| 不显示: | False | 
| 别名: | cf | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-Encoding
指定目标文件的编码类型。 默认值是 utf8NoBOM。
此参数的可接受值如下所示:
- 
              ascii:对 ASCII(7 位)字符集使用编码。
- 
              bigendianunicode:使用大端字节序以 UTF-16 格式进行编码。
- 
              bigendianutf32:使用大端字节顺序以 UTF-32 格式进行编码。
- 
              oem:对 MS-DOS 和控制台程序使用默认编码。
- 
              unicode:使用小端字节序以 UTF-16 格式进行编码。
- 
              utf7:采用 UTF-7 格式编码。
- 
              utf8:采用 UTF-8 格式编码。
- 
              utf8BOM:以 UTF-8 格式编码并附加字节顺序标记(BOM)
- 
              utf8NoBOM:采用不带字节顺序标记(BOM)的 UTF-8 格式进行编码。
- 
              utf32:采用 UTF-32 格式编码。
从 PowerShell 6.2 开始,编码参数 还允许使用注册代码页的数字 ID(如 -Encoding 1251)或注册代码页的字符串名称(如 -Encoding "windows-1251")。 有关详细信息,请参阅 Encoding.CodePage.NET 文档。
注释
              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 运行时会发生什么情况。 命令脚本未运行。
参数属性
| 类型: | SwitchParameter | 
| 默认值: | False | 
| 支持通配符: | False | 
| 不显示: | False | 
| 别名: | 无线 | 
参数集
(All)
| Position: | Named | 
| 必需: | False | 
| 来自管道的值: | False | 
| 来自管道的值(按属性名称): | False | 
| 来自剩余参数的值: | False | 
-Width
指定每行输出中的字符数。 任何其他字符将被截断,而不是包装。 如果不使用此参数,则宽度由主机的特征决定。 PowerShell 控制台的默认值为 80 个字符。 如果要控制 Out-File 的所有调用以及重定向运算符(> 和 >>)的宽度,请使用 $PSDefaultParameterValues['out-file:width'] = 2000之前设置 Out-File。
参数属性
| 类型: | 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
可以通过管道将任何对象传递给 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 将数据保存到文件,但不会向管道生成任何输出对象。