[玩转系统] 如何使用 PowerShell Out-File 输出到文件
作者:精品下载站 日期:2024-12-14 03:42:22 浏览:14 分类:玩电脑
如何使用 PowerShell Out-File 输出到文件
PowerShell 命令的输出默认显示在终端中。但在某些情况下,将输出重定向到 PowerShell 中的文件更有用。为此,我们将使用 Out-File cmdlet。
有多种方法可以将 PowerShell 脚本或命令的结果输出到文件。甚至可以在终端中显示输出,同时将其导出到文件中。您是否知道您还可以仅导出成功、警告或错误结果?
在本文中,我们将了解如何在 PowerShell 中将输出写入文件。我还将解释如何附加到现有文件或如何创建日志文件。
Powershell 将输出写入文件
有多种方法可以将 PowerShell 的输出写入文件。最常见的方法是使用 Out-File
cmdlet 或重定向运算符 >
。其他选项包括使用 Set-Content
和 Add-Content
cmdlet。我们将重点关注前两个,但如果相关,我将简要提及替代方案。
Out-File
cmdlet 和重定向运算符 >
允许您将 PowerShell 输出写入并附加 (>>
) 到文件中。两者之间的区别在于,前者接受参数,后者不接受参数。
通过 Out-File cmdlet,我们可以使用以下参数:
-Filepath设置文件的位置和名称
-Append将输出附加到文件的现有内容
-Force覆盖只读文件
-NoClobber防止覆盖文件
-NoNewLine不会写入换行符。
-Width限制每行的字符数(默认80)
-WhatIf在测试模式下运行
PowerShell 重定向运算符
然而,重定向运算符没有任何参数。但与Out-File相比,它有一个优势。使用 Out-File cmdlet 时,仅导出成功的结果,因此警告或错误不会写入文件。
使用重定向运算符时,我们可以指定要导出的流:
稍后我将详细解释不同的流,但让我们首先看看如何简单地将输出写入 PowerShell 中的文件。
要将输出写入文件,您只需在脚本或命令后面通过管道传输 Out-File
cmdlet 并指定路径即可。如果该文件不存在,则将由 cmdlet 创建它:
Get-Process -Name explorer | Out-File -FilePath c:\temp\process.txt
# Same as:
Get-Process -Name explorer > c:\temp\process.txt
# The results
Get-Content C:\temp\process.txt
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
132 94,56 158,22 131,45 123364 1 explorer
PS C:\>
如您所见,Get-Process
cmdlet 的结果存储在 process.txt 文件中:
如果不指定任何其他参数,则 Out-File cmdlet 和重定向运算符将默认覆盖任何现有文件。我们可以通过向 cmdlet 添加 -NoClobber
参数来防止这种情况
Get-Process -Name explorer | Out-File c:\temp\process.txt -NoClobber
请注意,您无法阻止使用重定向运算符进行覆盖
如果文件已经存在,则会抛出错误:
如果您想输出到脚本内的文件,那么我建议您首先使用 Test-Path
cmdlet 来确定该文件是否已存在。这样您就可以编写更好的解决方案,例如在文件名中附加日期,而不是简单地尝试写入它:
$exportPath = "C:\temp\process.txt"
If (Test-Path $exportPath) {
# Show a warning or change the file name here
Write-Warning "File already exists"
$exportPath = "C:\temp\process-1.txt" # create something nice with a date or timestamp
}else{
Get-Process -Name explorer | Out-File $exportPath -NoClobber
}
PowerShell 附加到文件
我们还可以将输出附加到文件的现有内容中,而不是覆盖。为此,我们可以使用 -append
参数或使用重定向运算符 >>。在这两种情况下,输出的内容都将添加到现有文件中。
您还可以追加到不存在的文件,如果指定的文件不存在,两种方法都会创建一个新文件。
# Append with the Out-File cmdlet
'Apple' | Out-File -FilePath C:\temp\fruits.txt -Append
Get-Content -Path c:\temp\fruits.txt
# Result
Apple
# Append with the redirect operator
'Pear' >> C:\temp\fruits.txt
Get-Content -Path c:\temp\fruits.txt
# Result
Apple
Pear
将输出附加到现有文件时,内容将放置在新行上。如果您希望将内容放在一行上,创建一个长字符串,则需要使用带有 -NoNewLine
参数的 Out-File cmdlet。
换行符放置在您添加到文件中的值之后。因此,将 -NoNewLine
参数添加到第一个输出也很重要。
# Note that you will need to specify NoNewLine for the first entry as well
'BlueBerry;' | Out-File -FilePath C:\temp\fruits.txt -NoNewline
# Appending more berries
'StrawBerry;' | Out-File -FilePath C:\temp\fruits.txt -Append -NoNewline
'BlackBerry;' | Out-File -FilePath C:\temp\fruits.txt -Append -NoNewline
'RaspBerry;' | Out-File -FilePath C:\temp\fruits.txt -Append -NoNewline
'CranBerry;' | Out-File -FilePath C:\temp\fruits.txt -Append -NoNewline
为了使结果更具可读性,我为所有值添加了分号。正如您所看到的,所有结果都在同一行:
使用 PowerShell 添加内容
将内容添加到文件的另一个选项是使用 Add-Content cmdlet。 Add-Content cmdlet 的最大优点之一是它允许您一次将内容附加到多个文件。
就像 Out-File cmdlet 和重定向运算符一样,如果文件不存在,Add-Content cmdlet 会创建一个新文件
因此,为了简单地将内容添加到文件中,我们可以使用以下命令:
Add-Content -Path c:\temp\file.txt -Value "New line to add"
要将相同的内容添加到多个文件,我们有几个参数可以帮助我们。我们可以在路径中使用通配符来指定要更新的文件。此外,我们可以排除文件名,甚至使用过滤器。
下面的示例将把当前日期添加到路径 c:\temp\files 中的所有 TXT 文件中,文件名中带有 readme 的文件除外:
Add-Content -Path C:\temp\files\*.txt -Value (Get-Date) -Exclude "readme*"
除自述文件外的所有文件均已更新:
include 和 except 参数都允许您指定想要或不想要更新的文件的字符串数组。
如果我们采用上面的示例,我们还可以使用过滤器参数来仅选择包含单词 log 的文件:
Add-Content -Path C:\temp\files\* -Value (Get-Date) -Filter "*log*"
仅将错误、警告或成功写入文件
out-file cmdlet 只会将命令或脚本的成功结果写入文件。但有时您也希望输出警告或错误。
为了实现这一点,我们可以使用重定向运算符。它允许您指定要输出到文件的流。
我们以下面的脚本为例:
Function Get-ProcessCpu {
param(
[Parameter(Mandatory = $true)]$name
)
Get-Process -Name $name | select cpu
}
Get-ProcessCpu -name "explorer2" | Out-File C:\temp\process.txt
进程“Explorer2”不存在,因此 Get-Process cmdlet 将引发错误。如果我们像这样运行脚本,那么 process.txt 文件将完全为空。
但是,如果我们使用重定向运算符,我们可以指定要输出的流。
# Write all results to the file:
Get-ProcessCpu -name "explorer2" *> C:\temp\process.txt
# Write only the error to the file:
Get-ProcessCpu -name "explorer2" 2> C:\temp\process-error-log.txt
# Write only warnings to a file:
Get-ProcessCpu -name "explorer2" 3> C:\temp\process-error-log.txt
如您所见,错误已使用重定向运算符写入文本文件:
Powershell写入日志文件
写入日志文件的最佳选择是使用 Start-Transcript cmdlet,但我们也可以使用 Add-Content cmdlet 或重定向运算符编写自己的日志函数。
使用重定向运算符会限制您的可能性,但如果您只想将脚本的错误写入日志文件,这是一个很好的方法:
Function Get-ProcessCpu {
param(
[Parameter(Mandatory = $true)]$name
)
Get-Process -Name $name | select cpu
}
# Write only errors to a log file
Get-ProcessCpu -name "explorer2" 2>> "C:\temp\files$env:computername-process.log"
但是,当您将消息写入日志文件时,您可能希望有更多的控制权。通过日志文件,我们可以了解事件发生的时间以及事件的严重性,这一点很重要。所以我们要做的就是在日志消息中添加时间戳和事件级别。
这样我们就可以轻松地读取日志文件并识别发生的任何错误。
# Set log file path
$logFile = "C:\temp\files$env:computername-process.log"
Function Write-Log {
param(
[Parameter(Mandatory = $true)][string] $message,
[Parameter(Mandatory = $false)]
[ValidateSet("INFO","WARN","ERROR")]
[string] $level = "INFO"
)
# Create timestamp
$timestamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
# Append content to log file
Add-Content -Path $logFile -Value "$timestamp [$level] - $message"
}
Write-Log -level ERROR -message "String failed to be a string"
上面的函数是 PowerShell 的简单日志文件创建器的示例,它允许您将带有严重性和时间戳的消息(事件)写入日志文件。
总结
正如您所看到的,PowerShell 中有多种方法可以将结果输出到文件中。要快速将某些内容输出到文件,可以使用重定向运算符或 Out-File cmdlet。
当您想要将输出导出到 CSV 文件时,请务必阅读本文。还可以使用 Replace 方法替换文件内的内容。
如果您有任何疑问,请在下面发表评论。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag