Программно создать сценарий запуска компьютера в локальной групповой политике: сценарий выполняется, но не отображается в редакторе групповой политики
Мне удалось программно создать сценарий запуска Powershell для Windows 10 Pro и поместить его в локальную групповую политику (см. Ниже сценарий powershell, используемый для создания сценария запуска).
Просто для повторения: я использую локальную групповую политику, и мой компьютер не находится в домене.
Сценарий запуска регистрирует его выполнение в журнале событий, и все идет отлично, как я вижу соответствующие события в журнале.
проблема
Когда я открываю локальный редактор групповой политики (gpedit.msc
) и просмотрите скрипты запуска компьютера, там нет зарегистрированных скриптов, как вы можете видеть на скриншоте:
Сам сценарий правильно размещен в каталоге для сценариев групповой политики (C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
)
Сценарий Powershell, используемый для создания сценария запуска компьютера в локальной групповой политике
$path = "$ENV:systemRoot\System32\GroupPolicy\Machine\Scripts\Startup"
if (-not (Test-Path $path)) {
New-Item -path $path -itemType Directory
}
'Write-EventLog -LogName xxx -source Scripts -EntryType Information -EventId 2 -Message "Execute machine startup script: $psCommandPath"' |
Out-File -filePath "$path\AllUsersStartup.ps1" -encoding ascii
# Add script to Group Policy through the Registry
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup\0\0',
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup\0\0' |
ForEach-Object {
if (-not (Test-Path $_)) {
New-Item -path $_ -force
}
}
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup\0',
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup\0' |
ForEach-Object {
New-ItemProperty -path "$_" -name DisplayName -propertyType String -value "Local Group Policy"
New-ItemProperty -path "$_" -name FileSysPath -propertyType String -value "$ENV:systemRoot\System32\GroupPolicy\Machine"
New-ItemProperty -path "$_" -name GPO-ID -propertyType String -value "LocalGPO"
New-ItemProperty -path "$_" -name GPOName -propertyType String -value "Local Group Policy"
New-ItemProperty -path "$_" -name PSScriptOrder -propertyType DWord -value 2
New-ItemProperty -path "$_" -name SOM-ID -propertyType String -value "Local"
}
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\Scripts\Startup\0\0',
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\Scripts\Startup\0\0' |
ForEach-Object {
New-ItemProperty -path "$_" -name Script -propertyType String -value 'AllUsersStartup.ps1'
New-ItemProperty -path "$_" -name Parameters -propertyType String -value ''
New-ItemProperty -path "$_" -name IsPowershell -propertyType DWord -value 1
New-ItemProperty -path "$_" -name ExecTime -propertyType QWord -value 0
}
1 ответ
Оказывается, локальный редактор групповой политики получает список и порядок сценариев не только из реестра, но и из C:\Windows\System32\GroupPolicy\Machine\Scripts\psScripts.ini
, Это почти обычный файл.ini с некоторыми странными особенностями: он должен быть в формате спецификации UTF-16LE и может быть как с CR
+LF
а также LF
окончания строк (что довольно странно для Windows).
Ниже вы найдете кусок кода, чтобы написать правильно psScripts.ini
для добавления сценария запуска машины в локальную групповую политику.
Код требует модуль PsIni, который может быть установлен
Install-Module -Name PsIni
#Requires -Module psIni
$scriptsConfig = @{
StartExecutePSFirst = 'true'
EndExecutePSFirst = 'true'
}
$startup = @{
'0CmdLine' = 'AllUsersStartup.ps1'
'0Parameters' = ''
}
$newIniContent = [ordered] @{
ScriptsConfig = $scriptsConfig
Startup = $startup
}
$newIniContent | Out-IniFile -filePath C:\Windows\System32\GroupPolicy\Machine\Scripts\psScripts.ini -encoding Unicode -force
Я не могу комментировать
maoizm
s сообщение, но вы можете префикс его скрипта следующим, чтобы полностью автоматизировать процесс:
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module -Name PsIni
...