Получение Windows данных журналов в SQL таблицу базы данных сервера - PullRequest
0 голосов
/ 03 августа 2020

У меня есть группа серверов печати, которые я хочу отслеживать с сервера базы данных, собирая данные журнала событий в таблицу в моей SQL базе данных сервера.

Я пишу сценарий Powershell, который будет запланировано на моем сервере базы данных, чтобы получить данные всех серверов печати. Я бы предпочел избегать создания временных файлов в printservers (и, если возможно, на сервере базы данных), чтобы избежать очистки.

Я запускаю Powershell от имени администратора и использую следующий код:

    $PrintServerName = "usqasws0502.phx-dc.com"
    $sqlServer = "CZCHOWSTC000583"
    $Database  = "PrintMonitor"
    $USusername= "User1"
    $USpassword= "Passw1"

    $time = @{label='Time Printed'; Expression={get-date $_.TimeCreated -format s}}
    $documentID = @{label='Document ID'; Expression={$_.properties[0].value}} ## Sample value are 181,182,...
    $documentName = @{label='Document Name'; Expression={$_.properties[1].value}} ## Print Document Constante
    $userID = @{label='User ID'; Expression={$_.properties[2].value}}  #srv_phxdc-cw1webprin
    $computerID = @{label='Computer ID'; Expression={$_.properties[3].value}}  ##\\USQASWS0500
    $printer = @{label='Printer'; Expression={$_.properties[4].value}}  ##CR-SJO-TSM-XER-LASER-CARGOWISE-AFR1-TSMOFFICE-XEROX
    $sizeInBytes = @{label='Size in Bytes'; Expression={$_.properties[6].value}}  ## 270181
    $numberOfPages = @{label='Number of Pages'; Expression={$_.properties[7].value}} ##2

    $TmpFile = "H:\CWData\Monitoring\Printers\tempfile.csv"
    $filter = @{ LogName ="Microsoft-Windows-PrintService/Operational"
                 ID = 307
                 StartTime = [DateTime]::Today.AddDays(-10)
                 EndTime =   [DateTime]::Today
               }
     $Cred = New-Object PSCredential -ArgumentList @($USusername, ($USpassword|ConvertTo-SecureString -AsPlainText -Force))
     $s = New-PSSession -ComputerName $PrintServerName -Credential $Cred
     Invoke-Command -Session $s {
     $event = Get-WinEvent -FilterHashtable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime = [DateTime]::Today.AddDays(-10); EndTime = [DateTime]::Today } -ErrorAction SilentlyContinue 
        |Sort TimeCreated -Descending |Format-Table -Wrap -AutoSize 

# Строка выше отображает такой вывод

Сообщение TimeCreated Id LevelDisplayName

27.07.2020 17:40:32 307 Информационный документ 253, печать Документ, принадлежащий SRV_PHXD C -CW1WEBPRIN на \ USQASWS0502 был напечатан на US-LAX-LASER-USLAXNP2LASER13 через порт 7.233.205.205 . Размер в байтах: 113367. Распечатанных страниц: 1. Никаких действий со стороны пользователя не требуется. 27.07.2020 17:40:24 307 Информационный документ 252, печать Документ, принадлежащий SRV_PHXD C -CW1WEBPRIN на \ USQASWS0502, был напечатан на US-LAX-LASER-USLAXNP2LASER13 через порт 7.233.205.205. Размер в байтах: 120234. Напечатанных страниц: 2. Никаких действий со стороны пользователя не требуется.

    $obj= $event |select $time, $documentID, $documentName,$userID, $computerID, $printer, $printerPort, $sizeInBytes, $numberOfPages | export-csv "H:\CWData\Monitoring\Printers\PrintLog_$ServerName_tempfile.csv"
    #The line above  generates an empty file..
    Write-SQLTableData -TableName PrintService-Job -SchemaName dbo -DatabaseName $Database -ServerInstance $sqlServer -InputData  $obj
    #The line above does not enter anything in the DB generates an empty file..

Моя таблица базы данных будет:

CREATE TABLE [dbo].[PrintService-Job]
(
      [pj_id] [int] IDENTITY(1,1) NOT NULL,
      [pj_DateTime] [varchar](50) NULL,
      [pj_PrintServer] [varchar](50) NULL,
      [pj_PrintClient] [varchar](50) NULL,
      [pj_PrinterName] [varchar](50) NULL,
      [pj_SizeBytes] [varchar](50) NULL
)

Можете ли вы рассказать мне, что я делаю не так? (или укажите мне сценарий, который передает данные из Windows журналов событий в SQL таблицы базы данных сервера)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...