PowerShell中支持管道的类Unix/Linux tail命令替代方案
解决管道输出提取前/后X行的问题
直接用Select-Object -First <X>和Select-Object -Last <X>就能搞定,不用依赖Get-Content的-Tail参数,分两种场景处理:
场景1:前置命令输出是文本行(字符串数组)
如果前置命令直接输出字符串(比如Get-Content、Get-ChildItem -Name这类),直接接Select-Object就行:
# 取输出的最后10行 Get-Content .\log.txt | Select-Object -Last 10 # 取输出的前5行 Get-Content .\log.txt | Select-Object -First 5
场景2:前置命令输出是自定义对象
如果前置命令输出的是PowerShell对象(比如Get-Item、Get-Process这类返回的FileInfo/Process对象),需要先把对象转成和控制台输出一致的文本行,用Out-String -Stream做中转,再用Select-Object提取:
# 例子:把当前目录所有文件的信息转成文本后取最后10行 Get-Item .\* | Out-String -Stream | Select-Object -Last 10 # 例子:读取当前目录所有文件的内容,合并后取最后10行 Get-Item .\* | Get-Content | Out-String -Stream | Select-Object -Last 10
关键说明
Out-String -Stream的作用是把每个对象转换成单独的文本行(和你在控制台看到的输出格式一致),而不是把所有对象输出拼成一个大字符串,这样Select-Object才能按行处理。Select-Object -Last <X>处理大输出时更高效,它只会在内存中保留最后X行,不会加载全部内容。
内容的提问来源于stack exchange,提问作者Cardgage
相关产品推荐
相关产品推荐

