Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

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
 
################################################################################

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 11:53 13-09-2020
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru