Свойство PowerShell Count не может быть найдено для этого объекта - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь посчитать несколько строк, выводимых командой. В основном все строки, заканчивающиеся на «Y» в этом примере.

Fist Захват результатов команды:

PS> $ItsAgents = tacmd listSystems -n Primary:SomeHost:NT
PS> $ItsAgents
Managed System Name      Product Code Version     Status
Primary:SomeHost:NT NT           06.30.07.00 Y
SomeHost:Q7         Q7           06.30.01.00 N

Теперь посчитайте онлайн:

PS> $AgentCount = ($ItsAgents | Select-String ' Y ').Count
PS> $AgentCount
1

Теперь, когда все работает, как я ожидаю. Поэтому я добавил это в свой сценарий так:

$ItsAgents = tacmd listSystems -n $agent
Write-Host $ItsAgents
$BeforeCount = ($ItsAgents | Select-String ' Y ').Count

И когда скрипт запускается (под Set-StrictMode), я получаю:

The property 'Count' cannot be found on this object. Verify that the
property exists.
At Y:\Scripts\newMoveAgents.ps1:303 char:7
+             $BeforeCount = ($ItsAgents | Select-String ' Y ').Count
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], PropertyNotFoundException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

Write-Host выводит вменяемые результаты, поэтому $agent настроен правильно и команда tacmd работает нормально. Так почему же он не работает в сценарии, но работает в командной строке?

1 Ответ

0 голосов
/ 07 ноября 2018

Используйте оператор @(), чтобы вывод всегда был массивом:

$BeforeCount = @($ItsAgents | Select-String ' Y ').Count

Оператор подвыражения массива создает массив, даже если он содержит ноль или один объект. ( Документы Microsoft )

Примечание: Afaik должен работать одинаково как в скрипте, так и внутри консоли. Возможно, ваши команды выдают другой вывод, когда версия консоли возвращает результаты 2+, но по какой-то причине версия сценария дает только 1 или 0 результатов, что может быть причиной отсутствия свойства Count.

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