PDA

Показать полную графическую версию : [решено] Командлет в качестве значения переменной


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



Это в принципе невозможно или здесь я допустил ошибку в написании переменной ?
Спасибо.

Kazun
21-05-2015, 11:31
Зачем ставить "" - кавычки?

$a=get-service a*

&$a - Убрать.

Georgio
21-05-2015, 11:46
$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 ---------------

Georgio
21-05-2015, 14:26
$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