如何在不将基础对象转换为字符串对象的情况下替换流水线数据中的文本

时间:2014-11-14 19:08:34

标签: powershell

是否可以替换流水线数据中的文本而不将底层对象转换为字符串对象?

我使用以下命令在dns服务器上查询主机名和ipaddresses:

$DnsData = Get-WmiObject -Class MicrosoftDNS_AType -NameSpace Root\MicrosoftDNS -ComputerName "DCName"  -Filter "DomainName = 'OurDomain.local'" `
        |?{$_.IPAddress -like "192.168.100.*" } | Select-Object -property Ownername, ipaddress

返回如下数据:

Ownername                               ipaddress
---------                               ---------
2UA0123AB0.OurDomain.local              192.168.100.101
2UA0123AB1.OurDomain.local              192.168.100.102
2UA0123AB2.OurDomain.local              192.168.100.103
2UA0123AB3.OurDomain.local              192.168.100.104
2UA0123AB4.OurDomain.local              192.168.100.106

我想删除域后缀(OurDomain.local),但是如果我在查询中添加了一个替换步骤,例如:

$DnsData = (Get-WmiObject -Class MicrosoftDNS_AType -NameSpace Root\MicrosoftDNS -ComputerName "DCName"  -Filter "DomainName = 'OurDomain.local'" `
    |?{$_.IPAddress -like "192.168.100.*" } | Select-Object -property Ownername, ipaddress) -replace ".OurDomain.local",""

$DnsData = Get-WmiObject -Class MicrosoftDNS_AType -NameSpace Root\MicrosoftDNS -ComputerName "DCName"  -Filter "DomainName = 'OurDomain.local'" `
    |?{$_.IPAddress -like "192.168.100.*" } | Select-Object -property Ownername, ipaddress|foreach{$_ -replace ".OurDomain.local",""}

数据返回为:

@{OwnerName=2UA0123AB0; ipaddress=192.168.100.101}
@{OwnerName=2UA0123AB1; ipaddress=192.168.100.102}

因为它是一个字符串,我无法引用属性,例如在循环中:

Foreach($pc in $DnsData)
{
    $pc.Ownername
}

如何更改查询以替换文本但不更改对象?我现在已经解决了这个问题,但是我错过了一些简单的事情。

2 个答案:

答案 0 :(得分:1)

显然这并不简单。

尝试向对象添加包含所需信息的属性:

$DnsData = Get-WmiObject -Class MicrosoftDNS_AType -NameSpace Root\MicrosoftDNS -ComputerName "DCName" -Filter "DomainName = 'OurDomain.local'" |
    ? { $_.IPAddress -like "192.168.100.*" }

$DnsData | % { Add-Member -InputObject $_ Hostname ($_.Ownername -replace ".OurDomain.local", "") }
$DnsData | fl Hostname, IPaddress

答案 1 :(得分:0)

试试这个:

$DnsData = Get-WmiObject -Class MicrosoftDNS_AType -NameSpace Root\MicrosoftDNS -ComputerName "DCName"  -Filter "DomainName = 'OurDomain.local'" `
    |?{$_.IPAddress -like "192.168.100.*" } | Select-Object @{Name="OwnerName";Expression={$_.ownername -replace ".OurDomain.local",""}}, ipaddress
相关问题