Корисні скрипти powershell. Частина 2

Перший скрипт для пошуку запущеного процесу (у нашому прикладі “chrome.exe“) та користувача на термінальному сервері та запису в лог файл. Замість процесу “chrome.exe” ви можете вказати будь-який інший:

$outputFile = "C:\temp\chrome_users.txt"
$processes = Get-WmiObject Win32_Process | Where-Object { $_.Name -eq "chrome.exe" }
$userList = @{}
foreach ($process in $processes) {
    $userInfo = $process.GetOwner()
    $username = "$($userInfo.Domain)\$($userInfo.User)"
    if (-not $userList.ContainsKey($username)) {
        $userList[$username] = $process.Name
    }
}
$outFile = New-Object System.IO.StreamWriter($outputFile, $false, [System.Text.Encoding]::UTF8)
foreach ($user in $userList.Keys) {
    $outFile.WriteLine("$user : chrome.exe")
}
$outFile.Close()
Write-Host "The user list is ready!"

Наступний скрипт шукає AD неактивних користувачів. У змінній $daysInactive вказуємо кількість неактивних днів. У змінній $ouPath робимо орієнтацію на певну OU в AD. Виведення в лог файл йде у форматі csv і його можна від форматувати і додати фільтри в excel-е.

$daysInactive = 90
$ouPath = "OU=buh,DC=users,DC=it-homyak,DC=com,DC=ua"
$timeThreshold = (Get-Date).AddDays(-$daysInactive)
$inactiveUsers = Get-ADUser -Filter {LastLogonDate -lt $timeThreshold} -SearchBase $ouPath -Property LastLogonDate | Select-Object Name, SamAccountName, LastLogonDate
$inactiveUsers | Export-Csv -Path "D:\inactive_users.csv" -NoTypeInformation -Encoding utf8

Цей скрипт шукає активні хости в мережі по масці та записує в лог файл IP та ім’я хоста.

$networkBase = "10.1."
$subnetStart = 100
$subnetMask = 23
$startIP = 0
$endIP = 511
$outputFile = "D:\ActiveHosts.txt"
Clear-Content -Path $outputFile
for ($i = $startIP; $i -le $endIP; $i++) {
    $subnet = $subnetStart + [math]::Floor($i / 256)
    $hostPart = $i % 256
    $ipAddress = "$networkBase$subnet.$hostPart"
    $ping = Test-Connection -ComputerName $ipAddress -Count 1 -Quiet
    if ($ping) {
        try {
            $hostName = [System.Net.Dns]::GetHostEntry($ipAddress).HostName
        } catch {
            $hostName = "Unknown"
        }
        $result = "$ipAddress - $hostName"
        Write-Output $result
        Add-Content -Path $outputFile -Value $result
    }
}
Write-Output "Весь список хостів записаний у $outputFile"

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *