为什么PowerShell-Replace在每行前面都添加了额外的空白?

为什么PowerShell-Replace在每行前面都添加了额外的空白?,powershell,Powershell,我对PowerShell中的-Replace有一个奇怪的问题。此命令输出一个列表,经过筛选: PS C:\> dism /image:pro /Get-ProvisionedAppxPackages | Select-String -Pattern 'Nome' Nome visualizzato: Microsoft.BingWeather Nome visualizzato: Microsoft.DesktopAppInstaller Nome visualizzato: Micro

我对PowerShell中的
-Replace
有一个奇怪的问题。此命令输出一个列表,经过筛选:

PS C:\> dism /image:pro /Get-ProvisionedAppxPackages | Select-String -Pattern 'Nome'

Nome visualizzato: Microsoft.BingWeather
Nome visualizzato: Microsoft.DesktopAppInstaller
Nome visualizzato: Microsoft.GetHelp
Nome visualizzato: Microsoft.Getstarted
Nome visualizzato: Microsoft.HEIFImageExtension
Nome visualizzato: Microsoft.Messaging
Nome visualizzato: Microsoft.Microsoft3DViewer
Nome visualizzato: Microsoft.MicrosoftOfficeHub
Nome visualizzato: Microsoft.MicrosoftSolitaireCollection
Nome visualizzato: Microsoft.MicrosoftStickyNotes
Nome visualizzato: Microsoft.MixedReality.Portal
Nome visualizzato: Microsoft.MSPaint
输出非常干净(一些空行,此处不显示)

当我尝试添加
|%{$\u-Replace'[^::]+:',''}
以替换
字符后面的所有字符时,会在列表的每一行的开头添加一个额外的空格

PS C:\> dism /image:pro /Get-ProvisionedAppxPackages | Select-String -Pattern 'Nome' | % {$_ -Replace '[^:]+:',''}
 Microsoft.BingWeather
 Microsoft.DesktopAppInstaller
 Microsoft.GetHelp
 Microsoft.Getstarted
 Microsoft.HEIFImageExtension
 Microsoft.Messaging
 Microsoft.Microsoft3DViewer
 Microsoft.MicrosoftOfficeHub
 Microsoft.MicrosoftSolitaireCollection
 Microsoft.MicrosoftStickyNotes
 Microsoft.MixedReality.Portal
 Microsoft.MSPaint
为什么??我可以很容易地用一个额外的
|%{$\u-Replace'\s+','}
进行修复,但我想了解它发生的原因。

我的评论作为答案:

您看到的额外空格是冒号后面的空格字符。您的正则表达式没有过滤掉该空格,因此它仍然是输出中的第一个字符


不要使用
{${u-Replace'[^:::+:',''}
,而是使用
{${${u-Replace'^.+:\s*}
删除从开始到包括冒号以及其后所有可能的额外空格字符的所有内容。

额外的空格是冒号后面的空格字符,您不会将其替换掉。尝试
|%{$\u-replace'^.+:\s*'}
另一个选项是使用
-split
操作符-因此…>>
('Nome visualizato:Microsoft.BingWeather'-split':')[-1]
此外,
选择字符串
不输出字符串。[grin]它输出
MatchInfo
对象。您可能正在处理
.Line
属性,而不是整个对象。@Theo您应该添加它作为答案;)@MathiasR Jessen谢谢你说得对。我已经把答案贴出来了。谢谢。我想看到那个空间我是困了。