PowerShell - ForEach с использованием ввода данных SQL

Я использую код PowerShell для первого подключения к базе данных, и из SELECT, который я делаю, эти выходные данные выводятся:

NAME: %SERVERNAME1
NAME: %SERVERNAME2

Теперь я хочу сделать цикл "foreach", где он будет создавать get-childitem для каждого%SERVERNAME, чтобы находить все EXE-файлы и выводить их в out-gridview.

Мой foreach выглядит так, но, очевидно, он не работает:

$Connection.open()
Write-host "Database Connection $databasename = SUCCESSFULL : Searching role $Role in $palier ..." -foregroundcolor green -backgroundcolor black
$SqlCmd.CommandText = $SqlQuery
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$SqlCmd.Connection = $Connection
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($Dataset)
$Connection.Close()
$Result = $Dataset.Tables[0]
$Result


Foreach ($name in $Result) 
{

$name = Get-ChildItem "\\$_\c$\" -recurse -filter *.exe

}

Как этот foreach мог быть сделан?

PS: не хотел добавлять много информации, так как соединение с базой данных работает, просто хочу понять, где у меня происходит сбой на стороне foreach.

1 ответ

Решение

$Result представляет собой набор строк данных, и foreach не может использовать $_ (это только для конвейерных объектов). Вам нужно перебрать результаты и захватить Name поле из каждого ряда.

В вашем цикле вы перезаписываете $name на каждой итерации, поэтому вы будете выводить только результаты последнего Get-ChildItem, Вам нужно собрать эти результаты для вывода.

$ExeList = @();
Foreach ($Record in $Result) {
    $ExeList += Get-ChildItem -path \\$($Record.name)\c$\ -recurse -filter *.exe
}
$ExeList|out-gridview;
Другие вопросы по тегам