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

Powershell 如何获取字符串格式的对象成员,powershell,Powershell,我根本不知道我到底做错了什么,我正在运行manage-bde(返回bitlocker加密状态的命令行)并将其传输到一个select字符串,以用一个非常特定的正则表达式捕获特定的加密百分比/状态。出于某种原因,selectstring返回整行,但名为“Matches”的属性返回我需要的确切信息,但它是一个Matchinfo对象。有一个名为ToString的方法,但它根本不返回我需要的,似乎是对象信息。我只希望字符串格式的输出显示在写进度gui中 注意:对于powershell来说还是很新的 $ac

我根本不知道我到底做错了什么,我正在运行manage-bde(返回bitlocker加密状态的命令行)并将其传输到一个select字符串,以用一个非常特定的正则表达式捕获特定的加密百分比/状态。出于某种原因,selectstring返回整行,但名为“Matches”的属性返回我需要的确切信息,但它是一个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

$act=Invoke Expression-Command“manage bde-status C:| select string-Pattern”(?MatchInfo对象可能会混淆。请尝试以下操作:

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

$act.matches[0].value

MatchInfo对象可能会混淆。请尝试以下操作:

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

$act.matches[0].value

Powershell的设计原则之一是,大多数东西都可以作为对象(而不是其他管理脚本语言中的文本)处理。因为manage bde不是Powershell工具(而是普通的ol命令行工具)它不像为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
$act=调用表达式-命令“管理bde-状态C:”

选择字符串模式“(?Powershell的设计原则之一是,大多数东西都可以被视为对象(而不是其他管理脚本语言中的文本)。因为manage bde不是Powershell工具(而是一个普通的ol命令行工具)它不像为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
$act=调用表达式-命令“管理bde-状态C:”

选择string-Pattern“(?您可以使用以下命令将几乎任何内容设置为字符串:

[string](待解析代码)

例子 我可以通过
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,这实际上是精确的行数,每个行在数组中都是一个字符串。

通过使用以下命令,几乎可以将任何内容设置为字符串:

[string](待解析代码)

例子 我可以通过
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,这实际上是精确的行数,每个行都是数组中的一个字符串。

我的答案基于vasili syrakis的帖子。进入本页时,确切的问题是OP

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

我的答案是基于vasili syrakis的帖子。进入本页,确切的问题是OP

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

所有伟大的答案,谢谢你,mjolinor获得了答案积分,但所有奇妙的方法,我为遗漏字符串而感到愚蠢,所有伟大的解决方案。所有伟大的答案,谢谢你,mjolinor获得了答案积分,但所有奇妙的方法,我为遗漏字符串而感到愚蠢,所有伟大的解决方案。