почему выполнение командной строки дает другой результат выполнения сценария в powershell - PullRequest
2 голосов
/ 18 октября 2019

Выполнение следующей команды в командной строке powershell работает так, как я и ожидал:

Get-Service "my_service"
*output*
 Status   Name               DisplayName                           
------   ----               -----------                           
Running  my_service          My_SERVICE   

Однако, если сделать ps1 scritp следующим образом, мой вывод не соответствует ожиданиям.

$my_service_check = Get-Service "my_service"
echo "My Service Status: $my_service_check"

*output*
my_service:  System.ServiceProcess.ServiceController 

почему скрипт не возвращает тот же вывод, что и команда?

Ответы [ 3 ]

2 голосов
/ 18 октября 2019

Вот простой:

echo "My Service Status:" $my_service_check
1 голос
/ 18 октября 2019

Это больше связано с тем, где у вас есть кавычки в операторе echo.

В вашем примере $ my_service_check является System.ServiceProcess.ServiceController объектом - это не строкаэто просто содержит данные, которые вы видите. Вы можете вызывать методы для этого, например: $ my_service_check.Start ().

Теперь, если у вас есть

echo "My Service Status:" $my_service_check

PowerShell достаточно умен, чтобы понять, что вы хотите вывести читабельный человекомданные в этом объекте - и вы получите симпатичные результаты.

Поскольку у вас есть

echo "My Service Status: $my_service_check"

PowerShell отображает сам объект в виде строки - что почти никогда не соответствует вашим ожиданиям.

1 голос
/ 18 октября 2019

Использование приведенного ниже сценария позволяет выводить результаты так, как вы хотите:

$myService = Get-Service #SERVICE_NAME

Write-Host "My service: " $myService

Pause

Вывод:

Мой сервис: SERVICE_NAME

Нажмите Enter дляCotinue ...:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...