如何使用Powershell获取多个数组的对象?

问题描述

我有2个数组。我想映射数组,然后获取数组的对象并将其用于重命名文件。 我试过了但是文件名不正确,因为它应该是数组的对象。

这是我得到一些信息的xml格式。

<?xml version="1.0" encoding="UTF-8"?>
<assign>
     <define>
          <systemid value="8537">
          <description crm="AE/PR" priority="0"/>
          <description crm="S1/W1/W2/ZH" priority="2"/>
          <description crm="AP" priority="3"/>
          </systemid>
     </define>
</assign>

$CRMs = @("AE","S1","AP")

     foreach ($c in $CRMs)
     {      
          $priority = $JobSequence.jobassignseq.userdefineseq.systemid | Where-Object {$_.value -like "*$SSID*"} |
          Select-Object -ExpandProperty description | Where-Object {$_.crm -like "*$c*"} | Select-Object -ExpandProperty priority
          Write-Host "Prio $priority"

          
          $check = $JobSequence.jobassignseq.userdefineseq.systemid | 
          Where-Object {$_.value -like "*$SSID*"} | Select-Object -ExpandProperty description | 
          Select-Object priority,crm | Where-Object {$_.priority -eq "$priority"} | Select-Object -ExpandProperty crm

          $C1 = $check | ForEach-Object {$_ -split "/"}
          Write-Host "CRM: $C1"
          
          $Job = (Get-ChildItem $PathOp\$Image\*.job)
          $C1 | ForEach-Object {
               for ($i = 0; $i -lt $C1.count;  $i++) {    
                    
                    $Job[$i] | Rename-Item -NewName {("$priority")[$i] + "`_$Date`_" + $_.Name.Replace('.job','.que')}
               }  

          }      
     } 

我的期望是将优先级0分配给具有crm AE或PR的文件,将优先级2分配给具有crm S1或W1或W2或ZH的文件,并将优先级3分配给带有crm AP的文件

任何人都可以帮助我,非常感谢。非常感谢

解决方法

您有很多无关的代码,您需要包括它如何发挥作用或排除它。一种建议是利用XML的好处来获取所需的信息。希望这个例子可以引导您正确的方向。

[xml]$xml = @'
<?xml version="1.0" encoding="UTF-8"?>
<assign>
     <define>
          <systemid value="8537">
          <description crm="AE/PR" priority="0"/>
          <description crm="S1/W1/W2/ZH" priority="2"/>
          <description crm="AP" priority="3"/>
          </systemid>
     </define>
</assign>
'@

$description = $xml.SelectNodes("//description")

$description现在包含所有3个节点

crm         priority
---         --------
AE/PR       0       
S1/W1/W2/ZH 2       
AP          3 

$CRMs = "AE","S1","AP"

foreach($c in $CRMs)
{
    "Priority for CRM {0} is {1}" -f $c,($description | where crm -match $c | select -ExpandProperty priority)
}

几件事要注意。

出于可读性考虑,我将第二个传递给字符串格式表达式的字符串放在下一行,因为逗号是自然的换行符。

列表中不需要@(),它已经是一个数组。

$CRMs = "AE","AP"

$CRMs.GetType().basetype.name

Array

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...