Я просматриваю список серверов sql, запрашивая данные и создавая набор данных, который отлично работает. Набор данных передается в файл csv, который имеет все строки. Затем я пытаюсь создать и массировать из каждой строки, а затем отправить результаты по электронной почте. Письмо отправляется, но содержимое содержит только записи с последнего сервера в списке.Доступ ко всем строкам в наборе данных с помощью powershell
ForEach ($instance in Get-Content "D:\servers\sqlservers2.txt")
{
$SQLServer = "$instance" #use Server\Instance for named SQL instances!
$SQLDBName = "msdb"
$SqlQuery = "
Select
@@servername as [Server],
j.[name] AS [JobName],
run_status = CASE h.run_status
WHEN 0 THEN 'Failed'
WHEN 1 THEN 'Succeeded'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Canceled'
WHEN 4 THEN 'In progress'
END,
h.run_date AS LastRunDate,
h.run_time AS LastRunTime
FROM sysjobhistory h
INNER JOIN sysjobs j ON h.job_id = j.job_id
WHERE j.enabled = 1
and j.name not like 'copytosan'
and j.name not like 'syspolicy%'
and j.name not like '%log%'
AND h.instance_id
IN
(SELECT MAX(h.instance_id)
FROM sysjobhistory h GROUP BY (h.job_id))
"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server =
$SQLServer; Database = $SQLDBName; 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()
#File is created with all rows from dataset
$DataSet.Tables[0] | Out-File D:\servers\myfiles.csv -Append
}
foreach ($line in $dataset.tables[0])
{
$body += $line
}
# (Out-String -InputObject $body -Width 100)
Send-MailMessage -To [email protected] -from [email protected] -Subject Test12345 -body (Out-String -InputObject $body -Width 100) -SmtpServer [email protected]
Я знал, что это что-то простое. спасибо – Altirisguru