Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - инсерт нескольких записей в БД

Ответить
Настройки темы
PowerShell - инсерт нескольких записей в БД

Аватара для ejik_off

Старожил


Сообщения: 471
Благодарности: 11

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png shares.PNG
(6.1 Kb, 3 просмотров)
Всем привет!!!

Переделываю скрипт, который собирает с раб.станций инфу по общим папкам и сохраняет в MSSQL. Старый скрипт работал через Invoke-Sqlcmd, что требует импорт модуля SQLServer.
Решил избавится от импорта и использовать классы .NET.

Код: Выделить весь код
$shares = get-smbshare -Special $false | get-smbshareaccess
$Pc = get-wmiobject Win32_ComputerSystemProduct -Property *  | Select-Object UUID, "__SERVER"
$PcSusID = Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\ | select SusClientId

$date=get-date -Format "dd.MM.yyyy HH:mm:ss"
$PcName = $Pc.__SERVER
$PcUID = $Pc.UUID
$CompSusID = $PcSusID.SusClientId

#Подключение к базе данных и Insert
$dataSource = “sql-server\instance”
$database = “name_DB”
$auth = “Integrated Security=SSPI;”
$connectionString = “Provider=sqloledb; ” +
“Data Source=$dataSource; ” +
“Initial Catalog=$database; ” +
“$auth; “
$connection = New-Object System.Data.OleDb.OleDbConnection $connectionString

for ($s=0; $s -lt $shares.Count; $s++) {

$PcSharesName = $shares[$s].name
$ShareAccName = $shares[$s].AccountName
$ShareAccControl = $shares[$s].AccessControlType
$ShareAccRight = $shares[$s].AccessRight

$sql = "BEGIN
            IF EXISTS (SELECT * FROM Comp_Data 
                      WHERE CompName = N'$PcName' AND CompShareName = '$PcSharesName' AND AccessRight = '$ShareAccRight')
            BEGIN
                UPDATE Comp_Data SET CompUID='$PcUID', CompShareName='$PcSharesName', AccountName='$ShareAccName', AccessControlType='$ShareAccControl', AccessRight='$ShareAccRight', CompSusID='$CompSusID',DateRun='$date'
                        WHERE CompName = N'$PcName' AND CompShareName = '$PcSharesName' AND AccessRight = '$ShareAccRight'
                        
            END
            ELSE
            BEGIN
                INSERT INTO Comp_Data (CompName,CompUID,CompShareName,AccountName,AccessControlType,AccessRight,CompSusID,DateRun) 
                        VALUES (N'$PcName',N'$PcUID','$PcSharesName','$ShareAccName','$ShareAccControl','$ShareAccRight','$CompSusID','$date')
            END
        END"
}
$command = New-Object System.Data.OleDb.OleDbCommand $sql,$connection
$connection.Open()
$command = New-Object data.OleDb.OleDbCommand $sql
$command.connection = $connection
$rowsAffected = $command.ExecuteNonQuery()
$connection.Close()
В бд сохраняется только одна запись.
Хотя в переменной shares две записи, видно на скрине.
что не так делаю?

Отправлено: 14:47, 28-05-2021

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - инсерт нескольких записей в БД

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Паскаль!Проектирование БД.Используя файловый тип данных, создать файл записей ___Vampir___ Программирование и базы данных 1 09-05-2011 23:25
.NET - [решено] Добавление записей в таблицу БД Alex.sys Программирование и базы данных 10 04-05-2011 03:46
FreeBSD - [решено] Ведение учета (информации, клиентов, и т.д.) в БД + Веб интерфейс к БД для юзеров ilka Общий по FreeBSD 4 03-12-2010 00:40
Ошибка при динамической регистрации или удалении одной или нескольких записей DNS fesenus Microsoft Windows NT/2000/2003 3 19-11-2007 11:36
Распределенная БД MaxFactor Программирование и базы данных 5 28-01-2003 11:55




 
Переход