Powershell 在变量remove item中找到Foreach路径

Powershell 在变量remove item中找到Foreach路径,powershell,Powershell,我在删除变量中应该包含多个路径的文件(完整路径)时遇到问题。我有多个安装程序,相同的程序,不同的版本在一个文件夹中。我想保留最新版本并删除旧版本。我已经走了这么远,但正如你可能从剧本中看到的,我没有那么丰富的经验 $InstallersLocs = (Get-ChildItem -Path "$DesktopPath\PS\Installers" -Recurse -Include *.exe | Select-Object FullName, LastWriteTime | Where-Obj

我在删除变量中应该包含多个路径的文件(完整路径)时遇到问题。我有多个安装程序,相同的程序,不同的版本在一个文件夹中。我想保留最新版本并删除旧版本。我已经走了这么远,但正如你可能从剧本中看到的,我没有那么丰富的经验

$InstallersLocs = (Get-ChildItem -Path "$DesktopPath\PS\Installers" -Recurse -Include *.exe | Select-Object FullName, LastWriteTime | Where-Object {$_.FullName -match 'Installer'} | Sort-Object LastWriteTime -Descending | Select-Object -Skip 1 | Select-Object FullName |  Format-Table -AutoSize | Out-String).Replace("FullName", "").Replace("--------", "").Trim()
  foreach ($InstallersLoc in $InstallersLocs) {
        Write-Output "Removing $InstallersLoc" 
      $Files += $InstallersLoc | Remove-Item -Confirm:$false -Force
    }
写入输出的输出:

我发现以下错误:


您出现此问题的原因是。。。不想要的。。。通过
格式-*
输出字符串
cmdlet添加的字符。删除这些项,并使用
选择对象
-ExpandProperty
参数将值作为简单项获取

通过将输出保存到$Var,然后查看其中的内容,可以看到这两个cmdlet各自添加的“内容”

例如,
[3]
格式表返回的内容中的
[3]
项为您提供了一个关于

"Microsoft.PowerShell.Commands.Internal.Format.GroupEndData"
注意
格式
。。。[咧嘴笑]

如果您通过
Out String
将输出的内容发送到
Format Hex
,您将看到它在第一行添加了一个前导
cr/lf
,在每行的末尾添加了另一对


作为一般规则,除了最终输出到屏幕或最终输出到纯文本文件之外,不要使用任何
Format-*
cmdlet或
Out-String
cmdlet。如果以后要在管道中使用对象,请不要使用
Format Table
Out-String
。它们不返回标准对象。它可能看起来像您认为应该的,但是
F-T
cmdlet将格式化代码包装在对象的切碎部分周围。
0-S
cmdlet将
cr/lf
chars之类的内容添加到对象的
.ToString()
表示中。谢谢。替换
Select Object FullName | Format Table-AutoSize | Out String)。替换(“FullName”,“”)。替换(“-----------”,“”)。Trim()
替换为
Select Object-ExpandProperty FullName)
成功。欢迎您!很高兴能帮上一点忙。。。[咧嘴笑]@Lee_Dailey请你把答案加上,这样OP就可以接受了?否则,这将是列表中另一个“未回答”的问题。@Theo-我已经发布了一个答案。。。但我对此并不满意。[叹气…]如果你有什么建议,请告诉我。谢谢。这可能很容易让你们发现,但我看到很多问题,人们试图在格式化后通过管道输出表格。。至少,现在它得到了正确的处理和回答。(+1)@Theo-谢谢你的评论。我经常对上述cmdlet大发雷霆,因此在讨论它们时,我需要克制自己的愤怒。我很高兴知道这次我成功了。[咧嘴笑]
Remove-Item : Illegal characters in path.
At line:4 char:34
+       $Files += $InstallersLoc | Remove-Item -Confirm:$false -Force
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\Users\B\... Setup 1.0.exe:String) [Remove-Item], ArgumentException
    + FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.RemoveItemCommand

Remove-Item : Cannot find path 'C:\Users\B\Desktop\PS\Installers\Installer Setup 1.0.1.exe
"Microsoft.PowerShell.Commands.Internal.Format.GroupEndData"