Я пытаюсь получить спецификации оборудования для удаленного сервера и хотел бы вставить их в таблицу SQL Server, которая также находится на удаленном сервере. Я получаю следующую ошибку.
Invoke-SQLcmd: неправильный синтаксис рядом с'@'.
Сообщение 102, Уровень 15, Состояние 1, Процедура, Строка 5.
Код:
$ServerName = "SQLSRV"
$DatabaseName = "Automation"
$conn=New-Object System.Data.SqlClient.SQLConnection
$ConnectionString = "Server = $SQLServer; Database = $SQLDBName;
User ID= automationusr; Password= Password@SQL"
$conn.ConnectionString=$ConnectionString
$conn.Open()
$ServerListFile = "C:\Scripts\ServerList.txt"
$ServerList = Get-Content $ServerListFile -ErrorAction SilentlyContinue
$Result = @()
ForEach($computername in $ServerList)
{
$AVGProc = Get-WmiObject -computername $computername win32_processor |
Measure-Object -property LoadPercentage -Average | Select Average
$OS = gwmi -Class win32_operatingsystem -computername $computername |
Select-Object @{Name = "MemoryUsage"; Expression = {“{0:N2}” -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize) }}
$vol = Get-WmiObject -Class win32_Volume -ComputerName $computername -Filter "DriveLetter = 'C:'" |
Select-object @{Name = "C PercentFree"; Expression = {“{0:N2}” -f (($_.FreeSpace / $_.Capacity)*100) } }
$result += [PSCustomObject] @{
ServerName = "'$computername'"
CPULoad = "'$($AVGProc.Average)%'"
MemLoad = "'$($OS.MemoryUsage)%'"
CDrive = "'$($vol.'C PercentFree')%'"
QDate = "'$(Get-Date -Format "yyyyMMdd")'"
}
Foreach($Entry in $Result)
{
$QDate=$TESTTB01.Date
$ServerName=$TESTTB01.SName
$CPULoad=$TESTTB01.ACPU
$MemLoad=$TESTTB01.MEMU
$CDrive=$TESTTB01.DRVC
$insertquery="
INSERT INTO [dbo].[TESTTB01]
(Date,SName,ACPU,MEMU,DRVC)
VALUES
('['$ENTRY.QDate']','['$ENTRY.ServerName']','['$Entry.CPULoad']','['$Entry.MemLoad']','['$Entry.CDrive']')
GO
"
Invoke-SQLcmd -ServerInstance 'SQLSRV' -query $insertquery -U automationusr -P Password@SQL -Database Automation
}
}
Я хочу создать задачу, которая может выполнить код, получить конфигурацию удаленных серверов и вставлять переменные в таблицу SQL Server через каждые 15 минут