Αντιγράψτε και επικολλήστε αυτό το δείγμα δέσμης ενεργειών και τροποποιήστε το ανάλογα με τις ανάγκες σας για το περιβάλλον σας:

<# . ΣΎΝΟΨΗ     Δέσμη ενεργειών ανάπτυξης GPO για συλλογή συμβάντων ασφαλούς εκκίνησης     Δημιουργεί και συνδέει ένα αντικείμενο πολιτικής ομάδας (GPO) για την ανάπτυξη της δέσμης ενεργειών συλλογής ως προγραμματισμένη εργασία

.DESCRIPTION     Αυτή η δέσμη ενεργειών αυτοματοποιεί την ανάπτυξη της συλλογής συμβάντων Ασφαλούς εκκίνησης μέσω Πολιτική ομάδας.Δημιουργεί ένα αντικείμενο πολιτικής ομάδας (GPO) με:     - Μια προγραμματισμένη εργασία που εκτελεί τη δέσμη ενεργειών συλλογής καθημερινά     - Κατάλληλα δικαιώματα για γραφή στο κεντρικό κοινόχρηστο στοιχείο     - Φίλτρα WMI για τη στόχευση συγκεκριμένων εκδόσεων λειτουργικού συστήματος

.PARAMETER GPOName     Όνομα για το νέο αντικείμενο πολιτικής ομάδας (GPO)

.PARAMETER DomainName     FQDN τομέα προορισμού

.PARAMETER OUPath     Διακεκριμένο όνομα των OU για τη σύνδεση του GPO με.Δέχεται πολλά OU ως πίνακα. Δεν απαιτείται εάν έχει καθοριστεί -AutoDetectOU.

.PARAMETER AutoDetectOU     Μεταβείτε σε αλληλεπιδραστική λίστα και επιλέξτε OU από την υπηρεσία καταλόγου Active Directory.Όταν καθοριστεί, το -OUPath είναι προαιρετικό.

.PARAMETER CollectionSharePath     Διαδρομή UNC όπου θα αποθηκεύονται τα αποτελέσματα της συλλογής

.PARAMETER ScriptSourcePath     Διαδρομή όπου είναι αποθηκευμένη η δέσμη ενεργειών συλλογής (θα αντιγραφεί σε SYSVOL)

.PARAMETER RandomDelayHours     Αριθμός ωρών για την τυχαία εξάπλωση της εκτέλεσης δέσμης ενεργειών σε τελικά σημεία.Αυτό εμποδίζει όλους τους υπολογιστές να γράψουν στο κοινόχρηστο στοιχείο ταυτόχρονα.Προεπιλογή: 4 ώρες. Έγκυρο εύρος: 1-24 ώρες.     Προτεινόμενες τιμές:     - Συσκευές 1-10K: 4 ώρες (προεπιλογή)     - Συσκευές 10K-50K: 8 ώρες     - 50K+ συσκευές: 12-24 ώρες

.EXAMPLE     .\Deploy-GPO-SecureBootCollection.ps1 -DomainName "contoso.com" -OUPath "OU=Workstations,DC=contoso,DC=com"

.EXAMPLE     .\Deploy-GPO-SecureBootCollection.ps1 -DomainName "contoso.com" -OUPath "OU=Workstations,DC=contoso,DC=com" -RandomDelayHours 8

.EXAMPLE     .\Deploy-GPO-SecureBootCollection.ps1 -DomainName "contoso.com" -AutoDetectOU     Παραθέτει όλα τα OU στον τομέα και ζητάει επιλογή.     

.EXAMPLE     .\Deploy-GPO-SecureBootCollection.ps1 -DomainName "contoso.com" -OUPath @("OU=Workstations,DC=contoso,DC=com", "OU=Laptops,DC=contoso,DC=com")     Συνδέει το αντικείμενο πολιτικής ομάδας (GPO) με πολλά OU σε μία μόνο εκτέλεση.     

.NOTES     Απαιτείται: Λειτουργική μονάδα Active Directory PowerShell, Πολιτική ομάδας λειτουργική μονάδα     Πρέπει να εκτελείται με δικαιώματα δημιουργίας GPO Διαχείριση τομέα ή ανάθεσης #>

[CmdletBinding()] param(     [Parameter(Mandatory = $false)]     [string]$GPOName = "SecureBoot-EventCollection",     [Parameter(Mandatory = $false)]     [συμβολοσειρά]$DomainName,     [Parameter(Mandatory = $false)]     [συμβολοσειρά[]]$OUPath,     [Parameter(Mandatory = $false)]     [switch]$AutoDetectOU,     [Parameter(Mandatory = $false)]     [string]$CollectionSharePath = "\\$DomainName\NETLOGON\SecureBootLogs",     [Parameter(Mandatory = $false)]     [string]$ScriptSourcePath = ".\Detect-SecureBootCertUpdateStatus.ps1",     [Parameter(Mandatory = $false)]     [ValidateSet("Daily", "Weekly", "AtStartup")]     [συμβολοσειρά]$Schedule = "Daily",     [Parameter(Mandatory = $false)]     [συμβολοσειρά]$ScheduleTime = "14:00",     [Parameter(Mandatory = $false)]     [ValidateRange(1; 24)]     [int]$RandomDelayHours = 4 )                                        

#Requires -Modules ActiveDirectory, GroupPolicy #Requires -Έκδοση 5.1

$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Δείγματα ανάπτυξης και παρακολούθησης"

# ============================================================================ # ΕΠΙΚΎΡΩΣΗ ΕΞΑΡΤΉΣΕΩΝ # ============================================================================

function Test-ScriptDependencies {     param(         [Parameter(Mandatory = $true)]         [συμβολοσειρά]$ScriptDirectory,         [Parameter(Mandatory = $true)]         [συμβολοσειρά[]]$RequiredScripts     )     $missingScripts = @()     foreach ($script στο $RequiredScripts) {         $scriptPath = Join-Path $ScriptDirectory $script         if (-not (Test-Path $scriptPath)) {             $missingScripts += $script         }     }     if ($missingScripts.Count -gt 0) {         Write-Host ""         Write-Host ("=" * 70) -Χρώμα πρώτου πλάνου Κόκκινο         Write-Host " MISSING DEPENDENCIES" -ForegroundColor Red         Write-Host ("=" * 70) -Χρώμα πρώτου πλάνου Κόκκινο         Write-Host ""         Write-Host "Δεν βρέθηκαν οι ακόλουθες απαιτούμενες δέσμες ενεργειών:" -ForegroundColor Yellow         foreach ($script στο $missingScripts) {             Write-Host " - $script" -Χρώμα πρώτου πλάνου Λευκό         }         Write-Host ""         Write-Host "Κατεβάστε τις πιο πρόσφατες δέσμες ενεργειών από:" -ForegroundColor Cyan         Write-Host " URL: $DownloadUrl" -ForegroundColor White         Write-Host " Μεταβείτε στο: '$DownloadSubPage'" -Χρώμα πρώτου πλάνου Λευκό         Write-Host ""         Write-Host "Εξαγάγετε όλες τις δέσμες ενεργειών στον ίδιο κατάλογο και εκτελέστε ξανά." -ForegroundColor Yellow         Write-Host ""         επιστροφή $false     }     επιστροφή $true }                             

# The Detect script is required - it gets deployed to endpoints via GPO $requiredScripts = @(     "Detect-SecureBootCertUpdateStatus.ps1" )

if (-not (Test-ScriptDependencies -ScriptDirectory $PSScriptRoot -RequiredScripts $requiredScripts)) {     έξοδος 1 }

# ============================================================================ # ΑΥΤΌΜΑΤΟς ΕΝΤΟΠΙΣΜΌς ΟΝΌΜΑΤΟς ΤΟΜΈΑ # ============================================================================

if (-not $DomainName) {     $DomainName = $env:USERDNSDOMAIN     if (-not $DomainName) {         # Προσπαθήστε να λάβετε από τη λειτουργική μονάδα AD         δοκιμάστε το {             Import-Module ActiveDirectory -Διακοπή ErrorAction             $DomainName = (Get-ADDomain). DNSRoot         } αλίευση {             Write-Host "ΣΦΑΛΜΑ: Δεν ήταν δυνατή η αυτόματη ανίχνευση του ονόματος τομέα." -Χρώμα πρώτου πλάνου Κόκκινο             Write-Host "Καθορίστε την παράμετρο -DomainName." -ForegroundColor Yellow             Write-Host ""             Write-Host "Example:" -ForegroundColor Gray             Write-Host " .\Deploy-GPO-SecureBootCollection.ps1 -DomainName contoso.com -AutoDetectOU" -Χρώμα πρώτου πλάνου Λευκό             έξοδος 1         }     }     Write-Host "Αυτόματος εντοπισμός τομέα: $DomainName" -Πράσινο χρώμα πρώτου πλάνου }

# Set CollectionSharePath default if not explicitly provided if (-not $PSBoundParameters.ContainsKey('CollectionSharePath')) {     $CollectionSharePath = "\\$DomainName\NETLOGON\SecureBootLogs" }

Write-Host "============================================" -ForegroundColor Cyan Write-Host "Secure Boot Collection - Ανάπτυξη GPO" -ForegroundColor Cyan Write-Host "============================================" -ForegroundColor Cyan

# Validate prerequisites Write-Host "'n[1/6] Επικύρωση προαπαιτούμενων..." -Κίτρινο χρώμα πρώτου πλάνου

if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) {     throw "ActiveDirectory module not found. Εγκατάσταση εργαλείων RSAT." }

if (-not (Get-Module -ListAvailable -Name GroupPolicy)) {     ρίξτε το "GroupPolicy module not found. Εγκατάσταση εργαλείων RSAT." }

Import-Module ActiveDirectory Import-Module GroupPolicy

# Validate domain connectivity δοκιμάστε το {     $domain = Get-ADDomain -Διακομιστής $DomainName     Write-Host " Συνδεδεμένος στον τομέα: $($domain. DNSRoot)" -ForegroundColor Green } αλίευση {     ρίξτε το μήνυμα "Δεν είναι δυνατή η σύνδεση με τον τομέα: $DomainName. Σφάλμα: $_" }

# Handle OU selection if ($AutoDetectOU) {     Write-Host "'n Εντοπισμός OU στον τομέα..." -ForegroundColor Cyan     $allOUs = Get-ADOrganizationalUnit -Φίλτρο * -$DomainName διακομιστή |          Sort-Object DistinguishedName |         Select-Object @{N='Index'; E={0}}, Όνομα, Διακεκριμένο Όνομα     # Εκχώρηση δεικτών     for ($i = 0, $i -lt $allOUs.Count, $i++) {         $allOUs[$i]. Δείκτης = $i + 1     }     Write-Host "'n Διαθέσιμα OUs:" -Κίτρινο Χρώμα πρώτου πλάνου     Write-Host " ---------------------------------------------------------------------" -ForegroundColor DarkGray     $allOUs | ForEach-Object {         Write-Host (" {0,3}) {1}" -f $_. Index, $_. DistinguishedName) -ForegroundColor White     }     Write-Host " ---------------------------------------------------------------------" -ForegroundColor DarkGray     Write-Host " Συμβουλή: Εισαγάγετε αριθμούς διαχωρισμένους με κόμματα για να επιλέξετε πολλά OU (π.χ., 1,3,5)" -ForegroundColor DarkGray     Write-Host " Εισαγάγετε "A" για να επιλέξετε ΟΛΑ τα OU" -ForegroundColor DarkGray     Write-Host ""     $selection = Read-Host " Επιλογή OU για σύνδεση GPO"     if ($selection -eq 'A' -or $selection -eq 'a') {         $OUPath = $allOUs.DistinguishedName         Write-Host " Selected ALL $($OUPath.Count) OU" -ForegroundColor Green     } άλλος {         $indices = $selection -διαίρεση ',' | ForEach-Object { [int]$_. Trim() }         $OUPath = @()         foreach ($idx στο $indices) {             $selected = $allOUs | Where-Object { $_. Index -eq $idx }             if ($selected) {                 $OUPath += $selected. DistinguishedName             } άλλος {                 Write-Warning "Μη έγκυρο ευρετήριο: $idx - παράλειψη"             }         }     }     if ($OUPath.Count -eq 0) {         απόρριψη του μηνύματος "Δεν έχει επιλεχθεί OU.                          Ματαιώνει."     }          Write-Host "'n Selected $($OUPath.Count) OU(s):" -ForegroundColor Green     $OUPath | ForEach-Object { Write-Host " - $_" -ForegroundColor Gray }      } elseif (-not $OUPath -or $OUPath.Count -eq 0) {     throw "Either -OUPath or -AutoDetectOU must be specified." } άλλος {     # Validate each OU exists     foreach ($path στο $OUPath) {         δοκιμάστε το {             $ou = Get-ADOrganizationalUnit -$path ταυτότητας -Διακομιστής $DomainName             Write-Host " Ο στόχος OU βρέθηκε: $($ou. Name)" -ForegroundColor Green         } αλίευση {             ρίξτε "OU δεν βρέθηκε: $path"         }     } }

# Validate source script exists if (-not (Test-Path $ScriptSourcePath)) {     ρίξτε το μήνυμα "Η δέσμη ενεργειών συλλογής δεν βρέθηκε: $ScriptSourcePath" }

# Step 2: Create collection share structure Write-Host "'n[2/6] Ρύθμιση κοινής χρήσης συλλογής..." -Πρώτο πλάνοΧρήση κίτρινο

$sysvolScriptPath = "\\$DomainName\SYSVOL\$DomainName\Scripts\SecureBootCollection"

# Create SYSVOL script folder if (-not (Test-Path $sysvolScriptPath)) {     New-Item -Κατάλογος ItemType -Διαδρομή $sysvolScriptPath -Επιβολή | Out-Null     Write-Host " Δημιουργήθηκε φάκελος δέσμης ενεργειών SYSVOL: $sysvolScriptPath" -ForegroundColor Green }

# Copy collection script to SYSVOL $destScript = Join-Path $sysvolScriptPath "Detect-SecureBootCertUpdateStatus.ps1"

# Remove existing destination if it's a directory (fix for Copy-Item bug) if (Test-Path $destScript -Κοντέινερ PathType) {     Remove-Item $destScript -Περιοδικότητα -Επιβολή }

Copy-Item -Path $ScriptSourcePath -Destination $destScript -Force Write-Host " Copied collection script to SYSVOL" -ForegroundColor Green

# Create a wrapper script that calls the main script with parameters $wrapperScript = @" # Secure Boot Event Collection Wrapper # Δημιουργείται αυτόματα από Deploy-GPO-SecureBootCollection.ps1

`$ErrorActionPreference = 'SilentlyContinue'

# Configuration '$CollectionShare = '$CollectionSharePath' '$ScriptPath = '$sysvolScriptPath\Detect-SecureBootCertUpdateStatus.ps1'

# Run collection with -OutputPath parameter if (Test-Path '$ScriptPath) {     & $CollectionShare $ScriptPath -OutputPath } άλλος {     Write-EventLog -Εφαρμογή LogName -Προέλευση "SecureBootCollection" -EventId 1001 -Σφάλμα EntryType -Μήνυμα "Η δέσμη ενεργειών συλλογής δεν βρέθηκε: "$ScriptPath" } " @

$wrapperPath = Join-Path $sysvolScriptPath "Run-SecureBootCollection.ps1" $wrapperScript | Out-File -FilePath $wrapperPath -Κωδικοποίηση UTF8 -Επιβολή Write-Host " Δημιουργήθηκε δέσμη ενεργειών αναδίπλωσης" -ForegroundColor Green

# Create collection share (if on a file server) Write-Host " Διαδρομή κοινής χρήσης συλλογής: $CollectionSharePath" -ForegroundColor Cyan Write-Host " ΣΗΜΕΙΩΣΗ: Βεβαιωθείτε ότι αυτό το κοινόχρηστο στοιχείο υπάρχει με την πρόσβαση εγγραφής "Domain Computers" -ForegroundColor Yellow

# Step 3: Create the GPO Write-Host "'n[3/6] Δημιουργία Πολιτική ομάδας αντικειμένου..." -Κίτρινο χρώμα πρώτου πλάνου

# Check if GPO already exists $existingGPO = Get-GPO -Name $GPOName -Domain $DomainName -ErrorAction SilentlyContinue

if ($existingGPO) {     Write-Host " Το αντικείμενο πολιτικής ομάδας (GPO) "$GPOName" υπάρχει ήδη. Ενημέρωση..." -Κίτρινο χρώμα πρώτου πλάνου     $gpo = $existingGPO } άλλος {     $gpo = New-GPO -Name $GPOName -Domain $DomainName -Comment "Deploys Secure Boot event collection script to endpoints"     Write-Host " Δημιουργήθηκε GPO: $GPOName" -Πράσινο χρώμα πρώτου πλάνου }

# Step 4: Configure Scheduled Task via GPO Preferences Write-Host "'n[4/6] Ρύθμιση παραμέτρων προγραμματισμένης εργασίας..." -Κίτρινο χρώμα πρώτου πλάνου

# Build the scheduled task XML # Το RandomDelay εξαπλώνει την εκτέλεση σε τελικά σημεία για να αποτρέψει την υπερφόρτωση του διακομιστή Write-Host " Τυχαία καθυστέρηση: $RandomDelayHours ώρες (κατανέμει φορτίο σε όλο τον στόλο)" -ForegroundColor Cyan

$taskTrigger = switch ($Schedule) {     "Ημερήσια" {         @"        ><CalendarTrigger           <StartBoundary>2024-01-01T${ScheduleTime}:00</StartBoundary>           <Ενεργοποιήθηκε>true</Enabled>           <ScheduleByDay>             <DaysInterval>1</DaysInterval>           </ScheduleByDay>           <>RandomDelay PT${RandomDelayHours}H</RandomDelay>         </CalendarTrigger> "@     }     "Weekly" {         @"        ><CalendarTrigger           <StartBoundary>2024-01-01T${ScheduleTime}:00</StartBoundary>           <Ενεργοποιημένο>true</Enabled>           <ScheduleByWeek>             <WeeksInterval>1</WeeksInterval>             <DaysOfWeek>               <Τετάρτη />             </DaysOfWeek>           </ScheduleByWeek>           <RandomDelay>PT${RandomDelayHours}H</RandomDelay>         </CalendarTrigger> "@     }     "AtStartup" {         # Για εναύσματα εκκίνησης, χρησιμοποιήστε την επιλογή Καθυστέρηση για να προσθέσετε τυχαία ώρα έναρξης         # Κάθε υπολογιστής θα εκκινείται μεταξύ 5 και (5 + RandomDelayHours*60) λεπτά μετά την εκκίνηση         $maxDelayMinutes = 5 + ($RandomDelayHours * 60)         @"         <BootTrigger>           <Ενεργοποιημένο>true</Enabled>           <Καθυστέρηση><PT5M /Καθυστέρηση>           <>RandomDelay PT${RandomDelayHours}H</RandomDelay>         </BootTrigger> "@     } }

$scheduledTaskXML = @" <?xml version="1.0" encoding="UTF-16"?> <Έκδοση εργασίας="1,4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  ><RegistrationInfo     <Περιγραφή>Συλλέγει δεδομένα συμβάντος Ασφαλούς εκκίνησης για την απογραφή της εταιρείας</Περιγραφή>     <Συντάκτης><>ασφαλείας για μεγάλες επιχειρήσεις /Συντάκτης>   </RegistrationInfo>   <ενεργοποιεί>     $taskTrigger   </Εναύσματα>  >διευθυντών <     <Principal id="Author">       <UserId>S-1-5-18</UserId>       <RunLevel>highestAvailable</RunLevel>     </Principal>  > </Principals  >ρυθμίσεων <     <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <το στοιχείο DisallowStartIfOnBatteries>ψευδές</DisallowStartIfOnBatteries>     <StopIfGoingOnBatteries>ψευδές</StopIfGoingOnBatteries>     <AllowHardTerminate>true</AllowHardTerminate>     <StartWhenAvailable>true</StartWhenAvailable>     <RunOnlyIfNetworkAvailable>true</RunOnlyIfNetworkAvailable>    ><IdleSettings       <StopOnIdleEnd>ψευδές</StopOnIdleEnd>       <RestartOnIdle>false</RestartOnIdle>     </IdleSettings>     <AllowStartOnDemand>true</AllowStartOnDemand>     <Ενεργοποιημένο>true</Enabled>     <κρυφών>ψευδών</Κρυφό>     <RunOnlyIfIdle>ψευδές</RunOnlyIfIdle>     <DisallowStartOnRemoteAppSession>ψευδές</DisallowStartOnRemoteAppSession>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>     <WakeToRun>ψευδές</WakeToRun>     <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     <Προτεραιότητα>7</Προτεραιότητα>   </Ρυθμίσεις>   <Actions Context="Author">    ><Exec       <εντολής>powershell.exe</command>       Ορίσματα <>-NoProfile -Παράκαμψη ExecutionPolicy -Αρχείο </Ορίσματα "$wrapperPath"<>     </Exec>   </Ενέργειες> </> εργασίας " @

# Save task XML to SYSVOL for reference/backup $taskXmlPath = Join-Path $sysvolScriptPath "SecureBootCollection-Task.xml" $scheduledTaskXML | Out-File -FilePath $taskXmlPath -Κωδικοποίηση Unicode -Επιβολή Write-Host " Αποθηκευμένη προγραμματισμένη εργασία XML σε SYSVOL (αντίγραφο ασφαλείας)" -ForegroundColor Green

# Inject scheduled task into GPO Preferences Write-Host " Εισαγωγή προγραμματισμένης εργασίας στις προτιμήσεις GPO..." -ForegroundColor Cyan

$gpoId = $gpo.Id.ToString() $gpoPrefPath = "\\$DomainName\SYSVOL\$DomainName\Policies\{$gpoId}\Machine\Preferences\ScheduledTasks"

# Create Preferences folder structure if (-not (Test-Path $gpoPrefPath)) {     New-Item -Κατάλογος ItemType -Διαδρομή $gpoPrefPath -Επιβολή | Out-Null }

# Generate unique GUID for the task $taskGuid = [guid]::NewGuid(). ToString("B"). ToUpper()

# Build GPO Preferences ScheduledTasks.xml format # Αυτό είναι διαφορετικό από το τυπικό Χρονοδιάγραμμα εργασιών XML - είναι μορφή GPP $gppScheduledTasksXml = @" <?xml version="1.0" encoding="utf-8"?> <ScheduledTasks clsid="{CC63F200-7309-4ba0-B154-A71CD118DBCC}">   <TaskV2 clsid="{D8896631-B747-47a7-84A6-C155337F3BC8}" name="SecureBoot-EventCollection" image="0" changed=""0" changed=""$(Get-Date -Format 'yyy-MM-dd HH:mm:ss')" uid="$taskGuid" userContext="0" removePolicy="0">     <Properties action="C" name="SecureBoot-EventCollection" runAs="NT AUTHORITY\System" logonType="S4U">       <Έκδοση εργασίας="1,3">         <RegistrationInfo>           <Συντάκτης><ασφαλείας για μεγάλες επιχειρήσεις /Συντάκτης>           <Περιγραφή>Συλλέγει την κατάσταση του πιστοποιητικού Ασφαλούς εκκίνησης για παρακολούθηση της συμμόρφωσης των επιχειρήσεων</Περιγραφή>         </RegistrationInfo>        >διευθυντών <           <Principal id="Author">             <UserId>NT AUTHORITY\System</UserId>             <LogonType>S4U</LogonType>             <RunLevel>highestAvailable</RunLevel>           </Κύρια>        > </Διευθυντές        >ρυθμίσεων <          ><IdleSettings             <διάρκειας><PT10M />διάρκειας             <WaitTimeout>PT1H</WaitTimeout>             <StopOnIdleEnd>ψευδές</StopOnIdleEnd>             <RestartOnIdle>false</RestartOnIdle>           </IdleSettings>           <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>           <το στοιχείο DisallowStartIfOnBatteries>ψευδές</DisallowStartIfOnBatteries>           <StopIfGoingOnBatteries>ψευδές</StopIfGoingOnBatteries>           <AllowHardTerminate>true</AllowHardTerminate>           <StartWhenAvailable>true</StartWhenAvailable>           <RunOnlyIfNetworkAvailable>true</RunOnlyIfNetworkAvailable>           <allowStartOnDemand>true</AllowStartOnDemand>           <Ενεργοποιημένο>true</Enabled>           <κρυφών>ψευδών</Κρυφό>           <RunOnlyIfIdle>ψευδές</RunOnlyIfIdle>           <WakeToRun>ψευδές</WakeToRun>           <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>           <Προτεραιότητα>7</Priority>         </Ρυθμίσεις>         <εναύσματα>           $taskTrigger         </Εναύσματα>         <Actions Context="Author">           <Exec>             <>powershell.exe<εντολών /Command>             <ορίσματα>-NoProfile -Παράκαμψη ExecutionPolicy -Αρχείο </Ορίσματα "$wrapperPath">           </Exec>         </Ενέργειες>       </> εργασιών    > </Properties   </TaskV2> </ScheduledTasks> " @

# Write GPP ScheduledTasks.xml to GPO $gppXmlPath = Join-Path $gpoPrefPath "ScheduledTasks.xml" $gppScheduledTasksXml | Out-File -FilePath $gppXmlPath -Κωδικοποίηση UTF8 -Force Write-Host " [OK] Προγραμματισμένη εργασία που εγχέεται στο GPO" -ForegroundColor Green Write-Host " Χρονοδιάγραμμα εργασιών: $Schedule στο $ScheduleTime με τυχαία καθυστέρηση $RandomDelayHours ώρας" -Γκρι χρώμα πρώτου πλάνου

# Step 5: Link GPO to OU(s) Write-Host "'n[5/6] Σύνδεση GPO με OU(s)..." -Κίτρινο χρώμα πρώτου πλάνου

$linkedCount = 0 $skippedCount = 0

foreach ($targetOU in $OUPath) {     $existingLink = Get-GPInheritance -$targetOU-Τομέας $DomainName |          Select-Object -ExpandProperty GpoLinks |          Where-Object { $_. DisplayName -eq $GPOName }

    if (-not $existingLink) {         New-GPLink -Όνομα $GPOName -$targetOU-Τομέας $DomainName -LinkEnabled Ναι | Out-Null         Write-Host " [OK] Συνδεδεμένο με: $targetOU" -Πράσινο χρώμα πρώτου πλάνου         $linkedCount++     } άλλος {         Write-Host " - Ήδη συνδεδεμένο: $targetOU" -Χρώμα πρώτου πλάνου Κίτρινο         $skippedCount++     } }

Write-Host "`n   Summary: $linkedCount new links, $skippedCount already existed" -ForegroundColor Cyan

# Step 6: Create WMI Filter (optional - for Windows 10/11 only) Write-Host "'n[6/6] Creating WMI filter..." -ForegroundColor Yellow

$wmiFilterName = "Windows 10 and 11 Workstations" $wmiQuery = 'SELECT * FROM Win32_OperatingSystem WHERE έκδοση LIKE "10.%" AND ProductType = "1"'

Write-Host @"    [ΣΗΜΕΙΩΣΗ] ΠΡΟΑΙΡΕΤΙΚΟ: Δημιουργία φίλτρου WMI στο GPMC    Όνομα φίλτρου: $wmiFilterName    Ερώτημα: $wmiQuery    Αυτό φιλτράρει το αντικείμενο πολιτικής ομάδας (GPO) ώστε να εφαρμόζεται μόνο σε σταθμούς εργασίας Windows 10/11.            

"@ -ForegroundColor Yellow

# Summary Write-Host "'n============================================" -ForegroundColor Cyan Write-Host "DEPLOYMENT COMPLETE" -ForegroundColor Green Write-Host "============================================" -ForegroundColor Cyan Write-Host @"

Summary: - Όνομα GPO: $GPOName - Στόχος OU: $OUPath - Κοινή χρήση συλλογής: $CollectionSharePath - Θέση δέσμης ενεργειών: $sysvolScriptPath - Χρονοδιάγραμμα: $Schedule στο $ScheduleTime

Next Steps: 1. Δημιουργήστε την κοινή χρήση της συλλογής με τα κατάλληλα δικαιώματα:    - Κοινή χρήση: $CollectionSharePath    - Δικαιώματα: Υπολογιστές τομέα (Εγγραφή), Διαχειριστές τομέα (Πλήρεις)

2. Complete the scheduled task configuration in GPMC (see instructions above)

3. Run 'gpupdate /force' on a test machine to verify deployment

4. Monitor collection results in: $CollectionSharePath

5. Run aggregation script to generate reports: .\Aggregate-SecureBootData.ps1 -InputPath "$CollectionSharePath"

"@ -ForegroundColor White  

​​​​​​​

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.