Scripts de PowerShell para correcciones
En este artículo se incluyen scripts de ejemplo que los clientes pueden implementar o usar como plantillas para aprender a crear los suyos propios. Use la información que se proporciona aquí para crear paquetes de script para correcciones.
Descripciones de los scripts
En esta tabla se muestran los nombres de los scripts, sus descripciones, detecciones, correcciones y los elementos configurables. Los archivos de script cuyos nombres empiezan por Detect
son scripts de detección. Los scripts de corrección empiezan por Remediate
. Estos scripts se pueden copiar en la sección siguiente de este artículo.
Nombre de script | Descripción |
---|---|
Comprobación de certificados de redDetect_Expired_Issuer_Certificates.ps1 Remediate_Expired_Issuer_Certificates.ps1 |
Detecta los certificados emitidos por una entidad de certificación en el almacén personal de la máquina o del usuario que han expirado o que están a punto de expirar.
Especifique la entidad de certificación cambiando el valor de $strMatch en el script de detección. Especifique 0 para $expiringDays para buscar certificados expirados, o bien especifique otro número de días para buscar certificados que estén por expirar.
Se corrige mediante la generación de una notificación del sistema al usuario.
Especifique los $Title valores y $msgText con el título del mensaje y el texto que desea que vean los usuarios.
Notifica a los usuarios los certificados expirados que podrían tener que renovarse.Ejecute el script con las credenciales iniciadas: Sí |
Borrar certificados obsoletosDetect_Expired_User_Certificates.ps1 Remediate_Expired_User_Certificates.ps1 |
Detecta los certificados expirados emitidos por una entidad de certificación en el almacén personal del usuario actual.
Especifique la entidad de certificación cambiando el valor de $certCN en el script de detección.
Se corrige mediante la eliminación de certificados expirados emitidos por una ENTIDAD de certificación del almacén personal del usuario actual.
Especifique la entidad de certificación cambiando el valor de $certCN en el script de corrección.
Busca y elimina los certificados expirados emitidos por una entidad de certificación del almacén personal del usuario actual.
Ejecute el script con las credenciales iniciadas: Sí |
Actualizar directivas de grupo obsoletas (integradas) Detect_stale_Group_Policies.ps1 Remediate_stale_GroupPolicies.ps1 |
Detecta si la última actualización de las directivas de grupo ocurrió hace más de 7 days .
Este paquete de script se incluye con correcciones, pero se proporciona una copia si desea cambiar el umbral. Personalice el umbral de siete días cambiando el valor de $numDays en el script de detección.
Corrige mediante la ejecución gpupdate /target:computer /force y gpupdate /target:user /force puede ayudar a reducir las llamadas de soporte técnico relacionadas con la conectividad de red cuando se entregan certificados y configuraciones a través de la directiva de grupo.
Ejecute el script con las credenciales iniciadas: Sí |
Comprobar el paquete de scripts de certificados de red
Este paquete de scripts detecta los certificados emitidos por una CA en el almacén personal del equipo o del usuario que han expirado o están a punto de expirar. El script se corrige generando una notificación del sistema al usuario.
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)
Borrar paquete de scripts de certificados obsoletos
Este paquete de scripts detecta certificados expirados emitidos por una CA en el almacén personal del usuario actual. El script se corrige eliminando los certificados expirados emitidos por una CA del almacén personal del usuario actual.
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
}
Actualizar paquete de scripts de directivas de grupo obsoletas
Este paquete de script se incluye con correcciones, pero se proporciona una copia si desea cambiar el umbral.
Este paquete de scripts detecta si la última actualización de directiva de grupo es mayor que la de hace 7 days
. El script corrige ejecutando gpupdate /target:computer /force
y 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
}
Siguientes pasos
Para obtener información sobre la implementación de paquetes de scripts, vea Correcciones.