ฉันกำลังค้นหาออนไลน์และพบสิ่งนี้แบบสุ่ม
เนื้อเรื่องย่อมีส่วนผสมของ PowerShell (สคริปต์ที่ให้มา) และ GPO
http://4sysops.com/archives/forcing-notification-area-icons-to-always-show-in-windows-7-or-windows-8/
เรื่องยาวสร้างสคริปต์ PowerShell ที่มีต่อไปนี้:
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
}
}
บันทึกเป็นไฟล์ ps1 โดยใช้ชื่อที่คุณเลือก
เปิด MMC การจัดการนโยบายกลุ่ม เลือกวัตถุนโยบายกลุ่มที่คุณเลือกคลิกขวาและเลือกแก้ไข ในเครื่องมือแก้ไขให้ไปที่การกำหนดค่าผู้ใช้> การตั้งค่า Windows> สคริปต์> เข้าสู่ระบบและคลิก "คุณสมบัติการแสดงผล" ไปที่แท็บ PowerShell แล้วคลิกดูไฟล์
คัดลอกสคริปต์ที่คุณเพิ่งสร้างลงในหน้าต่าง Explorer ที่เพิ่งเปิดและปิดหน้าต่าง
ในหน้าต่างคุณสมบัติสคริปต์ล็อกอินให้เพิ่มสคริปต์ PowerShell ใหม่ในชื่อสคริปต์ป้อนชื่อของสคริปต์ที่คุณใช้ (ตัวอย่าง: NotifyIcon.ps1) จากนั้นในพารามิเตอร์ป้อนชื่อโปรแกรม (คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่!) ตาม โดยการตั้งค่าที่จะใช้:
0 = แสดงเฉพาะการแจ้งเตือน 1 = ซ่อนไอคอนและการแจ้งเตือน 2 = แสดงไอคอนและการแจ้งเตือน <--- สิ่งที่คุณต้องการ
ตัวอย่างถ้าคุณต้องการให้เซิร์ฟเวอร์ RealVNC ปรากฏขึ้นเสมอคุณจะต้องป้อน:
winvnc4.exe 2
ในฐานะนักเลง
คุณสามารถค้นหาชื่อของไฟล์ที่เรียกใช้งานได้ด้วยวิธีที่แตกต่างกันสองสามวิธีเช่นการเปิดกล่องโต้ตอบเรียกใช้และพิมพ์msconfig
และดูโปรแกรมเริ่มต้นนำทางไปยังไดเรกทอรีการติดตั้งด้วยตนเองC:\Program Files\{your program}
หรือพยายามจับคู่โปรแกรมที่ต้องการโดยดูที่การทำงาน กระบวนการในตัวจัดการงาน 9 ครั้งจากทั้งหมด 10 ครั้งจะทำให้สำเร็จ
เพื่อให้สามารถใช้งานได้ผู้ใช้จะต้องเรียกใช้แอปพลิเคชันก่อนหน้านี้แล้วออกจากระบบอย่างถูกต้องเพื่อให้ explorer.exe ได้รับโอกาสในการเขียนประวัติพื้นที่แจ้งเตือนที่อัปเดตไปยังรีจิสทรี ในการลงชื่อเข้าใช้ครั้งต่อไปสคริปต์ควรค้นหาโปรแกรมในประวัติเรียบร้อยแล้วและอัปเดตการตั้งค่าเพื่อแสดงเสมอ
คุณสามารถลองเรียกใช้สคริปต์ด้วยตนเองจากพรอมต์ PowerShell เพื่อตรวจแก้จุดบกพร่อง แต่คุณต้องฆ่า explorer.exe ('taskkill / f / im explorer.exe') ก่อนใช้งานมิฉะนั้น explorer จะไม่เห็นการอัปเดตของคุณและจะเขียนทับ มันเมื่อมันออกจาก
ฉันไม่ได้รับเครดิตสำหรับกระบวนการนี้ ฉันไม่ได้เขียนฉันเพิ่งพบมัน เครดิตสำหรับสคริปต์ไปคาห์โรว์แลนด์ เครดิตสำหรับกระบวนการ GPO ไปที่Geoff Kendal