Get-Process не работает внутри класса [PowerShell] - PullRequest
3 голосов
/ 24 февраля 2020

Я пытаюсь запустить процессы в функции внутри класса, но ничего не происходит. Похоже, что компилятор игнорирует его, однако вне класса он работает отлично.

<# Works here #>
#Get-Process

class Test
{
    [void]TestFunction()
    {
        <# DOES NOT WORK HERE #>
        Get-Process
    }
}

[Test]$object = [Test]::new()
$object.TestFunction()


<# Works here #>
#Get-Process

PS Я использую PowerShell на macOS с VS Code

Ответы [ 2 ]

6 голосов
/ 24 февраля 2020

Это ничего не делает, потому что вы сказали, что ничего не делаете.

[void]TestFunction()
  1. void указывает на подавление любого объекта вывода.
  2. в методе не определен оператор возврата.

Вот рабочий пример:

class Test
{
    [System.Diagnostics.Process[]]TestFunction()
    {
        return Get-Process
    }
}

и нет необходимости сохранять результаты в промежуточной переменной.

3 голосов
/ 24 февраля 2020

Это происходит, так как классы работают не так, как обычный Powershell.

В методах классов никакие объекты не отправляются в конвейер, кроме тех, которые упомянуты в операторе return.

Таким образом, нужна переменная-член, которая хранит результат функции. Затем к выходу можно получить доступ через член или, скажем, распечатать с помощью write-host.

class Test
{
    $p =@()
    TestFunction()
    {
        $this.p=Get-Process # or get-process|write-host
    }
}

[Test]$object = [Test]::new()
$object.TestFunction()

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