Tôi đã tìm kiếm trực tuyến và thực sự tìm thấy điều này một cách ngẫu nhiên.
Câu chuyện dài, sự kết hợp giữa PowerShell (kịch bản được cung cấp) và GPO.
http://4sysops.com/archives/forcing-notification-area-icons-to-always-show-in-windows-7-or-windows-8/
Câu chuyện dài, tạo tập lệnh PowerShell chứa các mục sau:
param(
[Parameter(Mandatory=$true,HelpMessage='The name of the program')][string]$ProgramName,
[Parameter(Mandatory=$true,HelpMessage='The setting (2 = show icon and notifications 1 = hide icon and notifications, 0 = only show notifications')]
[ValidateScript({if ($_ -lt 0 -or $_ -gt 2) { throw 'Invalid setting' } return $true})]
[Int16]$Setting
)
$encText = New-Object System.Text.UTF8Encoding
[byte[]] $bytRegKey = @()
$strRegKey = ""
$bytRegKey = $(Get-ItemProperty $(Get-Item 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify').PSPath).IconStreams
for($x=0; $x -le $bytRegKey.Count; $x++)
{
$tempString = [Convert]::ToString($bytRegKey[$x], 16)
switch($tempString.Length)
{
0 {$strRegKey += "00"}
1 {$strRegKey += "0" + $tempString}
2 {$strRegKey += $tempString}
}
}
[byte[]] $bytTempAppPath = @()
$bytTempAppPath = $encText.GetBytes($ProgramName)
[byte[]] $bytAppPath = @()
$strAppPath = ""
Function Rot13($byteToRot)
{
if($byteToRot -gt 64 -and $byteToRot -lt 91)
{
$bytRot = $($($byteToRot - 64 + 13) % 26 + 64)
return $bytRot
}
elseif($byteToRot -gt 96 -and $byteToRot -lt 123)
{
$bytRot = $($($byteToRot - 96 + 13) % 26 + 96)
return $bytRot
}
else
{
return $byteToRot
}
}
for($x = 0; $x -lt $bytTempAppPath.Count * 2; $x++)
{
If($x % 2 -eq 0)
{
$curbyte = $bytTempAppPath[$([Int]($x / 2))]
$bytAppPath += Rot13($curbyte)
}
Else
{
$bytAppPath += 0
}
}
for($x=0; $x -lt $bytAppPath.Count; $x++)
{
$tempString = [Convert]::ToString($bytAppPath[$x], 16)
switch($tempString.Length)
{
0 {$strAppPath += "00"}
1 {$strAppPath += "0" + $tempString}
2 {$strAppPath += $tempString}
}
}
if(-not $strRegKey.Contains($strAppPath))
{
Write-Host Program not found. Programs are case sensitive.
break
}
[byte[]] $header = @()
$items = @{}
for($x=0; $x -lt 20; $x++)
{
$header += $bytRegKey[$x]
}
for($x=0; $x -lt $(($bytRegKey.Count-20)/1640); $x++)
{
[byte[]] $item=@()
$startingByte = 20 + ($x*1640)
$item += $bytRegKey[$($startingByte)..$($startingByte+1639)]
$items.Add($startingByte.ToString(), $item)
}
foreach($key in $items.Keys)
{
$item = $items[$key]
$strItem = ""
$tempString = ""
for($x=0; $x -le $item.Count; $x++)
{
$tempString = [Convert]::ToString($item[$x], 16)
switch($tempString.Length)
{
0 {$strItem += "00"}
1 {$strItem += "0" + $tempString}
2 {$strItem += $tempString}
}
}
if($strItem.Contains($strAppPath))
{
Write-Host Item Found with $ProgramName in item starting with byte $key
$bytRegKey[$([Convert]::ToInt32($key)+528)] = $setting
Set-ItemProperty $($(Get-Item 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify').PSPath) -name IconStreams -value $bytRegKey
}
}
Lưu nó dưới dạng tệp ps1 bằng tên bạn chọn.
Mở MMC quản lý chính sách nhóm. Chọn Đối tượng chính sách nhóm đã chọn của bạn, nhấp chuột phải và chọn Chỉnh sửa. Trong trình chỉnh sửa, điều hướng đến Cấu hình người dùng> Cài đặt Windows> Tập lệnh> Đăng nhập và nhấp vào "Thuộc tính hiển thị". Chuyển đến tab PowerShell và nhấp vào Xem tệp.
Sao chép tập lệnh bạn vừa thực hiện vào cửa sổ Explorer vừa mở và sau đó đóng cửa sổ.
Trong cửa sổ thuộc tính tập lệnh đăng nhập, thêm tập lệnh PowerShell mới, trong tên tập lệnh, nhập tên tập lệnh bạn đã sử dụng (ví dụ: NotifyIcon.ps1), sau đó trong tham số, nhập tên chương trình (phân biệt chữ hoa chữ thường!) theo cài đặt để sử dụng:
0 = chỉ hiển thị thông báo 1 = biểu tượng ẩn và thông báo 2 = biểu tượng hiển thị và thông báo <--- Cái bạn cần
Ví dụ: nếu bạn cần máy chủ RealVNC luôn xuất hiện, bạn sẽ nhập:
winvnc4.exe 2
như các thông số
Bạn có thể tìm ra tên của tệp thực thi theo một số cách khác nhau, chẳng hạn như mở hộp thoại Chạy và nhập msconfig
và xem các chương trình khởi động, điều hướng thủ công đến thư mục cài đặt C:\Program Files\{your program}
hoặc cố gắng khớp chương trình mong muốn bằng cách xem chạy các quy trình trong Trình quản lý tác vụ. 9 trong số 10 lần này sẽ dẫn đến thành công.
Để làm việc này, người dùng phải chạy ứng dụng trước đó và sau đó đăng xuất đúng cách để explorer.exe có cơ hội ghi lịch sử khu vực thông báo cập nhật vào Registry. Trong lần đăng nhập tiếp theo, tập lệnh sẽ xác định thành công chương trình trong lịch sử và cập nhật cài đặt của nó để luôn hiển thị.
Bạn cũng có thể thử chạy tập lệnh theo cách thủ công từ dấu nhắc PowerShell để gỡ lỗi, nhưng bạn PHẢI giết explorer.exe ('taskkill / f / im explorer.exe') trước khi chạy nó, nếu không explorer sẽ không thấy cập nhật của bạn và sẽ ghi đè lên nó khi nó bỏ.
Tôi không có tín dụng cho quá trình này. Tôi đã không viết nó, tôi chỉ tìm thấy nó. Tín dụng cho kịch bản đi vào Micah Rowland . Tín dụng cho quy trình GPO dành cho Geoff Kendal