আমাকে সম্প্রতি খুব অনুরূপ কাজ করতে বলা হয়েছিল তবে বুটআপ এবং লগনের সময় অন্তর্ভুক্ত করতে এবং historicalতিহাসিক উল্লেখের অনুমতি দেওয়ার জন্য আমাকে বলা হয়েছিল। সুতরাং নীচের পাওয়ারশেল লিপিটি নিম্নলিখিতটি করে:
- কিছু পরিবেশের ভেরিয়েবল ধরে
- 4 টি বিভিন্ন ইভেন্ট লগ এন্ট্রিগুলির জন্য সময়-তারিখের ডাকটিকিট পান। এর দ্বিতীয় এবং চতুর্থটি সঠিক পরিমাপ নয় তবে বেশ বিস্তৃত গবেষণা, সমস্যা সমাধানের এবং পরীক্ষার পরে তারা অতি নিকটে এবং যা আমি দেখেছি তার থেকে সর্বোত্তম বিকল্প।
- এই 4 টি ইভেন্টের মধ্যে পার্থক্য গণনা করে
- একটি সাধারণ এসকিউএল টেবিলের মধ্যে সমস্ত সংখ্যাকে পপুলেট করে [আপনি যে কোনও কিছুতে অবশ্যই নম্বরগুলিকে পাইপ করতে মানিয়ে নিতে পারেন]
সুতরাং স্ক্রিপ্টটি নির্ধারিত টাস্কের মাধ্যমে বা কোনও সময়সূচীতে চালানো বোঝায় আপনার যদি এসসিসিএম সম্ভবত থাকে (লগনের সময় নয় যাতে লগনটি একেবারে পরিবর্তন না করা)। সুন্দর জিনিসটি হ'ল আপনি নিজের কম্পিউটার থেকে এটি চালানোর জন্য পিসি নামটি অন্য কোনও কিছুর কাছে পরিবর্তন করতে পারবেন এবং সংখ্যার সমস্যা সমাধানের জন্য এবং যাচাই করতে দূরবর্তী কম্পিউটার থেকে ডেটা পেতে (যদিও ব্যবহারকারীর নামটি আপনার নিজের হিসাবে প্রদর্শিত হবে) get
আমি এটিকে অন্য পদক্ষেপ নিয়েছি এবং বাহ্যিক ডেটার (বিসিএস ব্যবহার করে) একটি তালিকা তৈরি করতে শেয়ারপয়েন্ট ব্যবহার করেছি যাতে তাদের সুন্দর ফ্রন্ট এন্ড জিইউআই থাকে। স্ক্রিপ্টের নীচে, আমি লেখার সময় আমি বেশিরভাগ মন্তব্য করা লাইনে রেখেছি:
$USER = $env:username.ToUpper()
$COMPUTER = $env:computername.ToUpper()
$Current_Time = Get-Date
$PCname = ''
$addedtime = 0
#1. get event time of last OS load
$filterXML = @'
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-Kernel-General'] and (Level=4 or Level=0) and (EventID=12)]]</Select>
</Query>
</QueryList>
'@
$OSLoadTime=(Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML).timecreated
#Write-Host $PCname
#Write-Host "1. Last System Boot @ " $OSLoadTime
#2. Get event time of Time-Service [pre-Ctrl+Alt-Del] after latest OS load
$filterXML = @'
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-Time-Service'] and (Level=4 or Level=0) and (EventID=35)]]</Select>
</Query>
</QueryList>
'@
$CtrlAltDelTime=(Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML).timecreated
#Write-Host "2. Time-sync after Boot @ " $CtrlAltDelTime
#get minutes (rounded to 1 decimal) between OS load time and 1st load of GPOs
$BootDuration = "{0:N1}" -f ((($CtrlAltDelTime - $OSLoadTime).TotalSeconds + $addedtime)/60)
#3. get event time of 1st successful logon
$filterXML = @'
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">*[System[Provider[@Name='Microsoft-Windows-Winlogon'] and (Level=4 or Level=0) and (EventID=7001)]]</Select>
</Query>
</QueryList>
'@
$LogonDateTime=(Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML -ErrorAction SilentlyContinue).timecreated
If ($LogonDateTime) {
#Write-Host "3. Successful Logon @ " $LogonDateTime
}
Else {
#Write-Host "Duration of Bootup = " $BootDuration "minutes" -foregroundcolor blue -BackgroundColor white
#Write-Host $PCname "has not logged back in." -foregroundcolor red -BackgroundColor white
Exit
}
#Write-Host "Duration of Bootup = " $BootDuration "minutes" -foregroundcolor blue -BackgroundColor white
#4. Get Win License validated after logon (about same time as explorer loads)
$filterXML = @'
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[Provider[@Name='Microsoft-Windows-Winlogon'] and (Level=4 or Level=0) and (EventID=4101)]]</Select>
</Query>
</QueryList>
'@
$DesktopTime=(Get-WinEvent -ComputerName $PCname -MaxEvents 1 -FilterXml $filterXML).timecreated
$LogonDuration = "{0:N1}" -f ((($DesktopTime - $LogonDateTime).TotalSeconds + $addedtime)/60)
#Write-Host "4. WinLicVal after Logon @ " $DesktopTime
#Write-Host "Duration of Logon = " $LogonDuration "minutes" -foregroundcolor blue -BackgroundColor white
#START SQL Injection Section
[void][reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$sqlServer = "SQLserver01"
$dbName = "BootUpTimes"
$tbl = "tblBootUpTimes"
#$srv = New-Object Microsoft.SqlServer.Management.Smo.Server $sqlServer
#$db = $srv.databases[$dbName]
#$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=$sqlServer;Initial Catalog=$dbName; Integrated Security=SSPI")
$conn = New-Object System.Data.SqlClient.SqlConnection("server=$sqlServer;database=$dbName;Password=plaintext;User Id=BootUpTimes")
$conn.Open()
$cmd = $conn.CreateCommand()
$cmd.CommandText = "INSERT INTO $tbl VALUES ('$Current_Time','$USER','$COMPUTER','$OSLoadTime','$CtrlAltDelTime','$BootDuration','$LogonDateTime','$DesktopTime','$LogonDuration')"
Try
{
$null = $cmd.ExecuteNonQuery()
}
Catch
{
}
$conn.Close()
এই শেষ এসকিউএল বিভাগে একটি প্লেইন টেক্সটে কিছু পাসওয়ার্ডের প্রয়োজন ছাড়াই এসকিউএল এ ইনপুট দেওয়ার জন্য অন্য পদ্ধতি (সুরক্ষা-ভিত্তিক) অফার করার জন্য কয়েকটি লাইনের মন্তব্য রয়েছে।