Scripts PowerShell pour les corrections
Cet article inclut des exemples de scripts que les clients peuvent implémenter ou utiliser comme modèles pour apprendre à créer leurs propres scripts. Utilisez les informations fournies ici pour créer des packages de script pour les corrections.
Descriptions des scripts
Ce tableau présente les noms de script, les descriptions, les détections, les corrections et les éléments configurables. Les fichiers de script dont le nom commence par Detect
sont des scripts de détection. Les scripts de correction commencent par Remediate
. Ces scripts peuvent être copiés à partir de la section suivante de cet article.
Nom du script | Description |
---|---|
Vérifier les certificats réseauDetect_Expired_Issuer_Certificates.ps1 Remediate_Expired_Issuer_Certificates.ps1 |
Détecte les certificats émis par une autorité de certification dans le magasin personnel de la machine ou de l'utilisateur, qui ont expiré ou sont sur le point de l’être.
Spécifiez l’autorité de certification en modifiant la valeur de $strMatch dans le script de détection. Indiquez 0 pour $expiringDays afin d’identifier les certificats expirés, ou spécifiez un autre nombre de jours afin d’identifier les certificats sur le point d’expirer.
Corrige en lançant une notification toast à l’utilisateur. Spécifiez les $Title valeurs et $msgText avec le titre et le texte du message que vous souhaitez que les utilisateurs voient.
Avertit les utilisateurs des certificats expirés qui peuvent avoir besoin d’être renouvelés. Exécutez le script à l’aide des informations d’identification de connexion : Oui |
Effacer les certificats obsolètesDetect_Expired_User_Certificates.ps1 Remediate_Expired_User_Certificates.ps1 |
Détecte les certificats expirés émis par une autorité de certification dans le magasin personnel de l'utilisateur actuel.
Spécifiez l’autorité de certification en modifiant la valeur de $certCN dans le script de détection.
Corrige en supprimant les certificats expirés émis par une autorité de certification du magasin personnel de l’utilisateur actuel. Spécifiez l’autorité de certification en modifiant la valeur de $certCN dans le script de correction.
Recherche et supprime les certificats expirés émis par une autorité de certification dans le magasin personnel de l’utilisateur actuel. Exécutez le script à l’aide des informations d’identification de connexion : Oui |
Mettre à jour les stratégies de groupe obsolètes (intégrées) Detect_stale_Group_Policies.ps1 Remediate_stale_GroupPolicies.ps1 |
Détecte si la dernière actualisation de la stratégie de groupe est antérieure à 7 days jours.
Ce package de script est inclus dans corrections, mais une copie est fournie si vous souhaitez modifier le seuil. Personnalisez le seuil de sept jours en modifiant la valeur de $numDays dans le script de détection.
Corrige en exécutant gpupdate /target:computer /force et gpupdate /target:user /force Peut aider à réduire les appels de prise en charge liés à la connectivité réseau lorsque des certificats et des configurations sont remis via une stratégie de groupe. Exécutez le script à l’aide des informations d’identification de connexion : Oui |
Vérifier le package de script des certificats réseau
Ce package de script détecte les certificats émis par une autorité de certification dans le magasin personnel de l’ordinateur ou de l’utilisateur qui ont expiré ou qui arrivent à expiration. Le script corrige en déclenchant une notification toast à l’utilisateur.
Detect_Expired_Issuer_Certificates.ps1
#=============================================================================================================================
#
# Script Name: Detect_Expired_Issuer_Certificates.ps1
# Description: Detect expired certificates issued by "CN=<your CA here>" in either Machine
# or User certificate store
# Notes: Change the value of the variable $strMatch from "CN=<your CA here>" to "CN=..."
# For testing purposes the value of the variable $expiringDays can be changed to a positive integer
# Don't change the $results variable
#
#=============================================================================================================================
# Define Variables
$results = @()
$expiringDays = 0
$strMatch = "CN=<your CA here>"
try
{
$results = @(Get-ChildItem -Path Cert:\LocalMachine\My -Recurse -ExpiringInDays $expiringDays | where {$_.Issuer -match $strMatch})
$results += @(Get-ChildItem -Path Cert:\CurrentUser\My -Recurse -ExpiringInDays $expiringDays | where {$_.Issuer -match $strMatch})
if (($results -ne $null)){
#Below necessary for Intune as of 10/2019 will only remediate Exit Code 1
Write-Host "Match"
Return $results.count
exit 1
}
else{
#No matching certificates, do not remediate
Write-Host "No_Match"
exit 0
}
}
catch{
$errMsg = $_.Exception.Message
Write-Error $errMsg
exit 1
}
Remediate_Expired_Issuer_Certificates.ps1
#=============================================================================================================================
#
# Script Name: Remediate_Expired_Issuer_Certificates.ps1
# Description: Raise a Toast Notification if expired certificates issued by "CN=..."
# to user or machine on the machine where detection script found them. No remediation action besides
# the Toast is taken.
# Notes: Change the values of the variables $Title and $msgText
#
#=============================================================================================================================
## Raise toast to have user contact whoever is specified in the $msgText
# Define Variables
$delExpCert = 0
$Title = "Title"
$msgText = "message"
# Main script
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
$APP_ID = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe'
$template = @"
<toast>
<visual>
<binding template="ToastText02">
<text id="1">$Title</text>
<text id="2">$msgText</text>
</binding>
</visual>
</toast>
"@
$xml = New-Object Windows.Data.Xml.Dom.XmlDocument
$xml.LoadXml($template)
$toast = New-Object Windows.UI.Notifications.ToastNotification $xml
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($APP_ID).Show($toast)
Effacer le package de script de certificats obsolètes
Ce package de script détecte les certificats expirés émis par une autorité de certification dans le magasin personnel de l’utilisateur actuel. Ce script corrige le problème en supprimant les certificats expirés émis par une autorité de certification du magasin personnel de l'utilisateur actuel.
Detect_Expired_User_Certificates.ps1
#=============================================================================================================================
#
# Script Name: Detect_Expired_User_Certificates.ps1
# Description: Detect expired certificates issued by "CN=<your CA here>" to User
# Notes: Change the value of the variable $certCN from "CN=<your CA here>" to "CN=...".
# Don't change $results
#
#=============================================================================================================================
# Define Variables
$results = 0
$certCN = "CN=<your CA here>"
try
{
$results = Get-ChildItem -Path Cert:\CurrentUser\My -Recurse -ExpiringInDays 0 | where {$_.Issuer -eq($certCN)}
if (($results -ne $null)){
#Below necessary for Intune as of 10/2019 will only remediate Exit Code 1
Write-Host "Match"
Return $results.count
exit 1
}
else{
Write-Host "No_Match"
exit 0
}
}
catch{
$errMsg = $_.Exception.Message
Write-Error $errMsg
exit 1
}
Remediate_Expired_User_Certificates.ps1
#=============================================================================================================================
#
# Script Name: Remediate_Expired_User_Certificates.ps1
# Description: Remove expired certificates issued by "CN=<your CA here>" to User
# Notes: Change the value of the variable $certCN from "CN=<your CA here>" to "CN=..."
#
#=============================================================================================================================
# Define Variables
$certCN = "CN=<your CA here>"
try
{
Get-ChildItem -Path cert:\CurrentUser -Recurse -ExpiringInDays 0 | where {$_.Issuer -eq($certCN)} | Remove-Item
exit 0
}
catch{
$errMsg = $_.Exception.Message
Write-Error $errMsg
exit 1
}
Mettre à jour le package de script stratégies de groupe obsolètes
Ce package de script est inclus dans corrections, mais une copie est fournie si vous souhaitez modifier le seuil.
Ce paquet de script détecte si la dernière actualisation de la stratégie de groupe est antérieure à 7 days
jours. Le script corrige en exécutant gpupdate /target:computer /force
et gpupdate /target:user /force
.
Detect_stale_Group_Policies.ps1
#=============================================================================================================================
#
# Script Name: Detect_stale_Group_Policies.ps1
# Description: Detect if Group Policy has been updated within number of days
# Notes: Remediate if "Match", $lastGPUpdateDays default value of 7, change as appropriate
#
#=============================================================================================================================
# Define Variables
try {
$gpResult = [datetime]::FromFileTime(([Int64] ((Get-ItemProperty -Path "Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Extension-List\{00000000-0000-0000-0000-000000000000}").startTimeHi) -shl 32) -bor ((Get-ItemProperty -Path "Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Extension-List\{00000000-0000-0000-0000-000000000000}").startTimeLo))
$lastGPUpdateDate = Get-Date ($gpResult[0])
[int]$lastGPUpdateDays = (New-TimeSpan -Start $lastGPUpdateDate -End (Get-Date)).Days
if ($lastGPUpdateDays -gt 7){
#Exit 1 for Intune. We want it to be within the last 7 days "Match" to remediate in SCCM
Write-Host "Match"
exit 1
}
else {
#Exit 0 for Intune and "No_Match" for SCCM, only remediate "Match"
Write-Host "No_Match"
exit 0
}
}
catch {
$errMsg = $_.Exception.Message
return $errMsg
exit 1
}
Remediate_stale_GroupPolicies.ps1
#=============================================================================================================================
#
# Script Name: Remediate_stale_GroupPolicies.ps1
# Description: This script triggers Group Policy update
# Notes: No variable substitution needed
#
#=============================================================================================================================
try {
$compGPUpd = gpupdate /force
$gpResult = [datetime]::FromFileTime(([Int64] ((Get-ItemProperty -Path "Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Extension-List\{00000000-0000-0000-0000-000000000000}").startTimeHi) -shl 32) -bor ((Get-ItemProperty -Path "Registry::HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Extension-List\{00000000-0000-0000-0000-000000000000}").startTimeLo))
$lastGPUpdateDate = Get-Date ($gpResult[0])
[int]$lastGPUpdateDays = (New-TimeSpan -Start $lastGPUpdateDate -End (Get-Date)).Days
if ($lastGPUpdateDays -eq 0){
Write-Host "gpupdate completed successfully"
exit 0
}
else{
Write-Host "gpupdate failed"
}
}
catch{
$errMsg = $_.Exception.Message
return $errMsg
exit 1
}
Prochaines étapes
Pour plus d’informations sur le déploiement de packages de script, consultez Corrections.