Вопрос или проблема
Существует ли способ взаимодействовать с PowerShell так же, как с командной строкой?
С командными файлами cmd/bat вы можете перетащить файл/папку на сам скрипт, и он будет оценен как параметр.
Править:
@echo off
cls
echo %1
pause
Этот код приведет к следующему, когда вы перетащите файл на файл скрипта:
Файлы .ps1 по умолчанию связаны с блокнотом, чтобы предотвратить непреднамеренный запуск, как это можно сделать с .bat, .cmd. Это вопрос управления рисками. Вы можете изменить это обычным способом через проводник, но не рекомендуется.
Если вы хотите перетащить .bat, .cmd на хост PowerShell и ожидать его выполнения, то нет, PowerShell это не сделает. Он не предназначен для этого. Вам нужно вызывать cmd.exe из PowerShell, чтобы запускать файлы .bat и .cmd.
Вы также можете добавить ярлык PowerShell в папку “Отправить”. Щелкните правой кнопкой мыши по вашему скрипту, выберите “Отправить” и выберите созданный вами ярлык PowerShell, или вы можете взломать реестр, чтобы добавить PowerShell в основное контекстное меню проводника и избежать шага “Отправить”, но это требует гораздо больше работы.
В любом случае, это не является стандартной функциональностью, и вам нужно будет создать что-то для автоматического запуска PowerShell exe, когда вы перетаскиваете или отправляете что-то ему.
Вы можете по умолчанию перетаскивать и бросать файл непосредственно в консоль PowerShell или в панель скриптов ISE, если они запущены с использованием текущей учетной записи пользователя. В консоли просто нажмите Enter, в ISE нажмите F5 (или нажмите большую зеленую кнопку).
Как указал @LotPings, этот вопрос был задан для Windows 7, но ответ @zdan по-прежнему актуален для текущих версий Windows и PowerShell.
- Зажмите Shift и щелкните правой кнопкой мыши по файлу скрипта ps1 и выберите
Копировать путь
из контекстного меню. - Создайте ярлык в проводнике Windows (В проводнике щелкните правой кнопкой мыши -> создать -> ярлык).
- Введите
pwsh
и при необходимости добавьте-noexit
-noprofile
, затем-file "путь-до-scrip.ps1"
, где вы можете использовать путь, который вы скопировали на шаге 0. Если вы вводите путь самостоятельно, убедитесь, что вы используете кавычки. - Если вы допустили опечатку, щелкните правой кнопкой мыши по файлу ярлыка и выберите “Свойства”.
Не добавляйте “%1” или args[0], эти переменные будут доступны в скрипте ps1.
Полный ввод может выглядеть так:
"C:\Program Files\PowerShell\7\pwsh.exe" -noexit -noprofile -file "C:\path\script.ps1"
Если вы не хотите, чтобы окно было видно, добавьте -WindowStyle hidden
к команде. (но окно cmd на мгновение вспыхнет)
Ответ или решение
Запуск скрипта PowerShell с помощью перетаскивания файлов на его иконку требует выполнения нескольких шагов, так как файлы .ps1 по умолчанию связаны с блокнотом, а не с выполнением скриптов. Вот подробная инструкция, как это сделать:
-
Создайте ярлык для PowerShell:
- Найдите файл
pwsh.exe
(обычно он находится по путиC:\Program Files\PowerShell\7\
для версии PowerShell 7). - Щелкните правой кнопкой мыши на
pwsh.exe
и выберите "Создать ярлык".
- Найдите файл
-
Настройте ярлык:
- Щелкните правой кнопкой мыши на созданный ярлык и выберите "Свойства".
- В поле "Объект" добавьте необходимые параметры для выполнения скрипта. Например:
"C:\Program Files\PowerShell\7\pwsh.exe" -noexit -noprofile -file "C:\путь\к\скрипту.ps1"
- Убедитесь, что используете кавычки вокруг путей с пробелами.
-
utilizando drag-and-drop:
- Теперь, чтобы запускать ваш скрипт, вам нужно будет перетащить файл в ярлык. Для этого просто перекиньте нужный файл на иконку ярлыка, и PowerShell выполнит ваш скрипт с переданным файлом в качестве параметра.
-
Получение параметров в скрипте:
- В самом .ps1 скрипте вы можете получить путь к переданному файлу, используя переменную
$args
. Например:$путьКФайлу = $args[0] Write-Output "Вы передали файл: $путьКФайлу"
- В самом .ps1 скрипте вы можете получить путь к переданному файлу, используя переменную
-
Примечания:
- Не добавляйте
%1
илиargs[0]
в строку ярлыка, так как эти переменные будут автоматически доступны в скрипте. - Если вы хотите, чтобы окно PowerShell не закрывалось после выполнения скрипта, используйте
-noexit
. - Чтобы скрыть всплывающее окно, можно добавить параметр
-WindowStyle Hidden
, однако имейте в виду, что на мгновение окно командной строки может появиться.
- Не добавляйте
Теперь вы сможете легко запускать ваши скрипты PowerShell, просто перетаскивая файлы на соответствующий ярлык.