Scripts do PowerShell para Remediações
Este artigo inclui scripts de exemplo que os clientes podem implementar ou utilizar como modelos para aprender a criar os seus próprios. Utilize as informações aqui fornecidas para criar pacotes de scripts para Remediações.
Esta tabela mostra os nomes dos scripts, descrições, detecções, correções e itens configuráveis. Os arquivos de script cujos nomes começam com Detect
são scripts de detecção. Os scripts de correção começam com Remediate
. Esses scripts podem ser copiados da próxima seção deste artigo.
Nome do script | Descrição |
---|---|
Verificar certificados de redeDetect_Expired_Issuer_Certificates.ps1 Remediate_Expired_Issuer_Certificates.ps1 |
Detecta certificados emitidos por uma autoridade de certificação no armazenamento pessoal do computador ou do usuário que expiraram ou estão perto de expirar.
Especifique a AC ao alterar o valor para $strMatch no script de deteção. Especifique 0 no campo $expiringDays para localizar certificados expirados ou especifique outro número de dias para localizar certificados próximos à expiração.
Corrija ao emitir uma notificação de alerta para o utilizador. Especifique os $Title valores e $msgText com o título da mensagem e o texto que pretende que os utilizadores vejam.
Notifica os utilizadores de certificados expirados que poderão ter de ser renovados. Execute o script com as credenciais com sessão iniciada: Sim |
Limpar certificados obsoletosDetect_Expired_User_Certificates.ps1 Remediate_Expired_User_Certificates.ps1 |
Detecta certificados expirados emitidos por uma autoridade de certificação no armazenamento pessoal do usuário atual.
Especifique a AC ao alterar o valor para $certCN no script de deteção.
Corrija ao eliminar certificados expirados emitidos por uma AC do arquivo pessoal do utilizador atual. Especifique a AC ao alterar o valor para $certCN no script de remediação.
Localiza e elimina certificados expirados emitidos por uma AC do arquivo pessoal do utilizador atual. Execute o script com as credenciais com sessão iniciada: Sim |
Atualizar Políticas de Grupo obsoletas (incorporadas ) Detect_stale_Group_Policies.ps1 Remediate_stale_GroupPolicies.ps1 |
Detecta se a última atualização da Política de Grupo ocorreu 7 days atrás.
Este pacote de script está incluído nas Remediações, mas é fornecida uma cópia se quiser alterar o limiar. Personalize o limite de sete dias alterando o valor $numDays no script de detecção.
Corrija ao executar gpupdate /target:computer /force e gpupdate /target:user /force Pode ajudar a reduzir as chamadas de suporte relacionadas com a conectividade de rede quando os certificados e as configurações são entregues através de Política de Grupo. Execute o script com as credenciais com sessão iniciada: Sim |
Esse pacote de script detecta certificados emitidos por uma AC no repositório pessoal do Computador ou do Usuário que expiraram ou estão próximos da expiração. O script é corrigido gerando uma notificação do sistema para o usuário.
#=============================================================================================================================
#
# 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
}
#=============================================================================================================================
#
# 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)
Esse pacote de script detecta certificados expirados emitidos por uma AC no repositório pessoal do usuário atual. O script é corrigido excluindo certificados expirados emitidos por uma AC do repositório pessoal do usuário atual.
#=============================================================================================================================
#
# 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
}
#=============================================================================================================================
#
# 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
}
Este pacote de script está incluído nas Remediações, mas é fornecida uma cópia se quiser alterar o limiar.
Este pacote de scripts detecta se a última atualização da Política de Grupo é posterior a 7 days
atrás. O script corrige executando gpupdate /target:computer /force
e gpupdate /target:user /force
.
#=============================================================================================================================
#
# 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
}
#=============================================================================================================================
#
# 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
}
Para obter informações sobre a implementação de pacotes de scripts, veja Remediações.