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;