Всем привет!!!
Переделываю скрипт, который собирает с раб.станций инфу по общим папкам и сохраняет в 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 две записи, видно на скрине.
что не так делаю?