iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: function New-Protocol { <# .SYNOPSIS Создание протокола/ассоциации .DESCRIPTION Функция создаёт протокол ассоциацию для текущего пользователя Может использоваться в качестве команды во всплывающих напоминаниях, так же можно запускать с помощью команды: start ProtocolName: и т.д. .EXAMPLE New-Protocol -ProtocolName 'ProtocolName' -Force Создать протокол с именем ProtocolName с перезаписью существующего .NOTES Author: iNNOKENTIY21 #> param ( # Имя создаваемого протокола [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string] $ProtocolName, # Переключатель - если указан, # то уже существующие параметры в реестре будут молча перезаписаны [switch] $Force ) $Path = "Registry::HKEY_CURRENT_USER\SOFTWARE\Classes\$ProtocolName" [void] $(New-Item -Path $Path -Force:$Force -ErrorAction Stop) $Params = @{ Path = $Path Name = '(Default)' Value = "URL:$ProtocolName Protocol" PropertyType = 'String' Force = $Force ErrorAction = 'Stop' } [void] $(New-ItemProperty @Params) $Params.Name = 'URL Protocol' $Params.Value = '' [void] $(New-ItemProperty @Params) [PSCustomObject] @{ Protocol = $Path } } function New-ShellOpenCommand { <# .SYNOPSIS Создаёт команду Shell\Open\Command для указанного протокола .DESCRIPTION Функция создаёт для текущего пользователя, для указанного протокола команду .EXAMPLE New-ShellOpenCommand -ShellOpenCommand 'run.bat' -Force Создать команду со значением run.bat с перезаписью существующей команды .NOTES Author: iNNOKENTIY21 #> param ( # Имя протокола # Или полный путь (Registry::HKEY_CLASSES_ROOT\<ProtocolName>) [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [ValidateNotNullOrEmpty()] [string] $Protocol, # Исполняемый файл который будет запущен при выборе команды # Файл долджен быть в том же каталоге, что и файл скрипта [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string] $ShellOpenCommand, # Переключатель - если указан, # то уже существующие параметры в реестре будут молча перезаписаны [switch] $Force ) if ($Protocol -match "^Registry::") { $Path = $Protocol } else { $Path = "Registry::HKEY_CURRENT_USER\SOFTWARE\Classes\$Protocol" } if (-not (Test-Path -Path $Path)) { throw "$Path - не найден!" } $Path = "$Path\shell\open\command" if ((Test-Path -Path $Path) -and (!$Force)) { throw "$Path - уже существует!" } [void] $(New-Item -Path $Path -Force) $Params = @{ Path = $Path Name = '(Default)' Value = "$PSScriptRoot\$ShellOpenCommand" PropertyType = 'String' } [void] $(New-ItemProperty @Params) # [PSCustomObject] $Params } function Set-ShowInActionCenter { <# .SYNOPSIS Показывать уведомления для указанной программы или нет .DESCRIPTION Функция устанавливает параметр в центре уведомений, показывать уведомления для указанной программы или нет .EXAMPLE $Application = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe' Set-ShowInActionCenter -Application $Application -State Enabled Включить показ уведомлениё для Windows PowerShell .NOTES Author: iNNOKENTIY21 #> param ( # Программа для которой требуется установить параметр [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string] $Application, # Включить или выключить показ уведомлений [Parameter(Mandatory)] [ValidateSet('Enabled', 'Disabled')] [string] $State ) $Reg = 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion' $Path = "$Reg\Notifications\Settings\$Application" $Name = 'ShowInActionCenter' if ($State -eq 'Enabled') { $Value = 1 if (-NOT (Test-Path -Path $Path)) { [void] $(New-Item -Path $Path -Force) } } else { $Value = 0 } $Params = @{ Path = $Path Name = $Name Value = $Value PropertyType = "DWORD" Force = $true } [void] $(New-ItemProperty @Params) } function New-ToastNotification { <# .SYNOPSIS Показ уведомления .DESCRIPTION Функция показывает уведомления в центре уведомлений от имени указанной программы с указанным шаблоном .EXAMPLE $ProtocolName = 'iNNOKENTIY21' $Application = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe' $Title = 'PowerShell сообщает' $Text = 'Привет мир! Я свободен!' $Logo = 'C:\Windows\System32\@WindowsHelloFaceToastIcon.png' $Hero = 'C:\Windows\Web\Wallpaper\Theme1\img4.jpg' $Audio = 'ms-winsoundevent:Notification.Reminder' [xml] $Xml = @" <toast launch="app-defined-string"> <visual> <binding template="ToastGeneric"> <text>$Title</text> <text>$Text</text> <image src="$Logo" placement="appLogoOverride" hint-crop="circle" /> <group> <subgroup> <text hint-style="captionSubtle" hint-align="right">$ProtocolName</text> <text hint-style="captionSubtle" hint-align="right">iNNOKENTIY21 on forum.ru-board.com</text> </subgroup> </group> <image src="$Hero" placement="hero"/> </binding> </visual> <actions> <action arguments = "$ProtocolName`:" content = 'Открыть в блокноте' activationType="protocol" /> </actions> <audio src="$Audio" /> </toast> "@ New-ToastNotification -Application $Application -Xml $Xml Показать уведомления от имени Windows PowerShell с шаблоном $Xml .NOTES Author: iNNOKENTIY21 #> param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string] $Application, [Parameter(Mandatory)] [ValidateNotNull()] [xml] $Xml ) [void] [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] [void] [Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] [void] [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] $XmlDoc = [Windows.Data.Xml.Dom.XmlDocument]::new() $XmlDoc.LoadXml($Xml.OuterXml) $Toast = [Windows.UI.Notifications.ToastNotification]::new($XmlDoc) [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($Application).Show($Toast) } #### Пример использования ###################################################### $ProtocolName = 'iNNOKENTIY21' $Application = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe' $Title = 'PowerShell сообщает' $Text = 'Привет мир! Я свободен!' $Logo = 'C:\Windows\System32\@WindowsHelloFaceToastIcon.png' $Hero = 'C:\Windows\Web\Wallpaper\Theme1\img4.jpg' $Audio = 'ms-winsoundevent:Notification.Reminder' # [xml] $Xml = Get-Content ".\template-01.xml" [xml] $Xml = @" <toast launch="app-defined-string"> <visual> <binding template="ToastGeneric"> <text>$Title</text> <text>$Text</text> <image src="$Logo" placement="appLogoOverride" hint-crop="circle" /> <group> <subgroup> <text hint-style="captionSubtle" hint-align="right">$ProtocolName</text> <text hint-style="captionSubtle" hint-align="right">iNNOKENTIY21 on forum.ru-board.com</text> </subgroup> </group> <image src="$Hero" placement="hero"/> </binding> </visual> <actions> <action arguments = "$ProtocolName`:" content = 'Открыть в блокноте' activationType="protocol" /> </actions> <audio src="$Audio" /> </toast> "@ New-Protocol -ProtocolName $ProtocolName -Force | New-ShellOpenCommand -ShellOpenCommand 'notepad.bat' -Force Set-ShowInActionCenter -Application $Application -State Enabled New-ToastNotification -Application $Application -Xml $Xml ################################################################################ |
|