如何在 powershell 中的 .loadtest 文件上使用 XML - SelectNode

How to use XML - SelectNode on a .loadtest file in powershell

我正在尝试从 powershell 读取 .loadtest 文件(Visual Studio 加载测试文件 (.loadtest))以尝试更改一个属性.loadtest 文件中的节点。

虽然该文件是一个 .loadtest 文件,但它基本上是一个 xml 文件

.loadtest文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LoadTest Name="ABC" Description="" Owner="" storage="c:\users\....\ABC.loadtest" Priority="2147483647" Enabled="true" CssProjectStructure="" CssIteration="" DeploymentItemsEditable="" WorkItemIds="" TraceLevel="None" CurrentRunConfig="Run Settings1" Id="XXXX-XXXX....XXXX" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Scenarios>
    <Scenario Name="ABC" DelayBetweenIterations="0" PercentNewUsers="100" IPSwitching="true" TestMixType="PercentageOfUsersRunning" ApplyDistributionToPacingDelay="true" MaxTestIterations="0" DisableDuringWarmup="false" DelayStartTime="0" AllowedAgents="">
      <ThinkProfile Value="0.2" Pattern="NormalDistribution" />
      <LoadProfile Pattern="Step" InitialUsers="10" MaxUsers="1000" StepUsers="10" StepDuration="10" StepRampTime="0" />
...
...
...
<RunConfigurations>
  <RunConfiguration Name="Run Settings1" RunDuration="43200" SampleRate="15">
  </RunConfiguration>
</RunConfigurations>

我正在使用代码:

$Content = [XML]( Get-Content -Path $Path)
$Node = $Content.SelectNodes("/LoadTest/Scenarios/Scenario/LoadProfile");

也试过$Content.SelectNodes("/LoadTest/RunConfigurations/RunConfiguration");

SelectNodes 适用于应用程序配置,xmls 但不适用于此类文件。如果我检查 $Content,它会显示

[DBG]: PS C:\Users\a>> $Content

 xml                                            LoadTest 
-----                                         ------------
version="1.0" encoding="utf-8"                 LoadTest   

所以这是一个有效的文件,但它不允许我使用 SelectNode 如果我执行以下操作,则没有任何输出:

[DBG]: PS C:\Users\a>> $Content.SelectNodes("/LoadTest");

其他详情:

PS 版本: 4

PS: 我检查了路径、内容、我的命令,一切看起来都不错。如果我只是用一个应用程序配置文件替换它,它工作得很好,但这个文件有问题。

所以经过大量试验后,它开始工作了:

$Nodes = $Content.SelectNodes("//*") | ? {$_.LocalName -eq "LoadProfile"}

这个有效而简单的 .SelectNode("/Loadtest").SelectNode("//") 无效的原因是由于某些原因,"Loadtest" 节点没有发生读取,因为 Loadtest 节点包含属性(如上述问题中所提供)。所以无论我如何尝试(甚至尝试将此 .loadtest 文件转换为 .xml 然后获取节点)它都没有用。我看到这个 select 个节点得到了所有并尝试过并且有效!