Szukałem online i znalazłem to losowo.
Krótko mówiąc, połączenie PowerShell (dostarczony skrypt) i GPO.
http://4sysops.com/archives/forcing-notification-area-icons-to-always-show-in-windows-7-or-windows-8/
Długa historia, utwórz skrypt PowerShell zawierający następujące elementy:
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
}
}
Zapisz go jako plik ps1, używając wybranej nazwy.
Otwórz MMC Group Policy Management. Wybierz wybrany obiekt zasad grupy, kliknij prawym przyciskiem myszy i wybierz Edytuj. W edytorze przejdź do Konfiguracja użytkownika> Ustawienia systemu Windows> Skrypty> Logowanie i kliknij „Właściwości ekranu”. Przejdź do karty PowerShell i kliknij Wyświetl pliki.
Skopiuj właśnie utworzony skrypt do okna Eksploratora, które właśnie otworzyło, a następnie zamknij okno.
W oknie właściwości skryptu logowania dodaj nowy skrypt PowerShell, w nazwie skryptu wprowadź nazwę użytego skryptu (przykład: NotifyIcon.ps1), a następnie w parametrach wpisz nazwę programu (rozróżniana jest wielkość liter!), A następnie przez ustawienie do użycia:
0 = pokaż tylko powiadomienia 1 = ukryj ikonę i powiadomienia 2 = pokaż ikonę i powiadomienia <--- Ten, którego potrzebujesz
Przykład: jeśli potrzebujesz, aby serwer RealVNC zawsze się pojawiał, wpisz:
winvnc4.exe 2
jako paramenterzy
Nazwę pliku wykonywalnego można znaleźć na kilka różnych sposobów, na przykład otwierając okno dialogowe Uruchom, wpisując msconfig
i przeglądając programy startowe, ręcznie przechodząc do katalogu instalacyjnego C:\Program Files\{your program}
lub próbując dopasować żądany program, patrząc na działający program procesy w Menedżerze zadań. 9 razy na 10 przyniesie to sukces.
Aby to zadziałało, użytkownik musi wcześniej uruchomić aplikację, a następnie poprawnie się wylogować, aby program explorer.exe miał szansę zapisać zaktualizowaną historię obszaru powiadomień w rejestrze. Przy kolejnym logowaniu skrypt powinien pomyślnie zlokalizować program w historii i zaktualizować jego ustawienie, aby zawsze wyświetlało się.
Możesz także spróbować uruchomić skrypt ręcznie z wiersza polecenia programu PowerShell w celu debugowania, ale MUSISZ zabić explorer.exe („taskkill / f / im explorer.exe”) przed jego uruchomieniem, w przeciwnym razie eksplorator nie zobaczy twojej aktualizacji i nadpisze kiedy się kończy.
Nie biorę uznania za ten proces. Nie napisałem tego, właśnie to znalazłem. Podziękowania za scenariusz należą do Micheasza Rowlanda . Podziękowania dla procesu GPO należą się Geoffowi Kendalowi