PowerShell-Skripts für Wartungen
Dieser Artikel enthält Beispielskripts, die Kunden implementieren oder als Vorlagen verwenden können, um zu erfahren, wie sie eigene erstellen. Verwenden Sie die hier bereitgestellten Informationen, um Skriptpakete für Wartungen zu erstellen.
Angaben zu den Skripts
In dieser Tabelle werden die Skriptnamen, Beschreibungen, Erkennungen, Wiederherstellungen und konfigurierbaren Elemente angezeigt. Skriptdateien, deren Namen mit Detect
beginnen, sind Erkennungsskripts. Wiederherstellungsskripts beginnen mit Remediate
. Diese Skripts können aus dem nächsten Abschnitt dieses Artikels kopiert werden.
Skriptname | Beschreibung |
---|---|
Überprüfen von NetzwerkzertifikatenDetect_Expired_Issuer_Certificates.ps1 Remediate_Expired_Issuer_Certificates.ps1 |
Erkennt, ob von einer Zertifizierungsstelle ausgestellte Zertifikate, die sich entweder im persönlichen Speicher des Computers oder des Benutzers befinden, abgelaufen oder fast abgelaufen sind.
Geben Sie die Zertifizierungsstelle an, indem Sie den Wert für $strMatch im Erkennungsskript ändern. Geben Sie 0 für $expiringDays an, um abgelaufene Zertifikate zu suchen, oder geben Sie eine andere Anzahl von Tagen an, um fast abgelaufene Zertifikate zu finden.
Korrigiert, indem eine Popupbenachrichtigung für den Benutzer ausgelöst wird. Geben Sie die $Title Werte und $msgText mit dem Nachrichtentitel und dem Text an, den Benutzer sehen sollen.
Benachrichtigt Benutzer über abgelaufene Zertifikate, die möglicherweise erneuert werden müssen. Führen Sie das Skript mit den anmeldeinformationen aus: Ja |
Löschen veralteter ZertifikateDetect_Expired_User_Certificates.ps1 Remediate_Expired_User_Certificates.ps1 |
Erkennt von einer Zertifizierungsstelle ausgestellte abgelaufene Zertifikate im persönlichen Speicher des aktuellen Benutzers.
Geben Sie die Zertifizierungsstelle an, indem Sie den Wert für $certCN im Erkennungsskript ändern.
Löscht abgelaufene Zertifikate, die von einer Zertifizierungsstelle ausgestellt wurden, aus dem persönlichen Speicher des aktuellen Benutzers. Geben Sie die Zertifizierungsstelle an, indem Sie den Wert für $certCN im Wartungsskript ändern.
Sucht und löscht abgelaufene Zertifikate, die von einer Zertifizierungsstelle ausgestellt wurden, im persönlichen Speicher des aktuellen Benutzers. Führen Sie das Skript mit den anmeldeinformationen aus: Ja |
Aktualisieren veralteter Gruppenrichtlinien (integriert) Detect_stale_Group_Policies.ps1 Remediate_stale_GroupPolicies.ps1 |
Erkennt, ob die letzte Gruppenrichtlinienaktualisierung mehr als 7 days zurückliegt.
Dieses Skriptpaket ist in Remediations enthalten, aber eine Kopie wird bereitgestellt, wenn Sie den Schwellenwert ändern möchten. Passen Sie den Sieben-Tage-Schwellenwert an, indem Sie den Wert für $numDays im Erkennungsskript ändern.
Korrekturen durch Ausführen gpupdate /target:computer /force von und gpupdate /target:user /force Kann dazu beitragen, netzwerkkonnektivitätsbezogene Supportaufrufe zu reduzieren, wenn Zertifikate und Konfigurationen über Gruppenrichtlinie übermittelt werden. Führen Sie das Skript mit den anmeldeinformationen aus: Ja |
Skriptpaket zur Überprüfung von Netzwerkzertifikaten
Dieses Skriptpaket erkennt, ob von einer Zertifizierungsstelle ausgestellte Zertifikate, die sich entweder im persönlichen Speicher des Computers oder des Benutzers befinden, abgelaufen oder fast abgelaufen sind. Die Korrektur durch das Skript erfolgt durch Senden einer Popupbenachrichtigung an den Benutzer.
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)
Skriptpaket zum Löschen veralteter Zertifikate
Dieses Skriptpaket erkennt von einer Zertifizierungsstelle ausgestellte abgelaufene Zertifikate im persönlichen Speicher des aktuellen Benutzers. Die Korrektur durch das Skript erfolgt durch Löschen der von einer Zertifizierungsstelle ausgestellten abgelaufenen Zertifikate im persönlichen Speicher des aktuellen Benutzers.
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
}
Skriptpaket zum Aktualisieren veralteter Gruppenrichtlinien
Dieses Skriptpaket ist in Remediations enthalten, aber eine Kopie wird bereitgestellt, wenn Sie den Schwellenwert ändern möchten.
Dieses Skriptpaket erkennt, ob die letzte Gruppenrichtlinienaktualisierung mehr als 7 days
zurückliegt. Die Korrektur durch das Skript erfolgt durch Ausführen von gpupdate /target:computer /force
und 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
}
Nächste Schritte
Informationen zum Bereitstellen von Skriptpaketen finden Sie unter Wartung.