Показать полную графическую версию : [решено] Командлет в качестве значения переменной
maslinaV
21-05-2015, 11:28
Столкнулся с такой проблемой, например нужно получить список служб
clear
$a="get-service"
$a
write-host ---------------
&$a
Но вот использовать подстановочный знак не получается,
clear
$a="get-service a*"
$a
write-host ---------------
&$a
get-service a*
---------------
& : Имя "get-service a*" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность
написания имени, а также наличие и правильность пути, после чего повторите попытку.
D:\!_Scripts\set for comandlet variable.ps1:9 знак:2
+ &$a
+ ~~
+ CategoryInfo : ObjectNotFound: (get-service a*:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Это в принципе невозможно или здесь я допустил ошибку в написании переменной ?
Спасибо.
Зачем ставить "" - кавычки?
$a=get-service a*
&$a - Убрать.
$a="get-service a*"
$a
write-host ---------------
Invoke-Expression $a
maslinaV
21-05-2015, 13:03
оба сообщения работают, немного разное отображение информации при выполнении, так что можно выбрать при написании скрипта, в зависимости от желания
clear
write-host ---------------
write-host "get-service a*"
$a=get-service a*
# Переменная $a выведет название команды
write-host ---------------
# Обратимся к переменной $a, чтобы она передала команде, которая является
# значением этой переменной, - управление, и выдала результат
$a
# Командлет Invoke-Expression анализирует или выполняет указанную строку как команду и
# возвращает результат выражения и команды.
write-host ---------------
clear
write-host ---------------
write-host "get-service a*"
#######################
$a="get-service a*"
# Переменная $a выведет название команды
write-host ---------------
# Обратимся к переменной $a, чтобы она передала команде, которая является
# значением этой переменной, - управление, и выдала результат
# Командлет Invoke-Expression анализирует или выполняет указанную строку как команду и
# возвращает результат выражения и команды.
Invoke-Expression $a
write-host ---------------
maslinaV
21-05-2015, 13:53
clear
write-host ---------------
write-host "get-service a*"
#
$a={get-service a* | sort-object status}
# заключаем выражение в фигурные скобки
# передаем выходные данные переменной
# Переменная $a выведет результат работы командлета на другой командлет
# Таким образом, результат выполнения команды get-service a* будет осортирован по колонке status
write-host ---------------
# Обратимся к переменной $a, чтобы она передала команде, которая является
# значением этой переменной, - управление, и выдала результат
&$a
# возвращает результат выражения и команды.
write-host ---------------
$a={get-service a* | sort-object status}
# заключаем выражение в фигурные скобки
# <...>
write-host ---------------
# <...>
&$a
# <...>
write-host --------------- »
А зачем так сложно? Можно проще:
$a=get-service a* | sort-object status
write-host ---------------
$a
write-host ---------------
.
Можно даже и переменную не вводить, если, конечно, она не будет задействована в дальнейшем. Или у Вас теоретическая разработка:)?
maslinaV
21-05-2015, 15:15
Вот мой ответ на вопрос в самом начале
clear
$a={get-service a*}
$a
write-host ---------------
&$a
Фигурные скобки вместо кавычек
greg zakharov
21-05-2015, 15:59
maslinaV, видимо Вы не совсем понимаете, что такое скрипт-блок и чем он отличается от строки. Запись:$a = "get-service a*" означает, что переменной присваивается строка "get-service a*", а в случае$a = {get-service a*}переменная $a становится "контейнером" для скрипт-блока; чтобы переменная хранила результат не нужно изобретать колесо заново, достаточно записи: $a = get-service a*. Вам об этом уже говорили ранее. Ну и Get-Help Вам в помощь.
maslinaV
25-05-2015, 13:05
Цитата Georgio:
Или у Вас теоретическая разработка? »
да
Цитата Georgio:
Можно даже и переменную не вводить, если, конечно, она не будет задействована в дальнейшем »
для этого и разбирается скрипт
Цитата greg zakharov:
переменная $a становится "контейнером" для скрипт-блока; чтобы переменная хранила результат не нужно изобретать колесо заново, достаточно записи: »
Спасибо за пояснение, но человек который объяснял это, совсем по другому строит написание скрипта, и не вдавался в такие подробности,а я учусь разбирать такие скрипты и мне свойственно так писать, у меня нет опыта и глубоких знаний power shell
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.