Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Командлет в качестве значения переменной

Ответить
Настройки темы
PowerShell - [решено] Командлет в качестве значения переменной

Старожил


Сообщения: 252
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
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

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

Отправлено: 11:28, 21-05-2015

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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

$a=get-service a*

&$a - Убрать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:31, 21-05-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$a="get-service a*"
$a
write-host ---------------
Invoke-Expression $a
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:46, 21-05-2015 | #3


Старожил


Сообщения: 252
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
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 ---------------
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:03, 21-05-2015 | #4


Старожил


Сообщения: 252
Благодарности: 11

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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 ---------------

Отправлено: 13:53, 21-05-2015 | #5


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата 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 ---------------
.


Можно даже и переменную не вводить, если, конечно, она не будет задействована в дальнейшем. Или у Вас теоретическая разработка?

Отправлено: 14:26, 21-05-2015 | #6


Старожил


Сообщения: 252
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
clear
$a={get-service a*}
$a
write-host ---------------
&$a
Фигурные скобки вместо кавычек

Отправлено: 15:15, 21-05-2015 | #7


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


maslinaV, видимо Вы не совсем понимаете, что такое скрипт-блок и чем он отличается от строки. Запись:
Код: Выделить весь код
$a = "get-service a*"
означает, что переменной присваивается строка "get-service a*", а в случае
Код: Выделить весь код
$a = {get-service a*}
переменная $a становится "контейнером" для скрипт-блока; чтобы переменная хранила результат не нужно изобретать колесо заново, достаточно записи:
Код: Выделить весь код
$a = get-service a*
. Вам об этом уже говорили ранее. Ну и Get-Help Вам в помощь.

Последний раз редактировалось greg zakharov, 21-05-2015 в 16:06.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:59, 21-05-2015 | #8


Старожил


Сообщения: 252
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

да

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

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

Последний раз редактировалось maslinaV, 25-05-2015 в 13:16.


Отправлено: 13:05, 25-05-2015 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Командлет в качестве значения переменной

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Добавления значения к уже существующей системной переменной termitt Скриптовые языки администрирования Windows 28 16-01-2015 05:42
CMD/BAT - Присвоение значения переменной starav Скриптовые языки администрирования Windows 1 30-05-2013 09:23
MySQL - Хранение значения переменной в MySQL-базе ManHack Программирование и базы данных 7 11-07-2009 10:02
VBS/WHS/JS - Вывод значения переменной в сообщение la_vanille_ciel Программирование и базы данных 3 09-04-2008 11:55
php деление значения строковой переменной Guest Вебмастеру 4 14-10-2004 17:12




 
Переход