Как я могу передать несколько массивов в значение в функции PowerShell - PullRequest
0 голосов
/ 22 февраля 2019

Ниже функции я хочу передать несколько значений в массиве.Когда я передаю более одного значения, я получаю сообщение об ошибке.

function CheckProcess([String[]]$sEnterComputerNameHere, [String[]]$sEnterProccessNameHere) {
    #Write-Host " $sEnterComputerNameHere hello"

    @($sEnterComputerNameHere) | ForEach-Object {
        # Calling Aarray
        @($sEnterProccessNameHere) | ForEach-Object {
            if (Get-Process -ComputerName $sEnterComputerNameHere | where {$_.ProcessName -eq $sEnterProccessNameHere}) {
                Write-Output "$_ is running"
            } else {
                Write-Output "$_ is not running"
            }
        }
    }
}

$script:sEnterProccessNameHere = @("VPNUI")     # Pass the process agreement here
$script:sEnterComputerNameHere = @("hostname")  # Pass the process agreement here

CheckProcess $sEnterComputerNameHere $sEnterProccessNameHere

1 Ответ

0 голосов
/ 22 февраля 2019

Попробуйте с этим:

Function CheckProcess([String[]]$sEnterComputerNameHere,[String[]]$sEnterProccessNameHere) 
{ #Write-host " $sEnterComputerNameHere"

    @($sEnterComputerNameHere) | Foreach-Object {
        $computer = $_
        Write-Host $computer        
        @($sEnterProccessNameHere) | Foreach-Object {
            $process = $_
            Write-Host $process
            try{
                $x = get-process -computername $computer #Save all processes in a variable
                If ($x.ProcessName -contains $process) #use contains instead of equals
                {
                    Write-Output "$process is running"
                }
                else
                {
                    Write-Output "$process is not running"
                }
            }
            catch
            {
                Write-Host "Computer $computer not found" -ForegroundColor Yellow
            }
        }
    }
}

$script:sEnterProccessNameHere = @("VPNUI","Notepad++","SMSS") 
$script:sEnterComputerNameHere = @("remotecomputer1","remotecomputer2") 

CheckProcess -sEnterComputerNameHere $sEnterComputerNameHere -sEnterProccessNameHere $sEnterProccessNameHere

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

Если я работаю с массивами и | Foreach, я всегда пишу $_ в новой переменной.Это помогает, если у меня есть еще один | Foreach (как у вас), чтобы точно знать, с каким объектом я работаю ..

РЕДАКТИРОВАТЬ: я изменил сценарий, поэтому вместо него используется "-contains"из -eq, и я добавил блок try / catch, поэтому, если другой компьютер не найден, он выдаст вам сообщение ... Он работает в моей сети
EDIT2: У вас есть доступ к другим компьютерам?Если вы запустите get-process -computername "name of remote computer" Получите ли вы процессы?

...