Skrypty programu PowerShell na potrzeby korygowania
Ten artykuł zawiera przykładowe skrypty, które klienci mogą implementować lub używać jako szablony, aby dowiedzieć się, jak tworzyć własne. Skorzystaj z informacji podanych tutaj, aby utworzyć pakiety skryptów na potrzeby korygowania.
Opisy skryptów
W tej tabeli przedstawiono nazwy skryptów, opisy, wykrywania, korygowanie i konfigurowalne elementy. Pliki skryptów, których nazwy zaczynają się od Detect
są skryptami wykrywania. Skrypty korygowania zaczynają się od Remediate
. Te skrypty można skopiować z następnej sekcji tego artykułu.
Nazwa skryptu | Opis |
---|---|
Sprawdzanie certyfikatów sieciowychDetect_Expired_Issuer_Certificates.ps1 Remediate_Expired_Issuer_Certificates.ps1 |
Wykrywa certyfikaty wystawione przez urząd certyfikacji w magazynie osobistym komputera lub użytkownika, które wygasły lub w pobliżu wygaśnięcia.
Określ urząd certyfikacji, zmieniając wartość w $strMatch skryptze wykrywania. Określ wartość 0, $expiringDays aby znaleźć wygasłe certyfikaty, lub określ inną liczbę dni, aby znaleźć certyfikaty w pobliżu wygaśnięcia.
Koryguje przez wysłanie wyskakujących powiadomień do użytkownika. $Title Określ wartości i $msgText z tytułem wiadomości i tekstem, które mają być widoczne dla użytkowników.
Powiadamia użytkowników o wygasłych certyfikatach, które mogą wymagać odnowienia. Uruchom skrypt przy użyciu poświadczeń logowania: Tak |
Wyczyść nieaktualne certyfikatyDetect_Expired_User_Certificates.ps1 Remediate_Expired_User_Certificates.ps1 |
Wykrywa wygasłe certyfikaty wystawione przez urząd certyfikacji w magazynie osobistym bieżącego użytkownika.
Określ urząd certyfikacji, zmieniając wartość w $certCN skryptze wykrywania.
Koryguje przez usunięcie wygasłych certyfikatów wystawionych przez urząd certyfikacji z magazynu osobistego bieżącego użytkownika. Określ urząd certyfikacji, zmieniając wartość w $certCN skryptze korygowania.
Wyszukuje i usuwa wygasłe certyfikaty wystawione przez urząd certyfikacji z magazynu osobistego bieżącego użytkownika. Uruchom skrypt przy użyciu poświadczeń logowania: Tak |
Aktualizowanie nieaktualnych zasad grupy (wbudowanych) Detect_stale_Group_Policies.ps1 Remediate_stale_GroupPolicies.ps1 |
Wykrywa, czy ostatnia zasady grupy odświeżania jest większa niż 7 days poprzednio.
Ten pakiet skryptów jest dołączony do funkcji Korygowania, ale jeśli chcesz zmienić próg, zostanie udostępniona kopia. Dostosuj próg siedmiu dni, zmieniając wartość skryptu $numDays wykrywania.
Koryguje przez uruchomienie gpupdate /target:computer /force programu i gpupdate /target:user /force może pomóc zmniejszyć liczbę wywołań pomocy technicznej związanych z łącznością sieciową, gdy certyfikaty i konfiguracje są dostarczane za pośrednictwem zasady grupy. Uruchom skrypt przy użyciu poświadczeń logowania: Tak |
Sprawdzanie pakietu skryptów certyfikatów sieciowych
Ten pakiet skryptów wykrywa certyfikaty wystawione przez urząd certyfikacji w magazynie osobistym komputera lub użytkownika, które wygasły lub w pobliżu wygaśnięcia. Skrypt koryguje przez wysłanie wyskakujących powiadomień do użytkownika.
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)
Wyczyść nieaktualny pakiet skryptów certyfikatów
Ten pakiet skryptów wykrywa wygasłe certyfikaty wystawione przez urząd certyfikacji w magazynie osobistym bieżącego użytkownika. Skrypt koryguje przez usunięcie wygasłych certyfikatów wystawionych przez urząd certyfikacji z magazynu osobistego bieżącego użytkownika.
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
}
Aktualizowanie nieaktualizowanego pakietu skryptów zasad grupy
Ten pakiet skryptów jest dołączony do funkcji Korygowania, ale jeśli chcesz zmienić próg, zostanie udostępniona kopia.
Ten pakiet skryptów wykrywa, czy ostatnia zasady grupy odświeżania jest większa niż 7 days
poprzednio. Skrypt koryguje przez uruchomienie i gpupdate /target:computer /force
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
}
Następne kroki
Aby uzyskać informacje na temat wdrażania pakietów skryptów, zobacz Korygowanie.