如何使用 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模板
Selenium web 自动化使用 python:如何使用 selenium 处理表以通过匹配文本来查找特定行并删除该行