如何以字符串格式获取对象成员

时间:2013-12-10 01:39:06

标签: powershell

我完全不确定我做错了什么,我正在运行manage-bde(返回bitlocker加密状态的命令行)并将其管道到select-string以捕获特定的加密百分比/具有非常具体的正则表达式的状态。选择字符串由于某种原因返回整行,但是一个名为“Matches”的属性返回我需要的EXACT信息,但它是一个Matchinfo对象。有一个名为ToString的方法,但它根本不返回我需要的东西,似乎是对象信息。我只希望字符串格式的输出显示在写入进度gui。

注意:对PowerShell来说仍然很新。

$act = Invoke-Expression -Command "manage-bde -status C:" | select-string -Pattern "(?<=(Percentage Encrypted:)).*"  | Select-Object -Property Matches -Last 1

$act.toString()| Out-Host

4 个答案:

答案 0 :(得分:2)

Powershell的一个设计原则是,大多数东西都可以被视为一个对象(与其他管理脚本语言中的文本相对)。由于manage-bde不是Powershell工具(而是一个普通的'命令行工具),因此它不像PS那样为PS工作。在BitLocker的情况下,有十几个PS cmdlet。特别是Get-BitLockerVolume听起来像是近似等同于manage-bde -status

但是,如果您想坚持使用manage-bde,则可以使用out-string cmdlet从对象生成字符串输出。所以以下可能是你想要的。

$act = Invoke-Expression -Command "manage-bde -status C:" | 
   select-string -Pattern "(?<=(Percentage Encrypted:)).*"  | 
   Select-Object -Property Matches -Last 1 |
   out-string

$act| Out-Host

答案 1 :(得分:2)

您可以使用以下内容制作几乎任何字符串:

[string](code_to_be_parsed)

实施例

我可以从ping命令创建一个字符串数组:

$test = [string[]](ping google.com)

这给了我结果:

# empty line
Pinging google.com [74.125.200.101] with 32 bytes of data:
Reply from 74.125.200.101: bytes=32 time=302ms TTL=36
Reply from 74.125.200.101: bytes=32 time=302ms TTL=36
Reply from 74.125.200.101: bytes=32 time=302ms TTL=36
Reply from 74.125.200.101: bytes=32 time=306ms TTL=36

Ping statistics for 74.125.200.101:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 302ms, Maximum = 306ms, Average = 303ms

当我执行$test.count时,它返回11,这实际上是行的确切行数,每行都是数组内的字符串。

答案 2 :(得分:1)

MatchInfo对象可能令人困惑。试试这个:

$act = Invoke-Expression -Command "manage-bde -status C:" |
 select-string -Pattern "(?<=(Percentage Encrypted:)).*"  |
 Select-Object -Property Matches -Last 1

$act.matches[0].value

可替换地:

(manage-bde -status C:) -match '^\s+Percentage Encrypted:' -replace '\D+(\d+%)','$1'

答案 3 :(得分:0)

我的答案基于vasili syrakis的帖子。到了此页面,并给出了与OP相关的确切问题。

$encryptionstatus = [string[]](manage-bde -status c:)
$encryptionstatus[9] | Out-Host