I have been at this for days now but can't seem to figure it out.
I am trying to compare values(PartNumber) from the database to the first line of the text file. If the PartNumber exists(in the first line of the file) display a message "Part Number Matches" if it doesn't send an email.
The issue is that I get messages saying parts do not match when they are clearly the same.
All wrongly mismatched part numbers have a letter in the beginning for ex. D78948, C56234, etc. At first I thought maybe it is because the part number is alphanumeric. But then the parts that are correctly matched are also alphanumeric.
The PartNumber in the terminal is the one from the database.You can clearly see from the picture that the part number from the database and the one in the text file are exactly the same but the check still fails.
Instead of If (Get-Content -Path $fullPath -TotalCount 1 | Select-String -Pattern $partNo -AllMatches)
I have tried
If($eiaContent -like "*$partno*")
,
If($eiaContent | Select-String -Pattern $partno)
But none of them seem to work.
Any help is appriciated!
Code:
$emailFrom = " CNC Data Discrepancy <DoNotReply@outlook.com>"
$emailTo = "ABC@nicholsonmfg.com"
$server = "Sidney.sidney.nii"
$database = "NML_Sidney"
#Query to get MAFN values in the last x hours(ET-Elapsed Time)
$MafnQueryEt = "SELECT [MAFN] As MAFNET FROM [NML_Sidney].[dbo].[MfgAidsDocLibraryTransactions]"
#Invoke Sql
$MafnSqlEt = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $MafnQueryEt
Write-Host $MafnSqlEt.MAFNET
$aidLibPathFolder = "C:\Users\Desktop\CNC_Transfer_Test_Folders\AidLib_Test"
$filterA = "MAZAK INTEGREX E-1550 WFO"
$filterB = "MILLING_MAZAK_INTEGREX_E1550"
#Filter child items to get the .EIA files
Get-ChildItem -Path $aidLibPathFolder -Include *.EIA -Recurse | ForEach-Object{
#Splitting the folder name because the first part of the name is the MAFN in the db(less the zeros). The second part after the dot(.) is the version number
$fullPath = $_.FullName
$baseName = $_.Name
$folderName = $_.Directory.Name
$splitFolderName = $folderName.Split('.')
$firstPart = $splitFolderName[0].TrimStart("0")
$version = "VER"+ " " + $splitFolderName[1]
$ver = $splitFolderName[1].TrimStart("0")
$versionNoZero = "VER"+ " " + $ver
#Filter the EIA files that have the specific line of text.
If(Get-Content -Path $fullPath | Select-String -Pattern $filterA,$filterB){
#Get first line of file.
$eiaContent= Get-Content -Path $fullPath -TotalCount 1
If($MafnSqlEt.MAFNET -eq $firstPart){
$partNoQuery = "SELECT [PartNo] FROM [NML_Sidney].[dbo].[vMADL_EngParts] Where MAFN=$firstPart"
$partNoSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $partNoQuery
$revQuery = "SELECT [MA_Rev] As Rev FROM [NML_Sidney].[dbo].[MADL_EngParts] Where MAFN=$firstPart"
$revSql = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $revQuery
[System.String]$partNo = $partNoSql.PartNo
$rev = "REV" + " "+ $revSql.Rev
$partNo.GetType()
}
If (Get-Content -Path $fullPath -TotalCount 1 | Select-String -Pattern $partNo -AllMatches){
Write-Host "PART matches" -BackgroundColor Green -ForegroundColor Black
Write-Host `PartNumberMatch` $partNo `Folder` $folderName `FileName` $baseName -BackgroundColor Green -ForegroundColor Black
}
Else{
Write-Host "PART does not match" -BackgroundColor Red -ForegroundColor Black
Send-MailMessage -From $emailFrom -To 'hargul.sidhu@nicholsonmfg.com' -Subject "ALERT! DATA DISCREPANCY - '$folderName'" -Body "Incorrect Part Number in '$baseName' Path -'$fullPath'. **DO NOT REPLY. THIS INBOX IS NOT MONITORED**" -SmtpServer 'XXXX
Write-Host `PartNumberMismatch` $partNo `Folder` $folderName `FileName` $baseName -BackgroundColor Red -ForegroundColor Black
}