kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 bwerks
bwerks
Вопрос

Powershell: Как передать переменные для переключения параметров при вызове powershell из командной строки?

Обычно, если вы хотите отложить спецификацию параметра switch на некоторую переменную, вы можете передать выражение в параметр switch, как в случае с параметром WhatIf.

test.ps1

param ( [string] $source, [string] $dest, [switch] $test )
Copy-Item -Path $source -Destination $dest -WhatIf:$test

Это обеспечивает большую гибкость при работе с переключателями. Однако когда вы вызываете powershell с помощью cmd.exe или чего-то подобного, получается что-то вроде этого:

D:\test>powershell -file test.ps1 -source test.ps1 -dest test.copy.ps1 -test:$true

D:\test\test.ps1 : Cannot process argument transformation on
parameter 'test'. Cannot convert value "System.String" to type "System.Manageme
nt.Automation.SwitchParameter", parameters of this type only accept booleans or
 numbers, use $true, $false, 1 or 0 instead.
At line:0 char:1
+  <<<<
    + CategoryInfo          : InvalidData: (:) [test.ps1], ParentContainsError
   RecordException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,test.ps1

Однако тот же результат появляется при передаче -test:true и -test:1. Почему это не работает? Разве система преобразования типов Powershell не должна автоматически распознавать эти строки как конвертируемые в bool или switch и преобразовывать их?

Означает ли это, что при вызове сценариев powershell из какой-либо другой системы (например, системы сборки) необходимо создавать сложные структуры управления потоком, чтобы определить, включать или нет переключатель в командную строку или опустить его? Это кажется утомительным и чреватым ошибками, что наводит меня на мысль, что это не так.

31 2012-07-06T18:24:43+00:00 2
 bwerks
bwerks
Редактировал вопрос 6-го июля 2012 в 6:48
Программирование
powershell
parameters
type-conversion
cmd
jon Z
jon Z
8-го июля 2012 в 6:21
2012-07-08T18:21:50+00:00
Дополнительно
Источник
Редактировать
#16623991

Это поведение было зарегистрировано как ошибка на connect. Это обходной путь:

powershell ./test.ps1 -source test.ps1 -dest test.copy.ps1 -test:$true
25
0
Mike Shepard
Mike Shepard
6-го июля 2012 в 7:57
2012-07-06T19:57:18+00:00
Дополнительно
Источник
Редактировать
#16623990

Используйте свойство IsPresent коммутатора. Пример:

function test-switch{
param([switch]$test)
  function inner{
    param([switch]$inner_test)
    write-host $inner_test
  }
  inner -inner_test:$test.IsPresent
}
test-switch -test:$true
test-switch -test
test-switch -test:$false

True
True
False

BTW, я использовал функции, а не скрипт, чтобы было проще тестировать.

Mike Shepard
Mike Shepard
Редактировал ответ 6-го июля 2012 в 8:12
13
0
Похожие сообщества 2
Powershell Rus
Powershell Rus
873 пользователей
Не спрашивайте, можно ли спросить. Можно, но только про Powershell. Для оффтопа есть https://t.me/ps_unrelated Если у вас что-то не выходит: 1. Опишите, что делаете (можно приложить код в pastebin) 2. Расскажите, что ожидаете получить 3. Что пошло не так?
Открыть telegram
PowerShell Pro
PowerShell Pro
163 пользователей
Чат, посвящённый языку PowerShell Правила чата: нет оффтопу, спаму, оскорблениям. Будьте вежливы к коллегам. Приятного общения! Книги можно найти по тегу #books
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 4 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией