Создать папку автозагрузки - Windows

Я пишу много скриптов для управления компьютерами в моей компании. Мне часто нужно добавить ярлыки в личную папку автозагрузки пользователей (без GPO).

В Windows 8/8.1 по умолчанию нет личной папки автозагрузки.
Ее расположение — C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\.

Эту папку легко создать, но для локализации имени в ней нужен файл desktop.ini с правильным содержимым (иначе на любом языке отображается «Автозагрузка»).

Каков "официальный" способ создать эту папку?
Или как можно добавить что-то в нее?
Я бы предпочел PowerShell или пакетную команду, но любой надежный способ подойдет.


person Gregory MOUSSAT    schedule 22.11.2014    source источник


Ответы (2)


Я думаю, вы можете что-то сделать с ComObject для этой специальной папки:

$startup = (New-Object -ComObject Shell.Application).NameSpace(0x07)

Кстати, если я ввожу shell:startup в поле запуска (Win+R) в моей системе Win 8.1, он направляет меня в мою личную папку автозагрузки (C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup).

person Baldwin D.    schedule 23.11.2014
comment
У пользователей Win8 и Win2012 нет папки автозагрузки до тех пор, пока программа не создаст ее (или, может быть, она предварительно создана / предустановлена. Но со стандартной Windows папка автозагрузки отсутствует). В этом случае shell:startup ведет в никуда и не создает папку. - person Gregory MOUSSAT; 24.11.2014
comment
Команда, которую вы дали, работает отлично. Проверено на Win8 и Win2012. Когда папка запуска отсутствует, она создается немедленно. Большое спасибо ! - person Gregory MOUSSAT; 24.11.2014

Насколько я знаю, нет надежного способа сделать это.

Вы можете получить путь с помощью [environment]::getfolderpath("Startup"), но возвращаемая строка будет пустой, если папка не была создана. И я не знаю ни одной записи API для ее создания.

Поэтому вам нужно создать его вручную:

  1. проверьте, возвращает ли что-нибудь предыдущая команда (если да, просто создайте ярлык)
  2. создайте себе папку автозагрузки. Используйте [environment]::getfolderpath("StartMenu") и добавьте \startup к пути
  3. затем создайте файл desktop.ini и заполните его самостоятельно
  4. и обновите реестр HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders (я не проверял, правильно ли это место. [environment]::getfolderpath("Startup") должно возвращать правильное значение)

ОБНОВЛЕНИЕ: я только что нашел SHGetKnownFolderPath API, который позволяет при необходимости создать нужную папку (с dwFlags). Я не силен в PowerShell, поэтому не знаю, как это назвать. Может быть, кто-то может дать лучший ответ.

person Bernad MAVISSU    schedule 23.11.2014
comment
SHGetKnownFolderPath кажется правильным средством для этого. Я пытаюсь использовать его из PowerShell, но не нахожу, как это сделать. Я думаю, что я должен открыть новый вопрос. - person Gregory MOUSSAT; 23.11.2014