希望您在这种情况下一切顺利。
要求说明:
为了使我的生活更轻松,我尝试编写一个powershell脚本,目标是找到每个“名称”表,其中“保留”大小> 1G
下面的输出示例我想基于下面的xml文件示例获取
输出量
xml文件样本
<?xml version="1.0" encoding="utf-8" ?>
<data>
<record>
<field value="tr_stat_history" name="Name"/>
<field value="1024936 " name="Rows"/>
<field value="3829623 KB" name="reserved"/>
<field value="38120 KB" name="Data"/>
<field value="120 KB" name="index_size"/>
<field value="56 KB" name="Unused"/>
</record>
<record>
<field value="appctrl_exefile" name="Name"/>
<field value="2149679 " name="Rows"/>
<field value="1580160 KB" name="reserved"/>
<field value="120376 KB" name="Data"/>
<field value="37336 KB" name="index_size"/>
<field value="304 KB" name="Unused"/>
</record>
<record>
<field value="appctrl_pdffile" name="Name"/>
<field value="2149 " name="Rows"/>
<field value="1580 KB" name="reserved"/>
<field value="1203 KB" name="Data"/>
<field value="3733 KB" name="index_size"/>
<field value="508 KB" name="Unused"/>
</record>
</data>
达到目标的最好方法是什么?
预先感谢,
最佳答案
这是您可以尝试的另一种方法。我添加了注释来解释逻辑。
# Create XML object to load data into
$xml = New-Object -TypeName System.Xml.XmlDocument
# Load in XML file
$xml.Load("input.xml")
# Iterate each child node underneath the data tag
foreach ($node in $xml.data.ChildNodes)
{
# Get name and reserved fields
$name = $node.field | Where-Object {$_.name -eq "Name"}
$reserved = $node.field | Where-Object {$_.name -eq "reserved"}
# Split on whitespace and take the digit
# Do KB conversion to bytes by multiplying by 1024
$kb = [long]$reserved.Value.Split(' ')[0] * 1024
# Check if bigger than 1GB or 1073741824 bytes
# Output table name and size if this is true
if ($kb -gt 1GB)
{
Write-Output "Table name: $($name.Value)"
Write-Output "Table size: $($kb / 1GB) GB"
}
}
输出:
Table name: tr_stat_history
Table size: 3.65221309661865 GB
Table name: appctrl_exefile
Table size: 1.5069580078125 GB
关于regex - Powershell-使用正则表达式将2个值搜索到.xml文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61227901/