尝试在 NT Authority\System 下运行计划任务 GPO 时发生事件 1202

尝试在 NT Authority\System 下运行计划任务 GPO 时发生事件 1202

我正在尝试在企业应用程序的机器上安装条形码字体。GPO 由 Windows Server 2019 Standard 版本 1809 OS 内部版本 17763.4252 服务器提供。有问题的 GPO 使用计算机首选项 -> 计划任务立即运行脚本。如下所示。

#$fonts = (New-Object -ComObject Shell.Application).Namespace(0x14)
$Path = Test-Path \\DC\netlogon\font\
if($Path -eq $true)
{
Write-EventLog -Source Application -LogName Application -EventId 301 -EntryType Information -Message "The Network Path is True" 
$fontFolder = "\\DC\NETLOGON\Font\ "
$fontItem = Get-Item -Path $fontFolder
$fontList = Get-ChildItem -Path "$fontItem\*" -Include ('*.fon','*.otf','*.ttc','*.ttf')
$RegPath =(Test-Path 'HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Fonts')
$objFont = New-Object System.Drawing.Text.PrivateFontCollection

}
foreach ($font in $fontList) 
    {
     $objFont.AddFontFile($font.FullName)
     $objTitle = $objFont.Families[-1].Name 
     $fontName = $font.Name
     $objExtension = switch ($font.Extension)
        {
            .TTF {"(True Type Font)"}
            .OTF {"(Open Type Font)"}
            Default {
            Write-EventLog -Source Application -LogName Application -EventId 305 -EntryType Information -Message "Font Extension not Found"
            }
         }  
     $FontTitle = $objTitle + " " + $objExtension
     if (-not(Test-Path -Path "C:\Windows\fonts\$fontName" )) {
        Write-EventLog -Source Application -LogName Application -EventId 302 -EntryType Information -Message "Font not Found, Installing font."
        echo $fontName

        reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v $FontTitle /t REG_SZ /d DWBAR39.TTF /f
        cp $font C:\Windows\Fonts 
        
        if (Test-Path -Path "C:\windows\fonts\$fontName")
            {
            Write-EventLog -Source Application -LogName Application -EventId 306 -EntryType Information -Message "Font Installed."
         }   
        
    }
    
    elseif (Test-Path -Path "C:\Windows\fonts\$fontName"){
    Write-EventLog -Source Application -LogName Application -EventId 303 -EntryType Information -Message "Font Already Installed in C:\windows\fonts\"
    }
   }
   

该脚本在本地运行良好。我可以运行它,它运行正常。每当我刷新组策略时,我都会收到事件 1202,SceCLI

0x5:访问被拒绝。此问题的高级帮助可在 https://support.microsoft.com. 查询“故障排除 1202 事件”。

目前它正在 GPO 中运行。

名称 C - 字体安装程序
作者 'Me'
描述 安装字体。仅在用户登录 S4U 时运行
UserId NT AUTHORITY\System
以最高权限运行 HighestAvailable Hidden 是
配置为 1.2
已启用 是

程序/脚本 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
参数 -ExecutionPolicy Bypass -Command '& \DC\netlogon\add-Font.ps1' 从 C:\Windows\System32\WindowsPowerShell 启动

如果计算机不再处于空闲状态则停止 是
如果恢复空闲状态则重新启动 否
仅当计算机使用交流电源时才启动任务 是 如果计算机
切换到电池电源则停止 否
允许按需运行任务 是 在
错过计划的启动后尽快运行任务 是 如果任务运行时间超过 3 天则停止任务并强制其停止 是 如果正在运行的任务未在请求时结束,如果未安排任务再次运行,则在之后将其删除 立即 如果任务已在运行,则适用以下规则 StopExisting

从权限角度来看。我发现使用 PSEXEC64.exe -sid powershell。运行目录 $font | %{$fonts.CopyHere($_.FullName)} 没有任何输出。

本网站https://eddiejackson.net/wp/?p=16137帮助解释为什么会这样。似乎 0x14 shell 变量被重载并重定向到用户配置文件。我在本地运行脚本时就看到过这种情况。

*在脚本中添加内容后,我仍然收到 SceCLI 错误,似乎脚本甚至没有运行,因为我没有收到我添加的任何事件日志。如何/为什么?我使用 SYSTEM 帐户执行这些操作。

我禁用了域范围的 Windows 防火墙,现在我不再收到 SceCLI 错误。仍然没有任何效果。

任何帮助都将非常有帮助。

谢谢。

答案1

事实证明这是脚本的问题。Powershell ISE 可以正确解释所有内容,但当作为 GPO 处理时则不行。该行

$fontFolder = "\\DC\NETLOGON\Font\" 

断开引号,因为 \ 充当了忽略字符。在我删除反斜杠后,它开始正常工作。@GregAskew 你可以说我告诉过你。

谢谢,WC。

相关内容