Compare-Object 与进程的奇怪行为

Compare-Object weird behaviour with processes

我想将两个 txt 文件与 PowerShell 中的进程信息进行比较。

我查了很多网站,总有这么简单的

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

报价。

现在由于某种原因,每当我尝试对包含进程信息的 txt 文件执行此操作时,shell 总是输出两个文件的全部内容,而不是差异。但是,当我将两个 txt 文件与每行中的随机单词进行比较时,输出正确地说明了差异。

由于某种原因,只有在比较两个包含进程信息的 txt 文件时才会发生这种情况。

这是我使用的代码。我已经事先更改了目录,但是我也尝试使用整个文件路径以防万一,但得到了相同的结果。

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

两个文件的内容只是一个普通的(每个文件运行不同的进程)

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

我希望这样的输出:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

但是,如果您输入

,我得到的正是 txt 文件中写入的内容

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

编辑:

当我这样写时:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

我明白了:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

但是,当我使用包含 Get-Process 信息的 txt 文件而不是这些变量时,控制台会输出文件的全部内容,而不是像上面那样输出差异。


输出重定向运算符将 Get-Process 输出的默认文本表示写入文件。这意味着您的输出是表格形式的文本,而不是 Process 对象。表格输出包含 CPU 和内存使用情况等信息,它们会随着时间的推移而变化,以及 PID 和句柄,它们会随着进程的调用而变化。因此,输入文件中的大多数(如果不是全部)行很可能在这些值中的至少一个上有所不同。这意味着您根本没有匹配的行。期间。

您实际上想要比较的只是进程名称。当然你可以从文本文件中解析出来,但我不推荐它。修复您的输入要好得多:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

然后你可以像这样比较 2 个输出文件:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

但是,如果您还需要其他进程信息,您可能需要考虑使用 Export-ClixmlExport-Csv 代替:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

然后你可以像这样比较 2 个输出文件:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

不确定是什么原因造成的,但这里有一个故障排除提示。

使用以下内容:

Compare-Object $(Get-Content [RandomFilePath]) $(Get-Content [RandomFilePath])

Compare-Object $(Get-Content proc.txt) $(Get-Content proc1.txt)

Get-Process > proc.txtInputObject               SideIndicator

-----------               -------------

System.Diagnostics.Process (EXCEL)   =>

System.Diagnostics.Process (freecell)  =>

System.Diagnostics.Process (notepad)  =>

System.Diagnostics.Process (dexplore)  <=

Get-Process > file.txt
$a = Get-Process

notepad

$b = Get-Process



Compare-Object $a $bSystem.Diagnostics.Process (notepad) =>

Get-Process | Select-Object -Expand Name > proc.txt
Compare-Object (Get-Content proc.txt) (Get-Content proc1.txt)

Get-Process | Export-Clixml proc.xml

# or

Get-Process | Export-Csv proc.csv -NoType
Compare-Object (Import-Clixml proc.xml) (Import-Clixml proc1.xml) -Property Name -PassThru

# or

Compare-Object (Import-Csv proc.csv) (Import-Csv proc1.csv) -Property Name -PassThru

Compare-Object $(Get-Content proc.txt) $(Get-Content proc.txt)

现在应该没有区别了。只是为了测试使用流程文件比较是否正常工作。

将流程导出为 .csv 文件格式并再次进行比较。这也可能有效。


相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161