【问题标题】:uUable to use the output of the command "SFC /scannow" in powershelluUable在powershell中使用命令“SFC /scannow”的输出
【发布时间】:2015-01-12 02:25:42
【问题描述】:

我在 powershell 中做了什么:

$SFC = SFC /scannow

write-output $SFC | out-file d:\cours\powershell\SFC.txt

$string = 'd i d   n o t   f i n d   a n y   i n t e g r i t y   v i o l a t i o n s'

$test = $false
$SFC | foreach {If ($_.name -match $string) {$test = $true}}


if ($test -eq $false)  {write-host 'Ok'}

notepad++ 无法读取文件“SFC.txt”中的内容。

更多,$test 总是等于 $false(这不是真的)。​​

如何将输出正确保存在我的文件中以便能够读取它以及如何测试此输出?

【问题讨论】:

  • 发这个issue之前一定要tbat,参数编码的所有选项我都试过了。 -encoding ASCII 不是诀窍。我只能使用 write-host 命令正确读取控制台上的输出。就这样。此外,我在这个愚蠢的命令“SFC /scannow”的输出中找不到任何字符串。这很奇怪。当我用其他命令(例如:DIR)更改命令“SFC”时,脚本就像一个魅力。您可以验证自己,但必须以管理员身份运行 powershell ise。 SFC 命令与所有其他命令有什么区别?

标签: string powershell converter


【解决方案1】:

Out-File 默认以 Unicode 书写。你可以用-Encoding ASCII改变它。

您也可以使用Set-Content,默认为 ASCII。

您也许还可以告诉 Notepad++ 将文件解释为 Unicode,但我不熟悉如何做到这一点。

【讨论】:

    【解决方案2】:

    发这个问题之前一定要tbat,参数编码的所有选项我都试过了。

    -编码 ASCII 不是诀窍。

    我只能使用 write-host 命令正确读取控制台上的输出。就是这样。

    此外,我在这个愚蠢的命令“SFC /scannow”的输出中找不到任何字符串。

    这很奇怪。当我用其他命令(例如:DIR)更改命令“SFC”时,该脚本就像一个魅力。

    您可以验证自己,但您必须以管理员身份运行 powershell ise。

    SFC 命令与所有其他命令有什么区别?

    【讨论】:

      【解决方案3】:

      我也一直在玩这个,发现-match 有效。它使用正则表达式,因此您可以使用句点替换任何单个字符。

      尝试: $string -match '.f.i.n.d...a.n.y...i.n.t.e.g.r.i.t.y...v.i.o.l.a.t.i.o.n.s.'

      【讨论】:

        【解决方案4】:

        Sfc 输出 unicode no bom。这是删除空值和空行的解决方法:

        (sfc) -replace "`0" | where {$_}
        

        【讨论】:

          【解决方案5】:

          我也遇到过这个问题...如前所述,SFC 输出 UNICODE,即每个字符两个字节(这就是为什么输出全部隔开,每对的第一个字符为空,二进制 00000000 或在记事本++中显示为NULL)

          要摆脱这种情况,您必须让 powershell 期待 Unicode(完成后将其重置为之前的状态)

          在我的例子中,我从命令提示符调用 SFC /SCANNOW 并将输出保存到临时文件。我更喜欢使用 tee-object,因为它也会在控制台上显示输出

          POWERSHELL "$prev = [console]::OutputEncoding"; "[console]::OutputEncoding = [Text.Encoding]::Unicode"; "SFC /scannow | Tee-Object -filepath %tempfile%"; "[console]::OutputEncoding = $prev"
          

          将其整理成一个 powershell 脚本(并更改输出文件以匹配问题):

          $prev = [console]::OutputEncoding
          [console]::OutputEncoding = [Text.Encoding]::Unicode
          SFC /scannow | Tee-Object -filepath d:\cours\powershell\SFC.txt
          [console]::OutputEncoding = $prev
          

          如果 SFC 崩溃,则存在潜在缺陷 - 将 Powershell 保留为 Unicode(尽管未经测试)

          【讨论】:

            猜你喜欢
            • 2018-07-22
            • 2019-03-15
            • 1970-01-01
            • 2023-03-25
            • 1970-01-01
            • 2019-05-07
            • 2022-08-14
            • 2018-10-31
            相关资源
            最近更新 更多