我其实没有问题,你的代码。我只需要改变比赛来支持我的英文输出。有可能Wolfgang Kluge是关于空白的东西。但是,如果你的输出实际上匹配你在正则表达式测试中的比我不确定你遇到了什么问题。
为了好玩,我建议将此更新程序提供给您的代码。这使用ConvertFrom-StringData
。我在this answer中解释了更多的代码。
$defrag = Defrag C: /A /V | out-string
$hash = (($defrag -split "`r`n" | Where-Object{$_ -match "="}) -join "`r`n" | ConvertFrom-StringData)
$result = New-Object -TypeName PSCustomObject -Property $hash
$result."Quantité totale d'espace fragmenté"
当然,这是假设你的PowerShell是在单词的重音完全确定。在我上面的代码工作的ISE 3.0上。
再次......您的代码在您的问题中工作得很好。我也不认为Out-String
是要求。我仍然得到积极的产出。与Out-String
我得到额外的输出,包括整个匹配线。否则我只是得到一个布尔值。在两个(使用下面的代码)我仍然得到一个结果。
$result = Defrag C: /A /V #| Out-String
$pattern = "fragmented space[^.0-9]*([0-9]+)%"
$result -match $pattern
$Matches[1]
-match
作品作为阵列操作,其改变如何$result
得到治疗。随着Out-String
$result
是一个System.String
,没有它你会得到System.Object
错误的理论
的唯一途径,我可以拿到赛是False
是,如果我没有运行PowerShell中以管理员身份。这很重要,因为如果没有,您将收到一条消息
磁盘碎片整理程序无法启动,因为您没有足够的许可证来执行此操作。 (0x89000024)
怀疑你可能正在处理换行问题......可能会检查诸如将结果输送到文件,然后使用文件上的Get-Content,然后使用Out-String来清除中断。不知道在我的头顶上的语法,对不起:) –
我只是做你刚刚说的,它仍然无法正常工作。我也尝试将其转换为字符串,而不是使用“Out-String”来删除每一行换行符,而且它也不起作用。 – Lovy
好吧,还有一个显式的多行修饰符,用于PowerShell regexps..something like [regex] :: matches($ str,“fragmente [^。0-9] *([0-9] +)%”,“MultiLine “)..再次抱歉粗略的语法,只是暂时不能测试 –