none
Как закрепить ярлыки в меню пуск с помощью powershell Windows 10 1903? RRS feed

  • Вопрос

  • До недавнего времени использовал скрипт формирования ярлыков в меню пуск вот такого содержания:

    ### Настройка меню пользователя. Запускать с правами и под учеткой пользователя после установленных программ (см. ниже список программ)
     # Просмотреть параметры $appname
     #(New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | Select-Object name, path | sort name
    
     #'shell:::{4234d49b-0245-4df3-b780-3893943456e1}' # Ярлыки панели пуск
     #'shell:::{D20EA4E1-3957-11d2-A40B-0C5020524153}' # Ярлыки панели пуск AdminTools
     
     ### Функция настройки (открепить, закрепить) стартового меню ###
    function set-StartMenu([string]$action, [string]$appname, $ids = 'shell:::{4234d49b-0245-4df3-b780-3893943456e1}'){
     switch($Action){
                "Pin"   {# Закрепить значки в стартовой панели
                        ((New-Object -Com Shell.Application).NameSpace($ids).Items() |
                         Where-Object {$_.Name -like $appname}).Verbs()  |
                          ?{$_.Name.replace('&','') -match 'Закрепить на начальном экране'} | %{$_.DoIt(); $exec = $true}
                        }
    
                "Unpin" {# Открепить значки от стартовой панели
                        ((New-Object -Com Shell.Application).NameSpace($ids).Items() |
                        Where-Object {$_.Name -match $appname}).Verbs()  |
                        ?{$_.Name.replace('&','') -match 'Открепить от начального экрана'} | %{$_.DoIt(); $exec = $true}
                        }
             "AllClear" {# Открепить все значки от начального экрана
                        ((New-Object -Com Shell.Application).NameSpace($ids).Items() |
                         Where-Object {$_.Name -like "*"}).Verbs()  |
                          ?{$_.Name.replace('&','') -match 'Открепить от начального экрана'} | %{$_.DoIt(); $exec = $true}
                        }
    
             "AdmTools" {# Закрепить значки в стартовой панели Средства администрирования
                        ((New-Object -Com Shell.Application).NameSpace($ids).Items() |
                         Where-Object {$_.Name -like "*"}).Verbs()  |
                          ?{$_.Name.replace('&','') -match 'Закрепить на начальном экране'} | %{$_.DoIt(); $exec = $true}
                          }
    
                default {Write-Error -Message "Ошибка параметра action, укажите Pin или Unpin" -ErrorAction Stop}
                
                }
    
    }
    # Очистить стартовое меню
    set-StartMenu -action "AllClear"
    
    #set-StartMenu -action "UnPin" -appname "Microsoft Edge*"
    
    # Добавить зарегистрированное приложение в стартовое меню
    set-StartMenu -action "Pin" -appname "Internet Explorer*"
    set-StartMenu -action "Pin" -appname "Microsoft Edge*"
    set-StartMenu -action "Pin" -appname "Проводник"
    set-StartMenu -action "Pin" -appname "Double Commander*"
    set-StartMenu -action "Pin" -appname "Этот компьютер"
    set-StartMenu -action "Pin" -appname "LibreOffice"
    set-StartMenu -action "Pin" -appname "LibreOffice calc"
    set-StartMenu -action "Pin" -appname "LibreOffice Writer"
    set-StartMenu -action "Pin" -appname "Блокнот"
    set-StartMenu -action "Pin" -appname "Панель управления"
    set-StartMenu -action "Pin" -appname "Подключение к удаленному рабочему столу"
    set-StartMenu -action "Pin" -appname "Выполнить"
    set-StartMenu -action "Pin" -appname "Командная строка"
    set-StartMenu -action "Pin" -appname "Windows PowerShell"
    set-StartMenu -action "Pin" -appname "Windows PowerShell Ise"
    set-StartMenu -action "Pin" -appname "Управление печатью"
    set-StartMenu -action "Pin" -appname "Монитор ресурсов"
    set-StartMenu -action "Pin" -appname "Очистка диска"
    # Закрепить значки в стартовой панели Средства администрирования
    #set-StartMenu -action "AdmTools" -ids 'shell:::{D20EA4E1-3957-11d2-A40B-0C5020524153}'
    

    После установки Windows 10 1903 - данный скрипт перестал работать. Если проверить, что изменилось, то можно увидеть

    $clsd1 = "{4234d49b-0245-4df3-b780-3893943456e1}"
    $ids = "shell:::$clsd1"
    ((New-Object -Com Shell.Application).NameSpace($ids).Items() |  Where-Object {$_.Name -like "LibreOffice"}).verbs()
    Application Parent Name                           
    ----------- ------ ----                           
                       Открыть                        
                       Перейти к расположению файла   
                       Открыть в новом окне           
                       Запуск от имени администратора
                       Uninstall                      
                       &Открепить от начального экрана
                       Создать &ярлык    

     Пропало значение "Закрепить на начальном &экране"

    Из за этого приложения не прикрепляются, т.е участок кода не работает:

    ...
    ?{$_.Name.replace('&','') -match 'Закрепить на начальном экране'} | %{$_.DoIt(); $exec = $true} ...
    У кого нибудь есть альтернативные наработки или функции (не сильно замудренные) по работе с меню пуск в powershell? Поделитесь.


    21 июня 2019 г. 12:07

Все ответы

  • возможно это как то связано с тем что $ids уже закреплен и просто нужно сменить прикладуху?

    The opinion expressed by me is not an official position of Microsoft

    21 июня 2019 г. 12:21
    Модератор
  • возможно это как то связано с тем что $ids уже закреплен и просто нужно сменить прикладуху?

    The opinion expressed by me is not an official position of Microsoft

    Закреплен руками, если открепить, то выглядит так:

    Application Parent Name                           
    ----------- ------ ----                           
                       Открыть                        
                       Перейти к расположению файла   
                       Открыть в новом окне           
                       Запуск от имени администратора
                       Uninstall                     
                       Создать &ярлык

    21 июня 2019 г. 12:36
  • Clear-Host
    ## Открыть свойства всех сетевых устройств
     
    $clsd1 = "{992CFFA0-F557-101A-88EC-00DD010CCC48}"
    $ids = "shell:::$clsd1"
    ((New-Object -Com Shell.Application).NameSpace($ids).Items() |  Where-Object {$_.Name -like '*' }).verbs() |
    Where-Object {$_.Name.replace('&','') -match 'Свойства'} | ForEach-Object{$_.DoIt(); $exec = $true}
    Пока нет отвечающих, посмотрите, как быстро открыть свойства сетевых соединений. Можно по шаблону ...
    $_.Name -like '*' 
    выбрать конкретный интерфейс

    21 июня 2019 г. 12:52