Powershell选择一个特定的值

时间:2013-03-26 13:57:53

标签: powershell

对不起,我不是一个脚本专家,我认为我的问题很简单,但我找不到答案。

我这样做:

$i = Get-ClusterResource "Cluster IP Address" | get-clusterparameter | Select -Property value 

得到那个:

Value
-----
Cluster Network 2
10.32.32.36
255.255.252.0
2
0
0
255.255.252.0
1/1/0001 12:00:00 AM
1/1/0001 12:00:00 AM
255.255.255.255
0.0.0.0
255.0.0.0

但我需要的唯一信息是ip“10.32.32.36”所以我试过了:

$i = Get-ClusterResource "Cluster IP Address" | get-clusterparameter | Select -Property value | Select-String -SimpleMatch "10." 

然后我得到$i = @{Value=10.32.32.36}

我不知道为什么它会添加@{value=xxxx}如何删除它而只有IP?

5 个答案:

答案 0 :(得分:1)

如果ip始终是您可以使用的第二个值:

$i =  (Get-ClusterResource "Cluster IP Address" | get-clusterparameter | 
     Select -expand value )[1]

答案 1 :(得分:1)

Select-String不是为对象操作而设计的,它设计用于对文本(文件)进行操作。 PowerShell中用于过滤对象的工具是Where-Object cmdlet:

$i = Get-ClusterResource "Cluster IP Address" | 
    get-clusterparameter | 
    Where-Object { $_.Value -like '10.*' } |
    Foreach-Object { $_.Value }

另一件事是您需要值,而不是具有单个属性的自定义对象(这是select -property value将创建的)。因此 - 您可以在-expand上使用Select-Object参数,也可以使用Foreach-Object cmdlet。

答案 2 :(得分:1)

如果您想要群集地址,您应该只获得Address群集参数:

$i = Get-ClusterResource "Cluster IP Address" `
       | Get-ClusterParameter Address `
       | select Value

上面的命令将返回一个包含IP地址的属性Value的对象。如果您只想要实际的IP地址,请改用:

$i = (Get-ClusterResource "Cluster IP Address" `
       | Get-ClusterParameter Address).Value

答案 3 :(得分:0)

Select-string返回MatchInfo对象。要获得匹配行的值,您只需要选择“Line”属性的值:

$i = Get-ClusterResource "Cluster IP Address" |
 get-clusterparameter |
 Select -Property value |
 Select-String -SimpleMatch "10." |
 Select -ExpandProperty Line

答案 4 :(得分:0)

在office365在线命令遇到同样的问题,我想把这个值只捕获到变量中,我这样做了:

$displayname = get-mailbox $whataccount | select displayname

而且,就像你一样,我收到了这个:

"@{DisplayName=Bob Newhart}

这就是我为获得我想要的价值而做的事情:

$displayname = get-mailbox $whataccount | select displayname
$displayname = $displayname.displayname

现在变量仅包含:Bob Newhart

但这与Ansgar Wiechers在回答中所说的基本相同。