Я копался в этом некоторое время, но я не мог понять, как это работает. Что мне нужно это:
- Уметь запускать командный файл
- Пакетный файл должен иметь параметры
- Параметры должны быть переданы из командного файла в сценарий PowerShell, который находится в том же файле
Зачем мне это нужно? Потому что мне нужно запустить простой командный файл, чтобы сделать что-то, но мне нужны расширенные функциональные возможности, которые работают только из PowerShell. Конкретно: мне нужно какое- SaveFileDialog
то приложение.
Вот то, что у меня есть сейчас, где я удалил сложные части SaveFileDialog
и оставил простую партию + часть PowerShell:
<# :
@echo off
setlocal
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF
#>
Write-Host "Hello, I'm PowerShell!"
Если я ставлю все это в пакетном файле, скажем, myfile.bat
. Он запускается и вызывает PowerShell и записывает это сообщение.
Мой вопрос / запрос : как я могу запустить myfile.bat param1 param2 param3
и передать эти аргументы / параметры в мой скрипт PowerShell? Я действительно ценю минимальный пример, который просто печатает параметры через powershell write-host
.
Пожалуйста, не стесняйтесь спрашивать более подробную информацию. Спасибо!
источник
Передача нескольких аргументов в сценарий PowerShell с помощью пакетного сценария
Вы можете использовать что-то похожее на метод ниже, так как я смог получить пакетный сценарий для передачи аргументов сценарию PS с использованием этого синтаксиса.
Он должен создать динамический сценарий PS вверху (
:DynamicPSScriptBuild
подпрограмма), и он удалит его, если он уже существует, а также удалит его, как только он завершит обработку всех выполнений.Мне пришлось использовать PS,
-file
а не-iex
(причина, по которой файл PS1 должен существовать, и его динамическая сборка), но он работает, как и ожидалось, когда я тестировал его, передавал соответствующие аргументы скрипту один за другим, причем каждый аргумент был одна итерация выполнения сценария PS.Я не был уверен, что вам нужно, чтобы все аргументы передавались в сценарий PS один за другим, или все передавались одновременно, или как ваша логика сценария PS будет обрабатывать несколько аргументов, передаваемых ему во время одного и того же выполнения, но, возможно, это даст вам достаточно подробно, чтобы настроить соответственно.
Часть приведенного ниже сценария
FOR %%A IN ("Hello I'm PowerShell!", "Goodbye I'm Leaving", "Come with it and get some more"
будет частью, которую вы помещаете каждую строку для использования в качестве аргумента, передаваемого сценарию PS один за другим на каждой итерации выполнения, где каждое значение строки находится в двойных кавычках и разделено запятыми.Пример скрипта
(Возможно, вы захотите включить
@ECHO OFF
и вынутьpause
команду, так как я использовал их, чтобы показать все на итерации, чтобы убедиться, что все работает как положено)Дополнительные ресурсы
источник
Передайте переменную пакета напрямую в строку Powershell из файла пакета. Чтобы проверить это, я передал
Write-Host
командлет в качестве аргумента.foo.bat
:Бери
.bat
с аргументом,Выход:
источник