【发布时间】:2018-06-16 05:02:43
【问题描述】:
我想将两个 txt 文件与 PowerShell 中的进程信息进行比较。 我查了很多网站,总有这么简单的
Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])
引用。
现在由于某种原因,每当我尝试对包含进程信息的 txt 文件执行此操作时,shell 总是输出两个文件的全部内容,而不是差异。但是,当我将两个 txt 文件与每行中的随机单词进行比较时,输出正确地说明了差异。
由于某种原因,只有在比较两个包含进程信息的 txt 文件时才会发生这种情况。
这是我使用的代码。我已经事先更改了目录,但是我也尝试了整个文件路径以防万一,但得到了相同的结果。
Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)
两个文件的内容只是一个普通的(每个文件运行不同的进程)
Get-Process > proc.txt
我希望这样的输出:
InputObject SideIndicator ------------ ------------- System.Diagnostics.Process (EXCEL) => System.Diagnostics.Process (freecell) => System.Diagnostics.Process(记事本)=> System.Diagnostics.Process(探索)但是,如果您输入,我得到的正是 txt 文件中写入的内容
Get-Process > file.txt
编辑:
当我这样写时:
$a = Get-Process
notepad
$b = Get-Process
Compare-Object $a $b
我明白了:
System.Diagnostics.Process(记事本)=>但是,当我使用包含来自Get-Process 的信息的 txt 文件而不是这些变量时,控制台会输出文件的全部内容,而不是像上面那样输出差异。
【问题讨论】:
-
是什么让你认为你从文件中得到了不同的行?请提供示例输入和您期望从该输入中获得的输出示例。
-
为澄清而编辑它
-
随机通常不是一件容易的事情,我们可以重现。根据您的证据,我只是看到 Compare-Object 按设计工作。另一点是将对象写入文件,例如您所做的可能看起来不像您期望的那样。考虑
Get-Process | select -expand name | set-content file.txt或将 csv 用于基于对象的数据,如果您要比较正在运行的进程快照,请使用名称和 pids -
@Matt 您建议的代码仅将进程的名称写入文件。我需要您从 Get-Process 获得的整个流程信息列表。至于随机,我的意思是每行 1 或 2 个单词。
-
进一步编辑以澄清
标签: file powershell