PSобъект как переменная - PullRequest
       21

PSобъект как переменная

0 голосов
/ 18 сентября 2018

Я пытаюсь заставить работать 2 функции ниже. Ниже приводится кое-что странное: почему работает первый вызов функции Qf, а почему не второй?

$global:query_output = @()
$global:query_output_filtered = @()

function Q {
    Param(
        [Parameter(Mandatory=$true)][string]$DBquery,
        $DBip = "IP" ,
        $DBusr = "username" ,
        $DBpas = "password" ,
        $DBname = "dbname"
    )
    Process {
        try {
            $SQLConnection = New-Object System.Data.SQLClient.SQLConnection
            $SQLConnection.ConnectionString ="server=$DBip;database=$DBname; User         ID = $DBusr; Password = $DBpas;"
            $SQLConnection.Open()
        } catch {
            [System.Windows.Forms.MessageBox]::Show("Failed to connect SQL     Server:")
        }

        $SQLCommand = New-Object System.Data.SqlClient.SqlCommand
        $SQLCommand.CommandText = "Use Inventory " + $DBquery
        $SQLCommand.Connection = $SQLConnection

        $SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
        $SqlAdapter.SelectCommand = $SQLCommand
        $SQLDataset = New-Object System.Data.DataSet
        $SqlAdapter.fill($SQLDataset) | Out-Null

        $script:query_output = @()
        foreach ($data in $SQLDataset.Tables[0]) {
            $script:query_output += $data
        }
        $SQLConnection.Close()
        Write-Host ""
        Write-Host "================= query_output =======================" -ForegroundColor Green -BackgroundColor Red
        $script:query_output | Format-Table -AutoSize
        Write-Host "========================================" -ForegroundColor Green -BackgroundColor Red
    }
}

function Qf {
    Param(
        $objectsearch = "*02",
        $objectcolom = "company"
    )
    Process {
        $script:query_output_filtered = $script:query_output | Where-Object {
            $_.$objectcolom -like $objectsearch
        }
        Write-Host ""
        Write-Host "================= query_output_filtered=======================" -ForegroundColor Green -BackgroundColor Red
        $script:query_output_filtered | Format-Table -AutoSize
        Write-Host "========================================" -ForegroundColor Green -BackgroundColor Red
    }
}

Q("SELECT * FROM machine WHERE ID LIKE '%111'")

Qf("*DE")
Qf("*POS02","systemname")

1 Ответ

0 голосов
/ 18 сентября 2018

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

Оператор Qf("*DE") сначала оценивает выражение группировки ("*DE") в строку "*DE", затем передает эту строку в качестве первого аргумента функции Qf.

Оператор Qf("*POS02","systemname") снова сначала оценивает выражение группировки ("*POS02","systemname") в массив строк "*POS02","systemname", а затем передает этот массив в качестве первого аргумента функции Qf. Из-за этого параметр $objectsearch имеет значение "*POS02","systemname", а параметр $objectcolom имеет (по умолчанию) значение "company".

Изменить это:

Q("SELECT * FROM machine WHERE ID LIKE '%111'")

Qf("*DE")
Qf("*POS02","systemname")

в это:

Q "SELECT * FROM machine WHERE ID LIKE '%111'"

Qf "*DE"
Qf "*POS02" "systemname"

и проблема исчезнет.

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