2013-03-26 318 views
2

嗨,对不起,我不是一个脚本的人,我认为我的问题很简单,但我找不到答案。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?

回答

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 
+0

感谢您的帮助! – user2211801 2013-03-26 15:09:47

0

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

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

如果IP始终是第二个值,你可以使用:

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

Select-String不用于操作对象,它设计用于对文本(文件)进行操作。专为过滤对象在PowerShell中的工具就是对象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代替。

0

与office365在线命令,在这里我想追上刚值到一个变量有同样的问题,我这样做:

$displayname = get-mailbox $whataccount | select displayname 

而且,就像你,我收到这样的:

"@{DisplayName=Bob Newhart} 

这是我做过什么让刚刚我想要的值:

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

现在变量只包含这个:Bob Newhart

但是,这是基本相同什么安斯加尔Wiechers说,在他的回答。