Рейтинг:1

Как дополнительно указать параметры в Powershell?

флаг cn

Я переношу какой-то старый код из AutoHotkey «для смеха» и думаю, что наткнулся на непреднамеренную функцию, которую он имел...

Я хочу иметь возможность делать что-то вроде

$ws = "Свернуто"
$parameters = "/k каталог F:\" 
start-process cmd.exe ( $(if($parameters){"-argumentlist $parameters"}) )( $(if ($ws){"-windowystyle $ws"})) )

Но он никогда не «объединяет» их в одну команду «целостно» без также бросая их все в cmd.exe - я наивно надеюсь, что Powershell может, например, «поймать» сам WindowStyle и свернуть окно (в настоящее время он передается прямо в cmd.exe, который его игнорирует).

Я знаю, что немного злюсь, но я также изо всех сил пытаюсь найти правильные термины для поиска - about_parsing не помог, и миллионы примеров объединения строк тоже бесполезны - я действительно хочу, чтобы Powershell был свободен достаточно, чтобы позволить мне динамически переключаться со строк на параметры, что, как я предполагаю, где-то противоречит сознательному дизайнерскому решению...

Таким образом, альтернативой является набор операторов if для размещения различных перестановок параметров...

if ($ws -and -(не $parameters)) {start-process cmd.exe -windowystyle $ws}
if ($parameters -and -(not $ws)) {start-process cmd.exe -argumentlist $parameters}
if ($parameters -and $ws) {start-process cmd.exe -argumentlist $parameters -windowystyle $ws}
... до тошноты

Разве что у кого-то есть идеи получше?

Рейтинг:4
флаг tz

Часть проблемы с вашим примером «нравится» заключается в том, что он группирует все, что идет после cmd.exe и передать его Старт-Процесс как однострочный второй позиционный параметр, который список аргументов. Итак, вы эффективно используете это:

Start-Process -FilePath 'cmd.exe' -ArgumentList "-argumentlist /k dir F:\ -windowstyle Minimized"

разбрызгивание может помочь вам немного здесь. Вы можете использовать хеш-таблицу для динамического построения набора параметров, которые отправляются до того, как вы на самом деле вызовете Старт-Процесс. Например:

# инициализируем хеш-таблицу, которую мы будем использовать позже
# у которого есть все параметры, которые всегда будут использоваться.
# (также может быть пустым)
$startParams = @{
    Путь к файлу = 'cmd.exe'
}

# условно добавляем свой WindowStyle
если ($ws) {
    $startParams.WindowStyle = $ws
}

# условно добавьте свой ArgumentList
если ($ параметры) {
    $startParams.ArgumentList = $параметры
}

# запускаем функцию с splatted хэш-таблицей
Стартовый процесс @startParams
флаг cn
Вы легенда - спасибо, я знал, что это возможно, но просто не понял, в чем заключалось исправление. Прекрасно работает. Я понял, что $startParams.Wait = $true также работает (для параметров, которые на самом деле не имеют значения, но являются переключателями)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.