I'm assuming you're looking for something similar to this, most of it is guessing since there is not much information in your question.
$dir = 'C:\ProgramData\AecorsoftDataIntegrator\logs\'
$file = Get-ChildItem -Path $dir -Filter '2022*.log' |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
$match = $file | Select-String -Pattern 'TCP/IP'
# if the pattern was matched in the file
if($match) {
"TCP/IP error message is present in the Aecorsoft Log Files : {0} scanned at {1} and {2}" -f @(
$match.Path, [datetime]::Now, $match.Line
)
}
# if the pattern was not matched but the file exists
elseif($file) {
"TCP/IP error message is not present in the Aecorsoft Log Files : {0} scanned at {1}" -f @(
$file.FullName, [datetime]::Now
)
}
# if the file does not exist
else {
"No matching files found in $dir"
}
Regarding why FileName is not there, first of all you currently have:
Select-Object -Property -Filename
This will generate a new object with property -Filename and null value:
PS /> '' | Select-Object -Property -Filename
-Filename
---------
The next issue is, even if using the right property name, the same would not be populated because Select-String only populates that property when reading a file, in this case, the cmdlet doing the reading is Get-Content which should not be there.