是否可以替换流水线数据中的文本而不将底层对象转换为字符串对象?
我使用以下命令在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
}
如何更改查询以替换文本但不更改对象?我现在已经解决了这个问题,但是我错过了一些简单的事情。
答案 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