如何使用 PowerShell 处理数组以查找特定字符串?

Posted

技术标签:

【中文标题】如何使用 PowerShell 处理数组以查找特定字符串?【英文标题】:How to handle array to find a specific string using PowerShell? 【发布时间】:2021-04-02 18:57:09 【问题描述】:

我想将我的 XML 文件中的字符串与物理磁盘结果进行匹配。 我试过这种方式,但即使物理磁盘的名称存在于 XML 列表中,它也总是进入 raid 进程。

这就是我的 XML 列表的样子,它是一个数组。 (我只取了我需要的部分 XML)

    ....
    <Name>
        <type> TOSHIBA 0012 </type>
        <type> INTEL MEMORY</type>
        <type> SATA DISK </type>
    </Name>
    ....
TOSHIBA 0012
INTEL MEMORY
SATA DISK

function raidprocess

     Write-Host "raid process"
     break


function optaneprocess

     Write-Host "optane process"
     break


[xml]$ConfigFile = Get-Content -Path .\file.xml
$Name = $ConfigFile.Name.type

foreach ($type in $Name)

     $DP = Get-PhysicalDisk | Select-Object FriendlyName, Size | Where-Object $_.FriendlyName -like "*$type *"
     
     if (!($DP))
     
          Write-Host "Raid"
          raidprocess
     
     else 

          Write-Host "Optane"
          optaneprocess
     

任何人都可以帮助我,拜托。谢谢

【问题讨论】:

这是原始 XML 文件的精确副本,还是您在帖子中手动输入的?一些,但不是所有的项目都有尾随和前导空格。你确定这些应该是 FriendlyName 而不是 Model 吗?去掉"*$type *"中的空格 --> $_.FriendlyName -like "*$type*" 【参考方案1】:
@"
<Name>
    <type> TOSHIBA 0012 </type>
    <type> INTEL MEMORY</type>
    <type> SATA DISK </type>
</Name>
"@ | out-file d:\tmp\input.xml

# the code above to create an example file

[xml]$doc = Get-Content d:\tmp\input.xml
$values = $doc.Name.type

(Get-PhysicalDisk).FriendlyName | ForEach-Object 
    if ($values -contains $_) 
        #action
    
    else 
    
        #action
    

【讨论】:

谢谢,但它仍然无法正常工作。它总是返回物理磁盘友好名称的 $values 不包含的结果。 发布此 [xml]$doc = Get-Content d:\tmp\input.xml 的输出; ($doc.Name.type).Trim() 输出TOSHIBA 0012 INTEL MEMORY SATA DISK 是一个数组类型。 让我们尝试排除 .trim() @ Алексей Семенов 同样的事情,仍然是同样的结果

以上是关于如何使用 PowerShell 处理数组以查找特定字符串?的主要内容,如果未能解决你的问题,请参考以下文章

powershell 该脚本查找符合特定条件的列表名称并回收列表。由于数组初始化i,这将给出null

powershell 此SharePoint Powershell脚本会检查网站集和Web应用程序中的所有网站,以查找特定的Web模板

如何使用 Azure Powershell 执行此操作?

Selenium web 自动化使用 python:如何使用 selenium 处理表以通过匹配文本来查找特定行并删除该行

如何在 C# 数组中查找和显示特定值

如何使用 Windows 批处理文件查找特定目录?