Мне нужно выяснить, кто зашел в конечную точку. У нас есть таблица истории SID, которую я использую в качестве таблицы преобразования. Это приведет к имени пользователя вместо SID. Соединение работает нормально, но оно только вставляет одно событие из журнала событий.foreach loop ot вставить несколько строк в базу данных
Я включил инструкцию insert в цикл foreach. Что мне не хватает?
Пример хоста, на котором выполняется эта операция, содержит более 15 событий, мне нужно вставить все 15 из этих событий в базу данных MySQL, чтобы я мог запросить, на каких машинах был зарегистрирован конкретный SID.
Ниже приведен простой и уродливый код. Соединение работает, но только вставляет одну строку за раз.
# MySQL Connection string #
function Connect-MySQL([string]$user,[string]$pass, [string]$MySQLHost,[string]$database) {
# Load MySQL .NET Connector Objects
[void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")
$connStr = "server=" + $MySQLHost + ";port=3306;uid=" + $user + ";pwd=" + $pass + ";database="+$database+";Pooling=FALSE"
$conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
$conn.Open()
return $conn
}
# Close Conn
function Disconnect-MySQL($conn) {
$conn.Close()
}
# MySQL Connection Vars #
$user = ''
$pass = ''
$database = ''
$MySQLHost = ''
$conn = Connect-MySQL $user $pass $MySQLHost $database
function Execute-MySQLNonQuery($conn, [string]$query) {
$command = $conn.CreateCommand()
$command.CommandText = $query
$RowsInserted = $command.ExecuteNonQuery()
$command.Dispose()
if ($RowsInserted) {
return $RowInserted
} else {
return $false
}
}
$ErrorActionPreference = 'silentlycontinue'
$events = Get-Eventlog -Log system -ComputerName '.' | Where-Object {
(($_.EventID -like "*7001*") -or
($_.EventID -like "*7002*"))
} | Select-Object replacementstrings, machinename, timegenerated ;
foreach ($event in $events) {
$outObj = new-object psobject -Property @{
user = $event.ReplacementStrings[1]
time = $event.timegenerated
machine = $event.machinename
}
$uservar = $outObj.user
$timevar = $outObj.time
$machinevar = $outObj.machine
$query = "INSERT INTO infosec.ewarp_testing (data1,data2,data3) VALUES ('$uservar', '$timevar','$machinevar')"
echo "$uservar $timevar $machinevar"
$Rows = Execute-MySQLNonQuery $conn $query
}
Удалите строку '$ ErrorActionPreference = 'silentlycontinue'' и посмотрите, что-то сломается. Кроме того, убедитесь, что '$ events' фактически содержит более одного элемента. –
ничего не ломают, когда я беру EA. $ События имеют более 15 результатов, когда я повторяю их вне или внутри цикла. Если я эхо $ uservar за пределами цикла, я получаю только один возврат к консольным событиям $, которые я получаю из них ....:/ – Charles