With same script, the ouput is not the same on Windows 10 and WindowsServer 2016

Hello everyone,

I have a problem with my script and I don’t understand why.
It’s my first script so be indulgent :wink:

When I run my script from Windows 10, it’s OK, the output is good, but when I run the script from Windows Server 2016, the output got some stranges “letters”.

Here is the output from Windows 10 :

Début de l'analyse du système. Cette opération peut nécessiter un certain temps.



Démarrage de la phase de vérification de l'analyse du système.


La vérification est à 0% terminée.
La vérification est à 1% terminée.
La vérification est à 1% terminée.
La vérification est à 2% terminée.
La vérification est à 3% terminée.
La vérification est à 3% terminée.
La vérification est à 4% terminée.
La vérification est à 4% terminée.
La vérification est à 5% terminée.
La vérification est à 6% terminée.
La vérification est à 6% terminée.
La vérification est à 7% terminée.
La vérification est à 7% terminée.
La vérification est à 8% terminée.
La vérification est à 9% terminée.
La vérification est à 9% terminée.
La vérification est à 10% terminée.
La vérification est à 10% terminée.
La vérification est à 11% terminée.
La vérification est à 12% terminée.
La vérification est à 12% terminée.
La vérification est à 13% terminée.
La vérification est à 13% terminée.
La vérification est à 14% terminée.
La vérification est à 15% terminée.
La vérification est à 15% terminée.
La vérification est à 16% terminée.
La vérification est à 16% terminée.
La vérification est à 17% terminée.
La vérification est à 18% terminée.
La vérification est à 18% terminée.
La vérification est à 19% terminée.
La vérification est à 19% terminée.
La vérification est à 20% terminée.
La vérification est à 21% terminée.
La vérification est à 21% terminée.
La vérification est à 22% terminée.
La vérification est à 22% terminée.
La vérification est à 23% terminée.
La vérification est à 24% terminée.
La vérification est à 24% terminée.
La vérification est à 25% terminée.
La vérification est à 25% terminée.
La vérification est à 26% terminée.
La vérification est à 27% terminée.
La vérification est à 27% terminée.
La vérification est à 28% terminée.
La vérification est à 28% terminée.
La vérification est à 29% terminée.
La vérification est à 30% terminée.
La vérification est à 30% terminée.
La vérification est à 31% terminée.
La vérification est à 31% terminée.
La vérification est à 32% terminée.
La vérification est à 33% terminée.
La vérification est à 33% terminée.
La vérification est à 34% terminée.
La vérification est à 34% terminée.
La vérification est à 35% terminée.
La vérification est à 36% terminée.
La vérification est à 36% terminée.
La vérification est à 37% terminée.
La vérification est à 37% terminée.
La vérification est à 38% terminée.
La vérification est à 39% terminée.
La vérification est à 39% terminée.
La vérification est à 40% terminée.
La vérification est à 40% terminée.
La vérification est à 41% terminée.
La vérification est à 42% terminée.
La vérification est à 42% terminée.
La vérification est à 43% terminée.
La vérification est à 43% terminée.
La vérification est à 44% terminée.
La vérification est à 45% terminée.
La vérification est à 45% terminée.
La vérification est à 46% terminée.
La vérification est à 46% terminée.
La vérification est à 47% terminée.
La vérification est à 48% terminée.
La vérification est à 48% terminée.
La vérification est à 49% terminée.
La vérification est à 49% terminée.
La vérification est à 50% terminée.
La vérification est à 51% terminée.
La vérification est à 51% terminée.
La vérification est à 52% terminée.
La vérification est à 52% terminée.
La vérification est à 53% terminée.
La vérification est à 54% terminée.
La vérification est à 54% terminée.
La vérification est à 55% terminée.
La vérification est à 55% terminée.
La vérification est à 56% terminée.
La vérification est à 57% terminée.
La vérification est à 57% terminée.
La vérification est à 58% terminée.
La vérification est à 59% terminée.
La vérification est à 59% terminée.
La vérification est à 60% terminée.
La vérification est à 60% terminée.
La vérification est à 61% terminée.
La vérification est à 62% terminée.
La vérification est à 62% terminée.
La vérification est à 63% terminée.
La vérification est à 63% terminée.
La vérification est à 64% terminée.
La vérification est à 65% terminée.
La vérification est à 65% terminée.
La vérification est à 66% terminée.
La vérification est à 66% terminée.
La vérification est à 67% terminée.
La vérification est à 68% terminée.
La vérification est à 68% terminée.
La vérification est à 69% terminée.
La vérification est à 69% terminée.
La vérification est à 70% terminée.
La vérification est à 71% terminée.
La vérification est à 71% terminée.
La vérification est à 72% terminée.
La vérification est à 72% terminée.
La vérification est à 73% terminée.
La vérification est à 74% terminée.
La vérification est à 74% terminée.
La vérification est à 75% terminée.
La vérification est à 75% terminée.
La vérification est à 76% terminée.
La vérification est à 77% terminée.
La vérification est à 77% terminée.
La vérification est à 78% terminée.
La vérification est à 78% terminée.
La vérification est à 79% terminée.
La vérification est à 80% terminée.
La vérification est à 80% terminée.
La vérification est à 81% terminée.
La vérification est à 81% terminée.
La vérification est à 82% terminée.
La vérification est à 83% terminée.
La vérification est à 83% terminée.
La vérification est à 84% terminée.
La vérification est à 84% terminée.
La vérification est à 85% terminée.
La vérification est à 86% terminée.
La vérification est à 86% terminée.
La vérification est à 87% terminée.
La vérification est à 87% terminée.
La vérification est à 88% terminée.
La vérification est à 89% terminée.
La vérification est à 89% terminée.
La vérification est à 90% terminée.
La vérification est à 90% terminée.
La vérification est à 91% terminée.
La vérification est à 92% terminée.
La vérification est à 92% terminée.
La vérification est à 93% terminée.
La vérification est à 93% terminée.
La vérification est à 94% terminée.
La vérification est à 95% terminée.
La vérification est à 95% terminée.
La vérification est à 96% terminée.
La vérification est à 96% terminée.
La vérification est à 97% terminée.
La vérification est à 98% terminée.
La vérification est à 98% terminée.
La vérification est à 99% terminée.
La vérification est à 99% terminée.
La vérification est à 100% terminée.


Le programme de protection des ressources Windows n'a trouvé aucune violation d'intégrité.

And from Windows Server 2016 :

Début de l'analyse du système. Cette opération peut nécessiter un certain temps.



Démarrage de la phase de vérification de l'analyse du système.

La vérification 0% est terminée.La vérification 0% est terminée.La vérification 1% est terminée.La vérification 1% est terminée.La vérification 2% est terminée.La vérification 2% est terminée.La vérification 2% est terminée.La vérification 3% est terminée.La vérification 3% est terminée.La vérification 4% est terminée.La vérification 4% est terminée.La vérification 4% est terminée.La vérification 5% est terminée.La vérification 5% est terminée.La vérification 6% est terminée.La vérification 6% est terminée.La vérification 6% est terminée.La vérification 7% est terminée.La vérification 7% est terminée.La vérification 8% est terminée.La vérification 8% est terminée.La vérification 8% est terminée.La vérification 9% est terminée.La vérification 9% est terminée.La vérification 10% est terminée.La vérification 10% est terminée.La vérification 11% est terminée.La vérification 11% est terminée.La vérification 11% est terminée.La vérification 12% est terminée.La vérification 12% est terminée.La vérification 13% est terminée.La vérification 13% est terminée.La vérification 13% est terminée.La vérification 14% est terminée.La vérification 14% est terminée.La vérification 15% est terminée.La vérification 15% est terminée.La vérification 15% est terminée.La vérification 16% est terminée.La vérification 16% est terminée.La vérification 17% est terminée.La vérification 17% est terminée.La vérification 17% est terminée.La vérification 18% est terminée.La vérification 18% est terminée.La vérification 19% est terminée.La vérification 19% est terminée.La vérification 20% est terminée.La vérification 20% est terminée.La vérification 20% est terminée.La vérification 21% est terminée.La vérification 21% est terminée.La vérification 22% est terminée.La vérification 22% est terminée.La vérification 22% est terminée.La vérification 23% est terminée.La vérification 23% est terminée.La vérification 24% est terminée.La vérification 24% est terminée.La vérification 24% est terminée.La vérification 25% est terminée.La vérification 25% est terminée.La vérification 26% est terminée.La vérification 26% est terminée.La vérification 26% est terminée.La vérification 27% est terminée.La vérification 27% est terminée.La vérification 28% est terminée.La vérification 28% est terminée.La vérification 28% est terminée.La vérification 29% est terminée.La vérification 29% est terminée.La vérification 30% est terminée.La vérification 30% est terminée.La vérification 31% est terminée.La vérification 31% est terminée.La vérification 31% est terminée.La vérification 32% est terminée.La vérification 32% est terminée.La vérification 33% est terminée.La vérification 33% est terminée.La vérification 33% est terminée.La vérification 34% est terminée.La vérification 34% est terminée.La vérification 35% est terminée.La vérification 35% est terminée.La vérification 35% est terminée.La vérification 36% est terminée.La vérification 36% est terminée.La vérification 37% est terminée.La vérification 37% est terminée.La vérification 37% est terminée.La vérification 38% est terminée.La vérification 38% est terminée.La vérification 39% est terminée.La vérification 39% est terminée.La vérification 40% est terminée.La vérification 40% est terminée.La vérification 40% est terminée.La vérification 41% est terminée.La vérification 41% est terminée.La vérification 42% est terminée.La vérification 42% est terminée.La vérification 42% est terminée.La vérification 43% est terminée.La vérification 43% est terminée.La vérification 44% est terminée.La vérification 44% est terminée.La vérification 44% est terminée.La vérification 45% est terminée.La vérification 45% est terminée.La vérification 46% est terminée.La vérification 46% est terminée.La vérification 46% est terminée.La vérification 47% est terminée.La vérification 47% est terminée.La vérification 48% est terminée.La vérification 48% est terminée.La vérification 49% est terminée.La vérification 49% est terminée.La vérification 49% est terminée.La vérification 50% est terminée.La vérification 50% est terminée.La vérification 51% est terminée.La vérification 51% est terminée.La vérification 51% est terminée.La vérification 52% est terminée.La vérification 52% est terminée.La vérification 53% est terminée.La vérification 53% est terminée.La vérification 53% est terminée.La vérification 54% est terminée.La vérification 54% est terminée.La vérification 55% est terminée.La vérification 55% est terminée.La vérification 55% est terminée.La vérification 56% est terminée.La vérification 56% est terminée.La vérification 57% est terminée.La vérification 57% est terminée.La vérification 57% est terminée.La vérification 58% est terminée.La vérification 58% est terminée.La vérification 59% est terminée.La vérification 59% est terminée.La vérification 60% est terminée.La vérification 60% est terminée.La vérification 60% est terminée.La vérification 61% est terminée.La vérification 61% est terminée.La vérification 62% est terminée.La vérification 62% est terminée.La vérification 62% est terminée.La vérification 63% est terminée.La vérification 63% est terminée.La vérification 64% est terminée.La vérification 64% est terminée.La vérification 64% est terminée.La vérification 65% est terminée.La vérification 65% est terminée.La vérification 66% est terminée.La vérification 66% est terminée.La vérification 66% est terminée.La vérification 67% est terminée.La vérification 67% est terminée.La vérification 68% est terminée.La vérification 68% est terminée.La vérification 69% est terminée.La vérification 69% est terminée.La vérification 69% est terminée.La vérification 70% est terminée.La vérification 70% est terminée.La vérification 71% est terminée.La vérification 71% est terminée.La vérification 71% est terminée.La vérification 72% est terminée.La vérification 72% est terminée.La vérification 73% est terminée.La vérification 73% est terminée.La vérification 73% est terminée.La vérification 74% est terminée.La vérification 74% est terminée.La vérification 75% est terminée.La vérification 75% est terminée.La vérification 75% est terminée.La vérification 76% est terminée.La vérification 76% est terminée.La vérification 77% est terminée.La vérification 77% est terminée.La vérification 78% est terminée.La vérification 78% est terminée.La vérification 78% est terminée.La vérification 79% est terminée.La vérification 79% est terminée.La vérification 80% est terminée.La vérification 80% est terminée.La vérification 80% est terminée.La vérification 81% est terminée.La vérification 81% est terminée.La vérification 82% est terminée.La vérification 82% est terminée.La vérification 82% est terminée.La vérification 83% est terminée.La vérification 83% est terminée.La vérification 84% est terminée.La vérification 84% est terminée.La vérification 84% est terminée.La vérification 85% est terminée.La vérification 85% est terminée.La vérification 86% est terminée.La vérification 86% est terminée.La vérification 86% est terminée.La vérification 87% est terminée.La vérification 87% est terminée.La vérification 88% est terminée.La vérification 88% est terminée.La vérification 89% est terminée.La vérification 89% est terminée.La vérification 89% est terminée.La vérification 90% est terminée.La vérification 90% est terminée.La vérification 91% est terminée.La vérification 91% est terminée.La vérification 91% est terminée.La vérification 92% est terminée.La vérification 92% est terminée.La vérification 93% est terminée.La vérification 93% est terminée.La vérification 93% est terminée.La vérification 94% est terminée.La vérification 94% est terminée.La vérification 95% est terminée.La vérification 95% est terminée.La vérification 95% est terminée.La vérification 96% est terminée.La vérification 96% est terminée.La vérification 97% est terminée.La vérification 97% est terminée.La vérification 98% est terminée.La vérification 98% est terminée.La vérification 98% est terminée.La vérification 99% est terminée.La vérification 99% est terminée.La vérification 100% est terminée.
La protection des ressources Windows a trouvé des fichiers endommagés, mais

n'a pas réussi à tous les réparer. Des détails sont inclus dans le journal

CBS.Log windir\Logs\CBS\CBS.log. Par exemple C:\Windows\Logs\CBS\CBS.log. Notez que la journalisation n'est pas actuellement 

prise en charge dans les scénarios de service hors connexion

Here is the script :

########################################
####### Définition des variables #######
########################################

#Définition de la date
$date = Get-Date -Format “dd-MM-yyyy”

#Récupération du nom de l’ordinateur
$computername = $env:COMPUTERNAME

#Définition de l’emplacement des rapports
$report = “C:\Users$env:USERNAME\Desktop\Check_Disk_”+"$computername"+""+$date+".html"
$reportScanHealth = "C:\Users$env:USERNAME\Desktop\ScanHealth
"+"$computername"+""+$date+".html"
$reportRestoreHealth = "C:\Users$env:USERNAME\Desktop\RestoreHealth
"+"$computername"+""+$date+".html"
$reportSFCScannow = "C:\Users$env:USERNAME\Desktop\SFCScannow
"+"$computername"+"_"+$date+".html"

#Récupération de la version de l’OS
$OSVersion = (Get-WMIObject win32_operatingsystem).name

#Définition du chemin de l’image Windows à utiliser en cas de réparation
$WindowsImage = “”

if ($OSVersion -like “Windows 10”) {
$WindowsImage = “\X.X.X.X\ISO_Windows\Windows 10\sources\install.esd:6”
}
elseif ($OSVersion -like “Windows Server 2016”) {
$WindowsImage = “\X.X.X.X\ISO_Windows\Windows Server 2016\sources\install.esd:4”
}
elseif ($OSVersion -like “*Windows Server 2012”) {
$WindowsImage = “”
}
elseif ($OSVersion -like “Windows Server 2008”) {
$WindowsImage = “”
}

Vérification de l’existence ou non du rapport.

if((test-path $report) -like $false) {
new-item $report -type file
}

#Code CSS du rapport
Add-content $report ‘<STYLE TYPE=“text/css”>’

Add-Content $report “.table1 {”
Add-Content $report “width: 100%; border: 2px solid black; background-color: #FFFFFF; }”

Add-Content $report “.table2 {”
Add-Content $report “width: 100%; border: 1px solid black; border-collapse: collapse; border-style: solid;}”

Add-Content $report “.tr1 {”
Add-Content $report “border: 2px solid #AAAAAA; border-style: solid; border-color:#006AE1 ;font-family: Georgia, sans-serif; background-color: #006AE1; color: #FFFFFF; text-align: center; font-size:15px; font-weight: bold; height: 30px; }”

Add-Content $report “.tr2 {”
Add-Content $report “border: 2px solid #AAAAAA; font-family: tahoma, sans-serif; color: #05A211; text-align: center; font-size:13px; font-weight: bold;}”

Add-Content $report “.tr3 {”
Add-Content $report “border: 2px solid #AAAAAA; font-family: tahoma, sans-serif; color: #FF7400; text-align: center; font-size:13px; font-weight: bold;}”

Add-Content $report “.tr4 {”
Add-Content $report “border: 2px solid #AAAAAA; font-family: tahoma, sans-serif; color: #FF0000; text-align: center; font-size:13px; font-weight: bold;}”

Add-content $report “</style>”

#Population du rapport
Add-Content $report “<html>”
Add-Content $report “<head>”
Add-Content $report “<meta http-equiv=‘Content-Type’ content=‘text/html; charset=iso-8859-1’>”
Add-Content $report ‘<title>Check Disk - Report</title>’
Add-Content $report “</head>”
Add-Content $report “<body>”
Add-content $report ‘’
Add-content $report “”
Add-content $report “”
Add-content $report “


Add-content $report “<font face=‘tahoma’ color=’#003399’ size=‘4’>Check Disk </br>Nom du poste : $computername </font>”
Add-content $report “

Add-Content $report “</br>”
Add-content $report “”
Add-Content $report ""
Add-Content $report ""
Add-Content $report ""
Add-Content $report ""
Add-Content $report ""
Add-Content $report “”

#Variable du rapport et clear du rapport
#Clear-Content $report

Définition de l’encodage pour supprimer les espaces générés via la commande sfc /scannow (uniquement pour affichage dans la console PowerShell)

$prev = [console]::OutputEncoding
[console]::OutputEncoding = [Text.Encoding]::Unicode

#Lancement de la commande sfc /scannow et envoi du résultat dans le rapport
sfc /scannow | Out-File $reportSFCScannow -Encoding utf8

#Récupération du contenu du rapport
$content = Get-Content $reportSFCScannow

Remise de l’encodage d’origine

#[console]::OutputEncoding = $prev

if ($content | Select-String “n’a trouvé aucune violation d’intégrité”,“any integrity violations”) {
Add-Content $report "

"
Add-Content $report “”
Add-Content $report “”
Add-Content $report ‘’
Add-Content $report “”
Remove-Item $reportSFCScannow
}

elseif ($content | Select-String “des fichiers endommagés et a pu les réparer”,“found corrupt files and successfully”) {
Add-Content $report "

"
Add-Content $report “”
Add-Content $report “”
Add-Content $report “”
Add-Content $report “”
Remove-Item $reportSFCScannow
}

elseif ($content | Select-String “mais n’a pas réussi à tous les réparer”,“found corrupt files but was unable to fix”) {
Add-Content $report "

"
#Exécution de la commande Repair-WindowsImage -Online -ScanHealth"
Repair-WindowsImage -Online -ScanHealth | Out-File $reportScanHealth -Encoding utf8
$content_scan_health = Get-Content $reportScanHealth
Add-Content $report ""
Remove-Item $reportScanHealth

$content = Get-Content $report
if ($content | Select-String “ImageHealthState : Healthy”) {
Add-Content $report "

"
Add-Content $report ""
Add-Content $report ""
}
elseif ($content | Select-String “ImageHealthState : Repairable”) {
Add-Content $report ""
#Exécution de la commande Repair-WindowsImage -Online -RestoreHealth -Source install_path -LimitAccess"
Repair-WindowsImage -Online -RestoreHealth -Source $WindowsImage -LimitAccess | Out-File $reportRestoreHealth -Encoding utf8
$content_restore_health = Get-Content $reportRestoreHealth
if ($content_restore_health | Select-String “Healthy”) {
Add-Content $report ""
}
else { Add-Content $report "" }

if ($content_restore_health | Select-String “ImageHealthState : Healthy”) {
Add-Content $report "

"
Remove-Item $reportRestoreHealth
#Relancer sfc /scannow

}
else {
Add-Content $report "

"
Remove-Item $reportRestoreHealth
}
}
else {
Add-Content $report ""
Add-Content $report ""
Add-Content $report "" }

}

<#Définition des variables pour l’envoi du rapport par mail
$encodingMail = [System.Text.Encoding]::UTF8
$to = @(“name@xxx.com”)
$from = “CheckDisk@xxx.com
$subject = "Check Disk : " + $computername + “_” + $date
$smtp = “smtp.xxx.com
$body = Get-Content $report

Envoi du mail
Send-MailMessage -SmtpServer $smtp -From $from -To $to -Subject $subject -Body $body #>

Thanks to you

 

 

Résultat de la commande sfc /scannow Résultat du scan de l’image Windows Interprétation du résultat du scan Résultat de la réparation de l’image Windows Interprétation du résultat de la réparation
Aucunes erreurs détectées NA NA NA NA Les erreurs trouvées ont été corrigées NA NA NA NA Des erreurs ont été trouvées.</br> Lancement du scan de l’image Windows… </br> ------> $content_scan_health </br> ------> L’image de réparation Windows est intègre <br />Redémarrer la machine et ré-essayer de lancer la commande sfc /scannow NA NA L’image de réparation de Windows n’est pas intègre <br />Exécution de la réparation de l’'image</br> ------> $content_restore_health </br> ------> $content_restore_health </br> ------> L’'image Windows a été réparée.<br />La commande sfc /scannow va être relancée… L’‘image Windows n’‘a pas été réparée. Voir les logs NA NA L’‘image Windows n’'est pas réparable.
When I run my script from Windows 10, it's OK, the output is good, but when I run the script from Windows Server 2016, the output got some stranges "letters

First, welcome to Powershell.org!! It is a bit difficult to assist you as half of the content is in French and English, so we may need more guidance on what “letter” specifically you are seeing. Additionally, you wrapped the output with the PRE tag, but the script and last output you did not, so it’s difficult to read. A couple of tips:

  • Take a look at Switch, using the wildcard switch is a bit cleaner than doing elseif statements.
  • You can skip to dump to a file and then import the file, you can just assign it to a variable (e.g. $result = & sfc.exe /scannow)
  • Reporting can be done much easier than manually building the report line by line. There is a resource for creating HTML reports that you should take a look at. The logs are named HTML, but it appears it's being built in plain text. If you build the report in HTML, it will give you much more flexibility.
  • If you do use HTML, ensure that you add -BodyAsHtml to your Send-MailMessage.

Hello,

Thanks for your answers.
I’ll try to add your advice when the script will be ok on the servers too.

I know he’s not perfect. It’s my first one and I don’t know all the tricks :wink:

For my problem, to be more clear, when the script run on Windows 10, the output of $reportSFCScannow is like :

Début de l’analyse du système. Cette opération peut nécessiter un certain temps.

Démarrage de la phase de vérification de l’analyse du système.

La vérification est à 0% terminée.
La vérification est à 1% terminée.
La vérification est à 1% terminée.
La vérification est à 2% terminée.
La vérification est à 3% terminée.
La vérification est à 3% terminée.
La vérification est à 4% terminée.
La vérification est à 4% terminée.
La vérification est à 5% terminée.
La vérification est à 6% terminée.
La vérification est à 6% terminée.
La vérification est à 7% terminée.
La vérification est à 7% terminée.
La vérification est à 8% terminée.
La vérification est à 9% terminée.
La vérification est à 9% terminée.
La vérification est à 10% terminée.
La vérification est à 10% terminée.
La vérification est à 11% terminée.
La vérification est à 12% terminée.
La vérification est à 12% terminée.
La vérification est à 13% terminée.
La vérification est à 13% terminée.
La vérification est à 14% terminée.
La vérification est à 15% terminée.
La vérification est à 15% terminée.
La vérification est à 16% terminée.
La vérification est à 16% terminée.
La vérification est à 17% terminée.
La vérification est à 18% terminée.
La vérification est à 18% terminée.
La vérification est à 19% terminée.
La vérification est à 19% terminée.
La vérification est à 20% terminée.
La vérification est à 21% terminée.
La vérification est à 21% terminée.
La vérification est à 22% terminée.
La vérification est à 22% terminée.
La vérification est à 23% terminée.
La vérification est à 24% terminée.
La vérification est à 24% terminée.
La vérification est à 25% terminée.
La vérification est à 25% terminée.
La vérification est à 26% terminée.
La vérification est à 27% terminée.
La vérification est à 27% terminée.
La vérification est à 28% terminée.
La vérification est à 28% terminée.
La vérification est à 29% terminée.
La vérification est à 30% terminée.
La vérification est à 30% terminée.
La vérification est à 31% terminée.
La vérification est à 31% terminée.
La vérification est à 32% terminée.
La vérification est à 33% terminée.
La vérification est à 33% terminée.
La vérification est à 34% terminée.
La vérification est à 34% terminée.
La vérification est à 35% terminée.
La vérification est à 36% terminée.
La vérification est à 36% terminée.
La vérification est à 37% terminée.
La vérification est à 37% terminée.
La vérification est à 38% terminée.
La vérification est à 39% terminée.
La vérification est à 39% terminée.
La vérification est à 40% terminée.
La vérification est à 40% terminée.
La vérification est à 41% terminée.
La vérification est à 42% terminée.
La vérification est à 42% terminée.
La vérification est à 43% terminée.
La vérification est à 43% terminée.
La vérification est à 44% terminée.
La vérification est à 45% terminée.
La vérification est à 45% terminée.
La vérification est à 46% terminée.
La vérification est à 46% terminée.
La vérification est à 47% terminée.
La vérification est à 48% terminée.
La vérification est à 48% terminée.
La vérification est à 49% terminée.
La vérification est à 49% terminée.
La vérification est à 50% terminée.
La vérification est à 51% terminée.
La vérification est à 51% terminée.
La vérification est à 52% terminée.
La vérification est à 52% terminée.
La vérification est à 53% terminée.
La vérification est à 54% terminée.
La vérification est à 54% terminée.
La vérification est à 55% terminée.
La vérification est à 55% terminée.
La vérification est à 56% terminée.
La vérification est à 57% terminée.
La vérification est à 57% terminée.
La vérification est à 58% terminée.
La vérification est à 59% terminée.
La vérification est à 59% terminée.
La vérification est à 60% terminée.
La vérification est à 60% terminée.
La vérification est à 61% terminée.
La vérification est à 62% terminée.
La vérification est à 62% terminée.
La vérification est à 63% terminée.
La vérification est à 63% terminée.
La vérification est à 64% terminée.
La vérification est à 65% terminée.
La vérification est à 65% terminée.
La vérification est à 66% terminée.
La vérification est à 66% terminée.
La vérification est à 67% terminée.
La vérification est à 68% terminée.
La vérification est à 68% terminée.
La vérification est à 69% terminée.
La vérification est à 69% terminée.
La vérification est à 70% terminée.
La vérification est à 71% terminée.
La vérification est à 71% terminée.
La vérification est à 72% terminée.
La vérification est à 72% terminée.
La vérification est à 73% terminée.
La vérification est à 74% terminée.
La vérification est à 74% terminée.
La vérification est à 75% terminée.
La vérification est à 75% terminée.
La vérification est à 76% terminée.
La vérification est à 77% terminée.
La vérification est à 77% terminée.
La vérification est à 78% terminée.
La vérification est à 78% terminée.
La vérification est à 79% terminée.
La vérification est à 80% terminée.
La vérification est à 80% terminée.
La vérification est à 81% terminée.
La vérification est à 81% terminée.
La vérification est à 82% terminée.
La vérification est à 83% terminée.
La vérification est à 83% terminée.
La vérification est à 84% terminée.
La vérification est à 84% terminée.
La vérification est à 85% terminée.
La vérification est à 86% terminée.
La vérification est à 86% terminée.
La vérification est à 87% terminée.
La vérification est à 87% terminée.
La vérification est à 88% terminée.
La vérification est à 89% terminée.
La vérification est à 89% terminée.
La vérification est à 90% terminée.
La vérification est à 90% terminée.
La vérification est à 91% terminée.
La vérification est à 92% terminée.
La vérification est à 92% terminée.
La vérification est à 93% terminée.
La vérification est à 93% terminée.
La vérification est à 94% terminée.
La vérification est à 95% terminée.
La vérification est à 95% terminée.
La vérification est à 96% terminée.
La vérification est à 96% terminée.
La vérification est à 97% terminée.
La vérification est à 98% terminée.
La vérification est à 98% terminée.
La vérification est à 99% terminée.
La vérification est à 99% terminée.
La vérification est à 100% terminée.

Le programme de protection des ressources Windows n’a trouvé aucune violation d’intégrité.

As you can see, there is a new line for each verification step. It’s just the sfc /scannow normal output.

But when I run the script on a Windows 2016 Server, there is no new line for each verification step. Everything is successive.

So the condition “if ($content | Select-String “n’a trouvé aucune violation d’intégrité”,“any integrity violations”) {” (for example) is not OK.

And I don’t understand what is the problem here.

Thanks

 

 

这也意味着此处跟踪的问题仅适用于PowerShell Core 6及更高版本。WindowsPowerShell特定问题应在UserVoice上打开。

 

 

issues tracked here are only for PowerShell Core 6 and higher. Windows PowerShell specific issues should be opened on UserVoice.

The first thing you can try is replacing the double qoutes with single qoutes. There are characters such as the accent character (`) that act as an escape character in Powershell. Using double qoutes will expand variables and Powershell will attempt to basically process the string, single qoutes are literal.

$temp = "Blue"

"The pen is $temp"
'The pen is $temp'

Output:

The pen is Blue
The pen is $temp

See how the variable is expanded in the first example but the second is literal. Next is Select-String, it is simply looking for text and returning the line.

PS C:\WINDOWS\system32> $content = @"
Line1 - This is line 1
Line2 - This is line 2
Line3 - This is line 3
"@ -split "`n"

$content | Select-String 'line 2'

Line2 - This is line 2

or even if you smash the text together…

PS C:\WINDOWS\system32> $content = @"
Line1 - This is line 1Line2 - This is line 2Line3 - This is line 3
"@ -split "`n"

$content | Select-String 'line 2'

Line1 - This is line 1Line2 - This is line 2Line3 - This is line 3

Either is returning a line, which means it would work if there are line returns or not. The if statments:

if ($content_restore_health | Select-String "ImageHealthState : Healthy") ...

Basically, this is if the statement is NOT NULL, the do this. If a line is returned, then execute. Attempt to get the logging from any system and test these components to make sure each piece works for all output.

Hello,

The first thing you can try is replacing the double qoutes with single qoutes. There are characters such as the accent character (`) that act as an escape character in Powershell. Using double qoutes will expand variables and Powershell will attempt to basically process the string, single qoutes are literal.

I’ve already tried this an it doesn’t work.

I tried the script on another server with Windows Server 2016 and I’ve the same problem.

So maybe is OS related but I don’t know why…

Text parsing can be difficult in general. Doing some research, other have had similar issues with SFC output:

https://html.developreference.com/article/19730828/uUable+to+use+the+output+of+the+command+“SFC++scannow”+in+powershell

My recommendation is to follow some basic rules:

  • Concentrate on the parsing and don't worry about reporting aspects yet
  • Make everything as consistent as possible, including language. If you want to parse in English, see if setting the Culture in the session will ensure the logging is in English. https://www.lewisroberts.com/2017/03/01/set-language-culture-timezone-using-powershell/
  • Save logs where you can test parsing

I found this too, this a good approach where they are getting rid of all of the non-relevant entries and then continuing to parse to get to the answer:

https://www.verifyit.nl/wp/?p=162930

Just stick with it and keep in mind that other more accomplished scripters have issues with these logs in particular. When these tools are built, ensuring they are easy to parse are after thoughts. While this is your first script, you did find an advanced parsing challenge (Congratulations!!). Just think, after you figure this out you crush any parsing challenge.

Hello,

Yeah I’ve done my research too and yes, it seem that i’m not alone !

I’ve found this : https://stackoverflow.com/questions/57749808/sfc-output-redirection-formatting-issue-powershell-batch :

# Save the current output encoding and switch to UTF-16LE $prev = [console]::OutputEncoding [console]::OutputEncoding = [Text.Encoding]::Unicode

Invoke sfc.exe, whose output is now correctly interpreted and

apply the CRCRLF workaround.

You can also send output to a file, but note that Windows PowerShell’s

> redirection again uses UTF-16LE encoding.

Best to use … | Set-Content/Add-Content -Encoding …

(sfc /?) -join “`r`n” -replace “`r`n`r`n”, “`r`n” | Tee-Object -Variable content

Restore the previous output encoding, which is the system’s

active OEM code page, which should work for other programs such

as ping.exe

[console]::OutputEncoding = $prev

But doesn't work.



Just stick with it and keep in mind that other more accomplished scripters have issues with these logs in particular. When these tools are built, ensuring they are easy to parse are after thoughts. While this is your first script, you did find an advanced parsing challenge (Congratulations!!). Just think, after you figure this out you crush any parsing challenge.
Yes, but I think it's too hard for a first one !! :DD