- 我正在嘗試創建一個物件,該物件將包含具有相關 IP 地址的計算機名稱
- 我有以下 XML 將我的所有計算機與它們的 ips 映射:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<hq>
<dbs>
<db>
<ip>153.77.162.62</ip>
<cn>SRRAALABJHQDB</cn>
</db>
</dbs>
<mbs>
<mb>
<ip>153.77.162.63</ip>
<cn>SRRAALABJHQRBT</cn>
</mb>
</mbs>
<apps>
<app>
<ip>153.77.162.61</ip>
<cn>SRRAALABJHQIIS</cn>
</app>
</apps>
<sts>
<st>
<dbs>
<db>
<ip>153.77.162.64</ip>
<cn>SRRAALABJST1</cn>
</db>
</dbs>
<mbs>
<mb>
<ip>153.77.162.64</ip>
<cn>SRRAALABJST1</cn>
</mb>
</mbs>
<apps>
<app>
<ip>153.77.162.64</ip>
<cn>SRRAALABJST1</cn>
</app>
</apps>
<poss>
<pos>
<dbs>
<db>
<cn>DTRAALABJPOS1</cn>
</db>
</dbs>
<apps>
<app>
<ip>153.77.162.66</ip>
<cn>DTRAALABJPOS1</cn>
</app>
</apps>
</pos>
<pos>
<dbs>
<db>
<cn>DTRAALABJPOS2</cn>
</db>
</dbs>
<apps>
<app>
<ip>153.77.162.67</ip>
<cn>DTRAALABJPOS2</cn>
</app>
</apps>
</pos>
</poss>
</st>
<st>
<buid>100</buid>
<dbs>
<db>
<ip>153.77.162.65</ip>
<cn>SRRAALABJST2</cn>
</db>
</dbs>
<mbs>
<mb>
<ip>153.77.162.65</ip>
<cn>SRRAALABJST2</cn>
</mb>
</mbs>
<apps>
<app>
<ip>153.77.162.65</ip>
<cn>SRRAALABJST2</cn>
</app>
</apps>
<poss>
<pos>
<dbs>
<db>
<cn>DTRAALABJPOS3</cn>
</db>
</dbs>
<apps>
<app>
<ip>153.77.162.68</ip>
<cn>DTRAALABJPOS3</cn>
</app>
</apps>
</pos>
</poss>
</st>
</sts>
</hq>
我需要創建一個將值與值一起保存的物件(cn 是計算機名的縮寫)
我嘗試了以下腳本來創建這樣的物件:
$path = "C:\lab_j.xml"
[xml] $lab = Get-Content -Path $Path
$vms = $lab | Select-Xml "//cn" | ForEach-Object { $_.Node.InnerText } | Select-Object -Unique
$ips = $lab | Select-Xml "//ip" | ForEach-Object { $_.Node.InnerText } | Select-Object -Unique
$vmObject = New-Object PSObject
Foreach ($vm in $vms) {
if ([bool]($vmObject.psobject.Properties | where { $_.Name -eq "name"})) {
$vmObject.name = $vm
}
else
{
$vmObject | Add-Member -MemberType NoteProperty -Name 'name' -Value $vm -Force
}
}
Foreach ($ip in $ips) {
if ([bool]($vmObject.psobject.Properties | where { $_.Name -eq "ip"})) {
$vmObject.ip = $ip
}
else
{
$vmObject | Add-Member -MemberType NoteProperty -Name 'ip' -Value $ip -Force
}
}
- $vmObject 的輸出只給出一個“條目”:
PS C:\Users\hiddai> $vmObject
name ip
---- --
DTRAALABJPOS3 153.77.162.68
代替:
PS C:\Users\hiddai> $vmObject
name ip
---- --
SRRAALABJHQDB 153.77.162.62
SRRAALABJHQRBT 153.77.162.63
SRRAALABJHQIIS 153.77.162.61
SRRAALABJST1 153.77.162.64
DTRAALABJPOS1 153.77.162.66
DTRAALABJPOS2 153.77.162.67
SRRAALABJST2 153.77.162.65
DTRAALABJPOS3 153.77.162.68
- 有沒有一種簡單的方法來創建這樣一個物件?
uj5u.com熱心網友回復:
$vmObject 的輸出只給出一個“條目”:
那是因為您只創建了 1 個物件,然后繼續覆寫它的值。
有沒有一種簡單的方法來創建這樣一個物件?
是的,您可以使用單個 XPath 查詢來查找具有 a和一個子節點的任何XML 元素,然后使用以下命令創建結果物件:<cn><ip>Select-Object
$lab.SelectNodes('//*[./cn and ./ip]') |Select-Object @{Name='Name';Expression='cn'},@{Name='IP';Expression='ip'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524874.html
標籤:xml电源外壳
上一篇:警告:當前安裝了適用于PowerShell的AWS工具的多個變體
下一篇:有可能是學習Git命令最好的網站
