Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Командлет в качестве значения переменной (http://forum.oszone.net/showthread.php?t=300092)

maslinaV 21-05-2015 11:28 2509742

Командлет в качестве значения переменной
 
Столкнулся с такой проблемой, например нужно получить список служб

Код:

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 2509744

Зачем ставить "" - кавычки?

$a=get-service a*

&$a - Убрать.

Georgio 21-05-2015 11:46 2509752

Код:

$a="get-service a*"
$a
write-host ---------------
Invoke-Expression $a


maslinaV 21-05-2015 13:03 2509781

оба сообщения работают, немного разное отображение информации при выполнении, так что можно выбрать при написании скрипта, в зависимости от желания

Код:

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 2509808

Код:

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 2509817

Цитата:

Цитата maslinaV
Код:

$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 2509848

Вот мой ответ на вопрос в самом начале

Код:

clear
$a={get-service a*}
$a
write-host ---------------
&$a

Фигурные скобки вместо кавычек

greg zakharov 21-05-2015 15:59 2509875

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 2511120

Цитата Georgio:
Цитата:

Или у Вас теоретическая разработка? »

да

Цитата Georgio:
Цитата:

Можно даже и переменную не вводить, если, конечно, она не будет задействована в дальнейшем »
для этого и разбирается скрипт

Цитата greg zakharov:
Цитата:

переменная $a становится "контейнером" для скрипт-блока; чтобы переменная хранила результат не нужно изобретать колесо заново, достаточно записи: »
Спасибо за пояснение, но человек который объяснял это, совсем по другому строит написание скрипта, и не вдавался в такие подробности,а я учусь разбирать такие скрипты и мне свойственно так писать, у меня нет опыта и глубоких знаний power shell


Время: 04:46.

Время: 04:46.
© OSzone.net 2001-