从每个数组值打印卷名

时间:2016-10-12 10:39:44

标签: powershell

我的数组值如下 - $VolErrChk[0]有:

 VOLUME #2
I:
\Device\HarddiskVolume8
\\?\Volume{3559b156-d159-11e4-80c1-0050569cf1fd}
5117 MB.
0x000000304f65e304.
\\.\Volume{3559b156-d159-11e4-80c1-0050569cf1fd}
>      **** WARNING: DATA NOT AVAILABLE [0x00000100] ****

$VolErrChk[1]有:

     VOLUME #4
B:
\Device\HarddiskVolume20
\\?\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd}
81917 MB.
0x000000304f65e304.
UNKNOWN.
>      **** WARNING: DATA NOT AVAILABLE [0x00000100] ****

我做的如下 -

 foreach ($disk in $VolErrChk)
    {
    $disk = ($VolErrChk-split "`n" | where {$_ -like "*?\Volume{*"})
    "type=ERROR;disk=$disk;"
    }

我可以从2个数组值获得此输出 -

type=ERROR;disk=\\?\Volume{3559b156-d159-11e4-80c1-0050569cf1fd}
type=ERROR;disk=\\?\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd}

2 个答案:

答案 0 :(得分:2)

您只需要将$disk而不是$VolErrChk分开,然后将输出传输到foreach cmdlet(%)以在每行输出一个卷。

foreach ($disk in $VolErrChk){
    $disk -split "`n" | where {$_ -match "\\\\\?\\Volume{*" } | %{ "type=ERROR;disk=$_;" } 
}

答案 1 :(得分:1)

您不必分割字符串,只需使用来捕获音量:

foreach ($disk in $VolErrChk)
{
    $disk = [regex]::Match($disk, '([\\]{2}\?\\Volume{[^}]+})').Groups[0].Value
    "type=ERROR;disk=$disk;"
}