Два SQL-запроса и каждый из них передается как набор данных для передачи в качестве параметров - PullRequest
1 голос
/ 06 декабря 2011

Я очень новичок в Powershell, и я собрал следующий код для скрипта, который проверит «старую» папку и создаст ее, если она не найдена. Затем он переместит сжатые блоги из текущего местоположения в «старую» папку. Я хочу, чтобы это было написано для извлечения имен серверов и веб-сайтов из SQL-запроса, чтобы он мог быть настроен для ночного запуска и не нуждался в обновлении новыми или удаленными серверами. Пока что написано следующее, но так как я новичок, я не могу понять последний бит синтаксиса.

clear
$SqlServer = "SERVER"
$SqlCatalog = "DATABASE"
$SqlQuery = "select hsa.servername from SERVER.dbo.serversapp hsa
inner join SERVER.dbo.apphosts hah on hsa.vchservername = hah.vchservername
where hsa.tirecordstatus = 1
order by hsa.vchservername desc"
$SqlQuery1 = "select hah.vchhost from SERVER.dbo.serversapp hsa
inner join SERVER.dbo.apphosts hah on hsa.vchservername = hah.vchservername
where hsa.tirecordstatus = 1
order by hsa.vchservername desc"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]

Я хотел бы, чтобы каждый $ SQLQuery запускался и сохранял каждый в своей собственной таблице набора данных, чтобы я мог передать каждый из них в качестве параметра для следующего кода. Что мне нужно выяснить это:

1) Как мне написать выше, чтобы выполнить оба SQL-запроса, и каждый из них должен быть либо собственным набором данных, либо таблицей, чтобы я мог использовать их в качестве параметров; $ Servername и $ HostedGroup?

2) Как настроить это для получения кода ниже на каждом из серверов из параметра $ Servername?

$Servername = Dataset1
$Hostedgroup = Dataset2
$OldFolder = "\\$Servername\C$\Ren\Weblogs\$Hostedgroup\old"
$FolderExists = Test-Path $OldFolder


if($FolderExists -eq $False)
{
new-item \\$Servername\C$\Ren\Weblogs\$Hostedgroup\old -type directory
}
then
{
if(Test-Path \\$Servername\C$\Ren\Weblogs\old\W3SVC2)
{
get-childitem -path '\\$Servername\C$\Ren\WebLogs\$Hostedgroup\W3SVC2' -recurse -include *.zip | move-item -destination '\\$Servername\C$\Ren\WebLogs\$Hostedgroup\old'

1 Ответ

1 голос
/ 06 декабря 2011

$SqlAdapter.Fill($DataSet) возвращает целое число; вы должны запретить вашему скрипту / функции возвращать его, присвоив ему $null или используя Out-Null. (например, $null = $SqlAdapter.Fill($DataSet))

Для ответа на ваш вопрос вы можете вернуть оба поля из одного запроса, а затем выполнить итерации по результатам. Шаблон будет выглядеть так:

function Get-HostedServerApp {
    $SqlServer = "SERVER"
    $SqlCatalog = "DATABASE"
    $SqlQuery = @"
select hsa.vchappservername, hah.vchhost 
from SERVER.dbo.hostedserversapp hsa
inner join SERVER.dbo.hostedapphosts hah on hsa.vchappservername = hah.vchappservername
where hsa.tirecordstatus = 1
order by hsa.vchappservername desc
"@
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True"
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = $SqlQuery
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $null = $SqlAdapter.Fill($DataSet)
    $SqlConnection.Close()
    $Dataset.Tables[0]
}

# Place your logic in this function
function SomeFunction {
    param(
    $Servername,
    $Hostedgroup
    )

    "\\$Servername\C`$\Renaissance\Weblogs\$Hostedgroup\old"
}

$data = Get-HostedServerApp

$data| foreach{SomeFunction -ServerName $_.vchappservername -HostedGroup $_.vchhost}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...