PowerShell-scripts voor herstelbewerkingen
Dit artikel bevat voorbeeldscripts die klanten kunnen implementeren of gebruiken als sjablonen om te leren hoe ze hun eigen scripts kunnen maken. Gebruik de informatie hier om scriptpakketten voor herstelbewerkingen te maken.
Scriptbeschrijvingen
In deze tabel ziet u de namen, beschrijvingen, detecties, herstelbewerkingen en configureerbare items. Scriptbestanden waarvan de namen beginnen met Detect
zijn detectiescripts. Herstelscripts beginnen met Remediate
. Deze scripts kunnen worden gekopieerd uit de volgende sectie in dit artikel.
Scriptnaam | Beschrijving |
---|---|
Netwerkcertificaten controlerenDetect_Expired_Issuer_Certificates.ps1 Remediate_Expired_Issuer_Certificates.ps1 |
Detecteert certificaten die zijn uitgegeven door een CA in het persoonlijke archief van de machine of gebruiker die zijn verlopen of bijna verlopen.
Geef de CA op door de waarde voor $strMatch in het detectiescript te wijzigen. Geef 0 op voor $expiringDays om verlopen certificaten te zoeken of geef nog een aantal dagen op om certificaten te vinden die bijna verlopen.
Herstelt door een pop-upmelding naar de gebruiker te verzenden. Geef de $Title waarden en $msgText op met de berichttitel en tekst die gebruikers moeten zien.
Hiermee worden gebruikers gewaarschuwd voor verlopen certificaten die mogelijk moeten worden vernieuwd. Voer het script uit met behulp van de aangemelde referenties: Ja |
Verouderde certificaten wissenDetect_Expired_User_Certificates.ps1 Remediate_Expired_User_Certificates.ps1 |
Hiermee worden verlopen certificaten gedetecteerd die zijn uitgegeven door een CA in het persoonlijke archief van de huidige gebruiker.
Geef de CA op door de waarde voor $certCN in het detectiescript te wijzigen.
Herstelt door verlopen certificaten te verwijderen die zijn uitgegeven door een CA uit het persoonlijke archief van de huidige gebruiker. Geef de CA op door de waarde voor $certCN in het herstelscript te wijzigen.
Hiermee vindt en verwijdert u verlopen certificaten die zijn uitgegeven door een CA uit het persoonlijke archief van de huidige gebruiker. Voer het script uit met behulp van de aangemelde referenties: Ja |
Verouderd groepsbeleid bijwerken (ingebouwd) Detect_stale_Group_Policies.ps1 Remediate_stale_GroupPolicies.ps1 |
Hiermee wordt gedetecteerd of de laatste vernieuwing van groepsbeleid groter is dan 7 days geleden.
Dit scriptpakket is inbegrepen bij Herstelbewerkingen, maar er wordt een kopie opgegeven als u de drempelwaarde wilt wijzigen. Pas de drempelwaarde van zeven dagen aan door de waarde voor $numDays in het detectiescript te wijzigen.
Herstelt door uit te voeren gpupdate /target:computer /force en gpupdate /target:user /force Kan helpen bij het verminderen van ondersteuningsaanroepen met betrekking tot netwerkconnectiviteit wanneer certificaten en configuraties worden geleverd via Groepsbeleid. Voer het script uit met behulp van de aangemelde referenties: Ja |
Scriptpakket voor netwerkcertificaten controleren
Dit scriptpakket detecteert certificaten die zijn uitgegeven door een CA in het persoonlijke archief van de machine of gebruiker die zijn verlopen of bijna verlopen. Het script herstelt door een pop-upmelding naar de gebruiker te verzenden.
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)
Scriptpakket voor verlopen certificaten wissen
Met dit scriptpakket worden verlopen certificaten gedetecteerd die zijn uitgegeven door een CA in het persoonlijke archief van de huidige gebruiker. Het script herstelt door verlopen certificaten te verwijderen die zijn uitgegeven door een CA uit het persoonlijke archief van de huidige gebruiker.
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
}
Scriptpakket voor verlopen groepsbeleid bijwerken
Dit scriptpakket is inbegrepen bij Herstelbewerkingen, maar er wordt een kopie opgegeven als u de drempelwaarde wilt wijzigen.
Met dit scriptpakket wordt gedetecteerd of de laatste vernieuwing van groepsbeleid groter is dan 7 days
geleden. Het script herstelt door en gpupdate /target:user /force
uit te voerengpupdate /target:computer /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
}
Volgende stappen
Zie Herstelbewerkingen voor meer informatie over het implementeren van scriptpakketten.