使用Contains
PowerShell 查找值不起作用。
全文:
我必须从 SQL DB 中获取PartNo
、Ver
和Rev
值,并检查这些值是否出现在文本文件的第一行中。我得到文件的第一行并将其存储在$EiaContent
. 与相关PartNo
联。大多数时候返回一个。但在某些情况下,一个可能有多个. 所以查询返回多个,但只有其中一个会在文本文件中。MAFN
$partNo=Select PartNo Where MAFN=xxx
MAFN
PartNo
MAFN
PartNo
PartNo(PartNo_1,PartNo_2,PartNo_3,and PartNo_4)
问题是这些中的每一个PartNo
。在 PowerShell 中被视为单个字符。$partNo.Length
是4
。因此,我的检查If ($EiaContent.Contains("*$partNo*"))
失败了,在这种情况下不应该,因为我可以看到PartNo
文件中提到了其中一个。此外,Contains
如果有一个PartNo
. 我使用 like as inIf ($EiaContent -like "*$partNo*")
来匹配PartNo
并且它有效,但是当有多个PartNo
.
我努力了:
If ($partNo.Contains($EiaContent)){}
但If ($partNo -like "*$EiaContent*"){}
这些都不起作用。
的数据类型$partNo
是字符串, 也是$EiaContent
。SQL 中的数据类型PartNo
是varchar(50)
排序规则COLLATE SQL_Latin1_General_CP1_CI_AS
,我使用的是 PowerShell Core 7.2 和 SQL 2005
几天来,我一直坚持在这里输入图像描述,因此感谢您的帮助。
完整代码:
$EiaContent = (Get-Content $aidLibPathFolder\$folderName\$fileName -TotalCount 1)
Write-host $EiaContent
#Sql query to get the Part Number
$partNoQuery = "SELECT PartNo FROM [NML_Sidney].[dbo].[vMADL_EngParts] Where MAFN = $firstPartTrimmed"
$partNoSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $partNoQuery
#Eliminate trailing spaces
$partNo = $partNoSql.PartNo.Trim()
If ($EiaContent.Contains("*$partNo*")) {
Write-Host "Part Matches"
}
Else {
#Send an email stating the PartNo discrepancy
}
示例变量输出值
- 变量
$partNo
等于A1023 A1023MD C0400 C0400MD
- 变量
$EiaContent
等于O40033( C0400 REV N VER 004, 37 DIA 4.5 BRAKE DRUM OP3 )
返回的 SQL 查询结果是一个长字符串,每个值用空格连接。使用 PowerShell 将此结果保存为变量会将该长字符串保存为其值。
split()
在变量上使用$partNo
可将 SQL 结果值转换为array
. 然后使用foreach-object
against$partNo
遍历其每个值,以检查其中是否包含$EiaContent
您喜欢的任何值。完整脚本示例
支持资源
分裂()
数组
ForEach-对象
如果