Подтвердить что ты не робот

Как запустить PowerShell script при запуске компьютера?

У меня есть сценарий PowerShell, который контролирует папку с изображениями. Мне нужно найти способ автоматического запуска этого скрипта после запуска компьютера.

Я уже попробовал следующие методы, но не смог заставить его работать.

  1. Используйте msconfig и добавьте сценарий PowerShell при запуске, но я не могу найти сценарий PowerShell в этом списке.

  2. Создайте ярлык и поместите его в папку автозагрузки. Неудачно.

    %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
    

    или же

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
    

    Вот мой скрипт PowerShell:

    $folder = "C:\\Doc\\Files"
    $dest = "C:\\Doc\\Files\\images"
    $filter = "*.jpg"
    
    $fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{
        IncludeSubDirectories=$false
        NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite'
    }
    
    $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
    
        Start-Sleep -s 10
        Move-Item -Path C:\Doc\Files\*.jpg C:\Doc\Files\images
    }
    
  3. Я также попытался добавить основную задачу с помощью taskschd.msc. Это все еще не работает.

    Вот что я нашел, и, возможно, это поможет отладить его.

    Если я открываю окно PowerShell и запускаю там скрипт, он работает. Но если я запускаю его в командной строке,

    powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
    

    Она не будет работать. Я не уверен, что это проблема разрешения или что-то еще.

    Кстати, у меня установлен PowerShell 3.0, и если я наберу $ host.version, он покажет 3 там. Но мой powershell.exe, похоже, все еще v1.0.

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    
4b9b3361

Ответ 1

Наконец-то я получил скрипт PowerShell для автоматического запуска при каждом запуске. Вам нужно будет создать два файла: первый - это скрипт Powershell (например, script.ps1), а второй - файл .cmd, который будет содержать команды, которые будут выполняться в командной строке (например, startup.cmd).

Второй файл - это то, что нужно выполнить, когда компьютер запускается, и простое копирование .ps1 в папку автозагрузки не сработает, потому что это на самом деле не выполняет скрипт - он только открывает файл с помощью Блокнота. Вам необходимо выполнить .cmd, который сам будет выполнять .ps1 с помощью PowerShell. Хорошо, достаточно болтовни и на ступеньках:

  1. Создайте скрипт .ps1 и поместите его в папку. Я положил его на свой рабочий стол для простоты. Путь будет выглядеть примерно так:

C:\Users\<имя_пользователя>\Desktop\script.ps1

  1. Создайте файл .cmd и поместите его в

C:\Users\<имя_пользователя>\AppData\Roaming\Microsoft\Windows\Меню Пуск\Programs\Автозагрузка\startup.cmd

При этом файл cmd будет запускаться каждый раз при запуске. Вот ссылка на то, как создать файл .cmd, если вам нужна помощь.

  1. Откройте файл .cmd в текстовом редакторе и введите следующие строки:
PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell C:\Users\<user_name>\Desktop\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1

Это сделает две вещи:

  1. Установите Политику выполнения вашей PowerShell на Неограниченный. Это необходимо для запуска сценариев, иначе PowerShell не сделает этого.
  2. Используйте PowerShell для выполнения сценария .ps1, найденного по указанному пути.

Этот код специально для PowerShell v1.0. Если вы используете PowerShell v2.0, он может немного отличаться. В любом случае, проверьте этот источник для кода .cmd.

  1. Сохраните файл .cmd

Теперь, когда у вас есть файлы .ps1 и .cmd по соответствующим путям и со сценарием для каждого, все готово.

Ответ 2

Вы можете настроить его как запланированную задачу и задать триггер задачи "При запуске"

Ответ 3

Я создаю ярлык, который я размещаю в shell: startup.

Ярлык имеет следующее:

Цель: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:\scripts\script.ps1"

(заменив скрипты \scripts.ps1 тем, что вам нужно)

Начать вход: C:\scripts

(замена скриптов на папку с script)

Ответ 4

Скопируйте ps1 в эту папку и при необходимости создайте его. Он будет запускаться при каждом запуске (до входа пользователя в систему).

C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup

Также это можно сделать с помощью GPEDIT.msc, если он доступен в вашей ОС (более низкая ОС, возможно, нет).

Ответ 5

У меня есть script, который также запускает наблюдателя файловой системы, но после закрытия окна script наблюдатель умирает. Он будет работать весь день, если я запустил его из окна powershell и оставил его открытым, но в тот же момент, когда я закрою его, script перестает делать то, что он должен. Вам нужно запустить script и оставить его открытым. Я попробовал множество способов сделать это, но тот, который действительно работал, был от http://www.methos-it.com/blogs/keep-your-powershell-script-open-when-executed

param ( $Show )
if ( !$Show ) 
{
    PowerShell -NoExit -File $MyInvocation.MyCommand.Path 1
    return
}

Вставка этого в начало script - вот что заставило его работать.
Я запускаю script из командной строки с помощью

powershell.exe -noexit -command "& \path\to\script.ps1"

Ответ 6

enter image description here Относительно короткий путь к указанию скрипта Powershell для выполнения при запуске в Windows может быть:

  1. Нажмите кнопку Windows (кнопка Windows + r)
  2. Введите это:

оболочка: запуск

  1. Создать новый ярлык правой кнопкой мыши и в контекстном меню выбрать пункт меню: Новый => Ярлык

  2. Создайте ярлык для вашего скрипта, например:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Команда "C:\Users\someuser\Documents\WindowsPowerShell\Scripts\somesscript.ps1"

Обратите внимание на использование -NoProfile. Если вы много инициализируете в файле $ profile, неэффективно загружать его, чтобы просто запустить скрипт Powershell. -NoProfile пропустит загрузку файла вашего профиля и будет разумно указать, если нет необходимости запускать его перед выполнением сценария Powershell.

Здесь вы видите такой ярлык, созданный (файл .lnk со значком Powershell с символом ярлыка):

Ответ 7

Это сработало для меня. Создано запланированное задание с подробностями ниже: Триггер: при запуске

Действия: Программа/скрипт: powershell.exe Аргументы: -file

Ответ 8

Вы можете увидеть сценарии и многое другое, запланированное для запуска в диспетчере задач на вкладке "Автозагрузка". Вот как добавить новый элемент в запланированные элементы автозагрузки.

Во-первых, откройте проводник в оболочке: местоположение запуска с помощью кнопки start => run:

оболочка проводника: запуск

Щелкните правой кнопкой мыши в этой папке и в контекстном меню выберите новый ярлык. Введите следующее:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "C:\myfolder\somescript.ps1"

Это запустит сценарий Powershell без запуска сценариев $ profile для более быстрого выполнения. Это обеспечит запуск сценария powershell.

Папка оболочки: автозагрузка находится в:

$ ENV: APPDATA\Microsoft\Windows

А потом в папку:

Пуск\Programs\Автозагрузка

Как обычно, Microsoft делает некоторые вещи несколько громоздкими, когда путь содержит пробелы, поэтому вам нужно поместить кавычки вокруг полного пути или просто нажать вкладку внутри Powershell, чтобы в этом случае выполнить автозаполнение.

Ответ 9

Вы можете создать задачу планировщика, которая запускается автоматически при запуске, даже если пользователь не вошел в систему:

schtasks /create /tn "FileMonitor" /sc onstart /delay 0000:30 /rl highest /ru system /tr "powershell.exe -file C:\Doc\Files\FileMonitor.ps1"

Запустите эту команду один раз из PowerShell от имени администратора, и она создаст для вас задачу по расписанию. Вы можете перечислить задачу следующим образом:

schtasks /Query /TN "FileMonitor" /V /FO List

или удали его

schtasks /Delete /TN "FileMonitor"

Ответ 10

Убедитесь, что когда вы хотите, чтобы PowerShell запускался автоматически/в фоновом режиме/неинтерактивно, рекомендуется указать параметры -ExecutionPolicy Bypass в PowerShell.exe

PowerShell.exe -ExecutionPolicy Bypass