You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AD组策略部署开机PowerShell脚本遇安全弹窗问题求助

开机提示图片脚本优化问题

问题背景

公司需实现员工开机时显示提示图片的功能,采用PowerShell脚本+AD组策略(GPO)推送部署,已配置必要权限。目前脚本可随开机触发,但存在两个问题:

  1. 运行时弹出PowerShell安全确认弹窗,需用户点击YES才能继续,无法自动执行
  2. 希望优化交互,让用户点击确认按钮(明确表示已阅读)后关闭提示窗口

当前使用的脚本代码:

ExecutionPolicy LocalMachine

# Carrega as assemblies necessárias
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Caminho real da sua imagem no servidor
$imagemPath = "\\192.168.0.175\Arquivos Z\_Scripts\imagemAlerta.jpeg"

# Tenta carregar a imagem
try {
    $imagem = [System.Drawing.Image]::FromFile($imagemPath)
    $larguraImagem = $imagem.Width/1.4
    $alturaImagem = $imagem.Height/1.4
} catch {
    # Em caso de erro ao carregar a imagem, exibe uma mensagem de erro
    [System.Windows.Forms.MessageBox]::Show("Erro ao carregar a imagem.", "Erro", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
    exit
}

# Exibe uma caixa de mensagem com a imagem e um botão "OK"
$form = New-Object Windows.Forms.Form
$form.Text = "MENSAGEM DE AVISO!"
$form.Size = New-Object Drawing.Size @($larguraImagem, $alturaImagem)
$form.StartPosition = "CenterScreen"

$pictureBox = New-Object Windows.Forms.PictureBox
$pictureBox.Image = $imagem
$pictureBox.SizeMode = "StretchImage"
$pictureBox.Dock = "Fill"

# Adiciona PictureBox ao formulário
$form.Controls.Add($pictureBox)

# Adiciona botão "OK" ao formulário
$buttonOK = New-Object Windows.Forms.Button
$buttonOK.Text = "Clique para fechar"
$buttonOK.Dock = "Top"
$buttonOK.TextAlign = "Right"
$buttonOK.add_Click({
    $form.Close()
})

# Adiciona botão "OK" ao formulário
$form.Controls.Add($buttonOK)

# Exibe a janela
$form.ShowDialog()

问题原因

  1. 安全弹窗问题:原脚本中ExecutionPolicy LocalMachine写法错误,未使用正确的Set-ExecutionPolicy命令,且组策略推送的脚本受PowerShell执行策略限制,默认会阻止无签名脚本运行,导致弹窗。
  2. 交互体验问题:原按钮布局在窗口顶部,文字提示不够明确,用户可能误点,且窗口未置顶,容易被其他开机程序遮挡。

优化后的脚本

# 临时绕过当前进程的执行策略(不修改系统全局设置)
Set-ExecutionPolicy Bypass -Scope Process -Force

# 加载必要的.NET程序集
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 服务器图片路径
$imagemPath = "\\192.168.0.175\Arquivos Z\_Scripts\imagemAlerta.jpeg"

# 尝试加载图片,处理异常
try {
    $imagem = [System.Drawing.Image]::FromFile($imagemPath)
    # 调整窗口尺寸,预留按钮空间
    $larguraJanela = $imagem.Width / 1.4
    $alturaJanela = $imagem.Height / 1.4 + 60
} catch {
    [System.Windows.Forms.MessageBox]::Show("无法加载提示图片,请联系IT部门。", "错误", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
    exit
}

# 创建主窗口
$form = New-Object Windows.Forms.Form
$form.Text = "重要提示!"
$form.Size = New-Object Drawing.Size($larguraJanela, $alturaJanela)
$form.StartPosition = "CenterScreen"
$form.TopMost = $true  # 窗口置顶,确保用户优先看到
$form.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle  # 固定窗口大小
$form.MaximizeBox = $false  # 禁用最大化按钮
$form.MinimizeBox = $false  # 禁用最小化按钮,强制用户确认

# 创建图片显示控件
$pictureBox = New-Object Windows.Forms.PictureBox
$pictureBox.Image = $imagem
$pictureBox.SizeMode = "StretchImage"
$pictureBox.Dock = "Fill"
$form.Controls.Add($pictureBox)

# 创建确认按钮
$buttonOK = New-Object Windows.Forms.Button
$buttonOK.Text = "我已阅读并确认"
$buttonOK.Size = New-Object Drawing.Size(160, 45)
# 按钮居中显示在窗口底部
$buttonOK.Location = New-Object Drawing.Point(($form.Width - $buttonOK.Width)/2, $form.Height - $buttonOK.Height - 15)
$buttonOK.Font = New-Object Drawing.Font("微软雅黑", 10, [System.Drawing.FontStyle]::Bold)
$buttonOK.add_Click({
    $form.Close()
})
$form.Controls.Add($buttonOK)

# 显示窗口并等待用户操作
$form.ShowDialog()

# 释放图片资源,避免内存泄漏
$imagem.Dispose()

优化说明

  • 解决安全弹窗:使用Set-ExecutionPolicy Bypass -Scope Process -Force仅在当前脚本进程中临时绕过执行策略,既解决了运行限制,又不会修改系统全局的执行策略设置,兼顾安全性。
  • 提升交互体验:
    • 窗口置顶且固定大小,禁用最小化/最大化按钮,确保用户必须处理提示
    • 按钮移至窗口底部居中位置,文字明确提示“我已阅读并确认”,避免误操作
    • 添加图片资源释放逻辑,防止内存占用
    • 错误提示信息本地化,更符合员工使用习惯

内容的提问来源于stack exchange,提问作者igorcarmona1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:52:13