Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Windows
Kanalga Telegramβda oβtish
π₯οΈ Windows Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ²: ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ. ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΠΎΠ²Π΅ΡΡ, Π»Π°ΠΉΡΡ Π°ΠΊΠΈ, PowerShell-ΡΠΊΡΠΈΠΏΡΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΡΡΠ°Π½ΡΠΈΡΠΌΠΈ. ΠΠ²ΡΠΎΡΡΠΊΠΈΠΉ ΠΊΠ°Π½Π°Π».
Ko'proq ko'rsatish3 087
Obunachilar
-124 soatlar
-57 kun
-730 kun
Postlar arxiv
π ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π°Π²ΡΠΎΠ»ΠΎΠ³ΠΈΠ½ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½Π΄ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ΅ΡΠΈ - Π±Π΅Π· Π΄ΠΎΠΌΠ΅Π½Π°, Π±Π΅Π· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΏΡΠΎΡΡΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π»ΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠΎΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
Π Π΅ΡΠ°Π΅ΡΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π΅ΡΡΡΠ°:
$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $RegPath -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $RegPath -Name "DefaultUsername" -Value "UserName"
Set-ItemProperty -Path $RegPath -Name "DefaultPassword" -Value "UserPassword"
Set-ItemProperty -Path $RegPath -Name "DefaultDomainName" -Value "$env:COMPUTERNAME"
β οΈ ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΠ°ΡΠΎΠ»Ρ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π² ΠΎΡΠΊΡΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² ΡΠ΅Π΅ΡΡΡΠ΅ (DefaultPassword), ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ ΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
π‘οΈ ΠΡΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± - ΡΠ΅ΡΠ΅Π· netplwiz, Π½ΠΎ ΠΎΠ½ Π½Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠΈ. Π Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ ΡΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π΅Π΅ β ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅ΡΠ½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π±Π΅Π· Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ.
π ΠΠΎΡΠ»Π΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ β Π»ΠΈΠ±ΠΎ ΡΠ΅Π±ΡΡ, Π»ΠΈΠ±ΠΎ shutdown /r /t 0 Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
ΠΠ°ΠΊ ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ°ΡΡΡ ΡΠ»ΡΠΆΠ± Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
?
ΠΡΠΈΡΡΠΌ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π³Π»ΡΠ½ΡΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ, Π° ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ (ΡΠΈΠΏΠ°
w32time, WinRM, TermService) Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Running.
ΠΠΈΠΆΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΊΡΠΈΠΏΡ
$servers = @("server1", "server2", "server3")
$servicesToCheck = @("w32time", "WinRM", "TermService")
foreach ($server in $servers) {
Write-Host "π ΠΡΠΎΠ²Π΅ΡΠΊΠ° $server" -ForegroundColor Cyan
foreach ($service in $servicesToCheck) {
$status = Get-Service -ComputerName $server -Name $service -ErrorAction SilentlyContinue
if ($status.Status -eq 'Running') {
Write-Host "$service: OK" -ForegroundColor Green
} else {
Write-Host "$service: ΠΠ Π ΠΠΠΠ’ΠΠΠ’!" -ForegroundColor Red
}
}
Write-Host ""
}
Π£Π΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΠ³Π½Π°ΡΡ ΠΏΠΎ Π΄Π΅ΡΡΡΠΊΡ ΠΌΠ°ΡΠΈΠ½.
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ Π±ΡΡΡΡΠΎ Π½Π°ΠΉΡΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°Π²ΠΈΡΡΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΡΠ΅ΡΠ΅Π· PowerShell.
πΠΡΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²ΠΈΡ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ "ΡΠ°Π±ΠΎΡΠ°Π΅Ρ", ΡΡΠ°ΡΡΡ Running, Π½ΠΎ ΠΏΠΎ ΡΠ°ΠΊΡΡ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΈΠ»ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ²ΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ. Π’Π°ΠΊΠΎΠ΅ Π±ΡΠ²Π°Π΅Ρ Ρ Π°Π³Π΅Π½ΡΠ°ΠΌΠΈ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ°ΠΌΠΈ ΠΈ Π΄Π°ΠΆΠ΅ SQL Server.
ΠΠΈΠΆΠ΅ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΡΠ²ΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ "Π·ΠΎΠΌΠ±ΠΈ-ΡΠ΅ΡΠ²ΠΈΡΡ" ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡ
:
$serviceName = "ΠΠΌΡ_ΡΠ΅ΡΠ²ΠΈΡΠ°"
$svc = Get-Service -Name $serviceName
if ($svc.Status -eq "Running") {
$process = Get-WmiObject Win32_Service | Where-Object { $_.Name -eq $serviceName }
if ($process.ProcessId -ne 0) {
Write-Host "Π‘Π΅ΡΠ²ΠΈΡ Π·Π°ΠΏΡΡΠ΅Π½ Ρ PID $($process.ProcessId). ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ..."
Restart-Service -Name $serviceName -Force
} else {
Write-Host "PID Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β ΠΏΡΠΎΠ²Π΅ΡΡ Π²ΡΡΡΠ½ΡΡ!"
}
} else {
Write-Host "Π‘Π΅ΡΠ²ΠΈΡ Π½Π΅ Π·Π°ΠΏΡΡΠ΅Π½. Π‘ΡΠ°ΡΡΡ: $($svc.Status)"
}
π‘ ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π½Π° ΡΠ΅Ρ
ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
, Π³Π΄Π΅ Π½Π΅Ρ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°, Π° Π²ΡΠ΅ΠΌΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ.
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
ΠΠ°ΠΊ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΊΡΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠ½ΠΈΠ»ΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΈΠ»ΠΈ Π²Π°ΠΆΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ? ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΡ Π½Π° Π²Π·Π»ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π·Π°Ρ
ΠΎΠ΄ΠΈΡ Π² Π½Π΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ (Ρ
ΠΎΡΡ ΡΠ°ΠΌ ΡΠ°ΠΊ Π΄Π΅Π»Π°Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π½ΠΎΡΡΡ).
ΠΠ°Π½Π½ΡΠΉ PowerShell-ΡΠΊΡΠΈΠΏΡ Π²ΡΡΠ°ΡΠΈΡ Π»ΠΎΠ³ΠΈ Π²Ρ
ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ (
Event ID 4624) ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ:
Get-WinEvent -FilterHashtable @{
LogName = 'Security';
Id = 4624;
StartTime = (Get-Date).AddDays(-1)
} | ForEach-Object {
$xml = [xml]$_.ToXml()
[PSCustomObject]@{
TimeCreated = $_.TimeCreated
AccountName = $xml.Event.EventData.Data | Where-Object {$_.Name -eq "TargetUserName"} | Select-Object -ExpandProperty '#text'
IPAddress = $xml.Event.EventData.Data | Where-Object {$_.Name -eq "IpAddress"} | Select-Object -ExpandProperty '#text'
LogonType = $xml.Event.EventData.Data | Where-Object {$_.Name -eq "LogonType"} | Select-Object -ExpandProperty '#text'
}
} | Where-Object { $_.AccountName -ne "ANONYMOUS LOGON" -and $_.LogonType -eq "10" } | Sort-Object TimeCreated
π LogonType = 10 - ΡΡΠΎ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ Π²Ρ
ΠΎΠ΄ (RDP).
π ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° 2, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ΅Π½ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ Π»ΠΎΠ³ΠΎΠ½.
π ΠΠ»ΠΈ ΡΠ±ΡΠ°ΡΡ ΡΠΈΠ»ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΡ.
ΠΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΠ°ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π°Π΄ΠΌΠΈΠ½ΠΎΠ², Π° Π΅ΡΡ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ "ΠΊΡΠΎ Π·Π°Ρ
ΠΎΠ΄ΠΈΠ» Π½ΠΎΡΡΡ" π
(Π³Π»Π°Π²Π½ΠΎΠ΅ Π½Π° ΡΠ΅Π±Ρ Π½Π΅ Π²ΡΠΉΡΠΈ π)
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
ΠΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΡΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΡΠ²ΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Windows-ΡΠ΅ΡΠ²Π΅ΡΡ - ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΈΠ·Π²Π½Π΅.
π₯ ΠΡΠΎΠ²Π΅ΡΠΈΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ Π²Ρ
ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
Get-NetTCPConnection -State Established | Where-Object { $_.RemoteAddress -ne '127.0.0.1' } |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess |
Sort-Object -Property RemoteAddress
Π ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠΎΠΈΡ Π·Π° ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠΌ ΡΡΠΎ:
Get-NetTCPConnection -State Established |
Where-Object { $_.RemoteAddress -ne '127.0.0.1' } |
ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
RemoteAddress = $_.RemoteAddress
RemotePort = $_.RemotePort
LocalPort = $_.LocalPort
ProcessName = $proc.ProcessName
PID = $_.OwningProcess
}
} | Sort-Object RemoteAddress
π ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π±ΡΡΡΡΠΎ Π²ΡΡΠ²ΠΈΡΡ:
- Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ RDP ΠΈΠ»ΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΌ ΠΏΠΎΡΡΠ°ΠΌ;
- Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ βΠ²ΠΈΡΡΡβ Π² ΡΠ΅ΡΠΈ;
- ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π±ΡΠΊΠ΄ΠΎΡ ΠΈΠ»ΠΈ ΡΡΠΎΡΠ½.
ΠΠΎΡΡΠ°Π²ΡΡΠ΅ ΡΡΠΎ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠ΅ΡΠ΅Π· ΡΠ°ΡΠΊ ΠΈΠ»ΠΈ ΡΠΊΡΠΈΠΏΡ Ρ Π»ΠΎΠ³ΠΎΠΌ Π² ΡΠ°ΠΉΠ».
π @win_sysadminπ ΠΠΎΠ΄Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
IT ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Max
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, DevOps π
https://max.ru/i_odmin ΠΡΠ΅ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/bash_srv Bash Π‘ΠΎΠ²Π΅ΡΡ
https://max.ru/sysadminof ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ
https://max.ru/i_odmin_book ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/i_devops DevOps: ΠΠΈΡΠ΅ΠΌ ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ.
https://max.ru/tipsysdmin Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ Π‘ΠΈΡΠ°Π΄ΠΌΠΈΠ½
Excel Π»Π°ΠΉΡΡ
Π°ΠΊ π
https://t.me/Excel_lifehack Excel Π»Π°ΠΉΡΡ
Π°ΠΊ
1C ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/odin1c_rus CΡΠ°ΡΡΠΈ, ΠΊΡΡΡΡ, ΡΠΎΠ²Π΅ΡΡ, ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° 1Π‘
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ C++π
https://max.ru/cpp_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C/C++ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Goπ
https://max.ru/golang_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go (Golang) ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Reactπ
https://max.ru/react_lib React
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Python π
https://max.ru/python_of Python Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡ.
https://max.ru/BookPython ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/bookjava ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
GitHub Π‘ΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ π
https://max.ru/githublib ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
(Data Base) π
https://max.ru/database_info ΠΡΠ΅ ΠΏΡΠΎ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π€ΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/frontend_1 ΠΠΎΠ΄Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ frontend ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ π
https://max.ru/programmist_of ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
https://max.ru/proglb ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
https://max.ru/bfbook ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ π
https://max.ru/bookflow ΠΠ΅ΠΊΡΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ Ρ IT ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΉ
https://max.ru/itmozg ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡ, Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΈΠ· ΠΌΠΈΡΠ° IT
https://max.ru/php_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° PHP ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° π¨πΌβπ»π©βπ»
Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² π
https://max.ru/itumor Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΠ°ΡΠΈΡΠ°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ π
https://max.ru/thehaking ΠΠ°Π½Π°Π» ΠΎ ΠΊΠΈΠ±Π΅ΡΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
https://max.ru/xakkep_1 Π₯Π°ΠΊΠ΅Ρ Free
ΠΠ½ΠΈΠ³ΠΈ, ΡΡΠ°ΡΡΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ² π
https://max.ru/odesigners Π‘ΡΠ°ΡΡΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ²
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° π
https://max.ru/Pomatematike ΠΠ°Π½Π°Π» ΠΏΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
https://max.ru/phismat_1 ΠΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ π
https://max.ru/progjob ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ Π² IT
ΠΠΈΡ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ π
https://max.ru/mir_teh ΠΠ°Π½Π°Π» Π΄Π»Ρ Π»ΡΠ±ΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΠΠΎΠ½ΡΡ π
https://max.ru/piterspb_78 Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³Π°
https://max.ru/mockva_life Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΠΎΡΠΊΠ²Ρ
https://max.ru/piterspb ΠΠΈΡΠ΅Ρ ΠΠΎΠ²ΠΎΡΡΠΈ: Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ / Π‘ΠΠ / ΠΠ’Π
π ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠΊΠ»ΡΡΠΈΡΡ Π³ΡΡΠΏΠΏΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² Π² ΠΊΠΎΠ½ΡΠ΅ Π΄Π½Ρ, ΡΡΠΎΠ±Ρ Π½Π΅ Π³ΠΎΠ½ΡΠ»ΠΈ Π»ΠΈΡΠ½Π΅Π΅ ΡΠ»Π΅ΠΊΡΡΠΈΡΠ΅ΡΡΠ²ΠΎ. Π ΡΡΠΊΠ°ΠΌΠΈ Π·Π°Ρ
ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ - ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ Π½ΠΈΠΆΠ΅ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΡΠ» ΡΠ΅ΡΠ΅Π· PowerShell.
π₯ ΠΠΎΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ±Π΅Π³Π°Π΅Ρ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΠΈΠΌΠ΅Π½ ΠΈ Π²ΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΡ
ΡΠ΄Π°Π»ΡΠ½Π½ΠΎ:
$computers = Get-Content "C:\Scripts\pc_list.txt"
foreach ($pc in $computers) {
try {
Write-Host "ΠΡΠΊΠ»ΡΡΠ°Ρ $pc..." -ForegroundColor Yellow
Stop-Computer -ComputerName $pc -Force -ErrorAction Stop
Write-Host "$pc Π²ΡΠΊΠ»ΡΡΠ΅Π½." -ForegroundColor Green
} catch {
Write-Host "ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π²ΡΠΊΠ»ΡΡΠΈΡΡ $pc: $_" -ForegroundColor Red
}
}
β
Π ΡΠ°ΠΉΠ»Π΅ pc_list.txt - ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ IP Π°Π΄ΡΠ΅ΡΠΎΠ², ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π° ΡΡΡΠΎΠΊΡ.
π‘ ΠΠ΅ Π·Π°Π±ΡΠ΄Ρ, ΡΡΠΎΠ±Ρ Π²ΡΡ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ
ΠΠ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΡΠ»ΡΠΆΠ±Π° WMI ΠΈ ΡΠ°Π·ΡΠ΅ΡΡΠ½ Π΄ΠΎΡΡΡΠΏ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΡΡ. Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π·Π°ΠΏΡΡΠΊΠ°ΠΉ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°.
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
ΠΠ΅Π΄Π°Π²Π½ΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΡΠΎΡΠ½ΠΎ Π½Π°ΠΉΡΠΈ, ΠΊΡΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΊΠ»ΡΡΠΈΠ» ΡΠ»ΡΠΆΠ±Ρ Windows Defender Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ². Π ΠΆΡΡΠ½Π°Π»Π΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΡΡΠ° ΠΌΡΡΠΎΡΠ°, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΠ΅ΡΠ΅Π· Event Viewer - ΡΠΎ Π΅ΡΡ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ π
Π ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
PowerShell - Π½Π°ΡΠ΅ Π²ΡΡ. ΠΠΎΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΠ°Ρ ΠΌΠ΅Π½Ρ:
Get-WinEvent -LogName "System" -FilterXPath "*[System[Provider[@Name='Service Control Manager'] and (EventID=7036)]]" |
Where-Object { $_.Message -like "*Windows Defender*" -and $_.Message -like "*stopped*" } |
Select-Object TimeCreated, Message
π Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ:
- Π€ΠΈΠ»ΡΡΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΡ 7036 - ΡΡΠΎ ΡΠΌΠ΅Π½Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ»ΡΠΆΠ±;
- ΠΡΠ΅Ρ ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²Π°ΠΌ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ (stopped ΠΈ Windows Defender);
- ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ»ΡΠΆΠ±Π° Π±ΡΠ»Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°.
π₯ ΠΡΡΡΡΠΎ, ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π±Π΅Π· GUI. ΠΡΡΠ°ΡΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΡΡ
ΠΊΡΠΈΡΠΈΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
Π Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡ
ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΡΠ°ΠΊ: ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΡΠΏΠΈΡΠ°Π»ΠΈ, ΠΈΠ· Π΄ΠΎΠΌΠ΅Π½Π° Π²ΡΠ²Π΅Π»ΠΈ, Π° ΡΡΠ΅ΡΠΊΡ Π² AD Π·Π°Π±ΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ. Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΊΠΈΡ
βΠΎΡΠΈΡΠΎΡΠ΅Π²ΡΠΈΡ
β Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΡΡ Π±ΠΎΠ»ΡΡΠ΅ - ΠΈ Π²ΠΎΡ ΡΠΆΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² AD ΡΠ°Π·Π΄ΡΠ²Π°Π΅ΡΡΡ, ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ Π±Π°ΡΠ΄Π°ΠΊ.
ΠΠ°ΠΉΡΠΈ ΡΠ°ΠΊΠΈΠ΅ "Π·Π°Π±ΡΡΡΠ΅" ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° PowerShell.
π Π‘ΠΊΡΠΈΠΏΡ Π½ΠΈΠΆΠ΅ ΠΈΡΠ΅Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π»ΠΎΠ³ΠΈΠ½ΠΈΠ»ΠΈΡΡ Π² Π΄ΠΎΠΌΠ΅Π½ 90+ Π΄Π½Π΅ΠΉ, ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π² ΡΠ°ΠΉΠ» ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· SMTP:
# ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ
$days = 90
$time = (Get-Date).AddDays(-$days)
$exportPath = "C:\Scripts\StaleComputers.csv"
# ΠΠΎΠΈΡΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ
ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ²
$computers = Get-ADComputer -Filter {LastLogonDate -lt $time -and Enabled -eq $true} -Properties LastLogonDate |
Select-Object Name, LastLogonDate, DistinguishedName
# ΠΠΊΡΠΏΠΎΡΡ Π² CSV
$computers | Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8
# ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ SMTP
$smtpServer = "smtp.yourdomain.local"
$from = "report@yourdomain.local"
$to = "admin@yourdomain.local"
$subject = "ΠΡΡΠ΅Ρ: Π£ΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΡΡΠ΅ΡΠ½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ²"
$body = "ΠΠΎ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ², Π½Π΅ Π²Ρ
ΠΎΠ΄ΠΈΠ²ΡΠΈΡ
Π² Π΄ΠΎΠΌΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ $days Π΄Π½Π΅ΠΉ."
# ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΏΠΈΡΡΠΌΠ°
Send-MailMessage -From $from -To $to -Subject $subject -Body $body -SmtpServer $smtpServer -Attachments $exportPath
β
ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΊΡΠΈΠΏΡ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Task Scheduler ΡΠ°Π· Π² ΠΌΠ΅ΡΡΡ!
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠΊΡΡΡΡΡ
ΠΏΠΎΠΆΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ ΡΠ΅ΡΡΡΡΠΎΠ² Π² Windows ΠΈ ΠΊΠ°ΠΊ ΠΈΡ
Π±ΡΡΡΡΠΎ Π²ΡΡΠ²ΠΈΡΡ.
ΠΡΠ²Π°Π΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠΎΠ΄Π΅ Π±Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΠΎΡΠΌΠ°ΠΆΠΈΠ²Π°Π΅Ρ. CPU Π½Π΅ Π·Π°Π³ΡΡΠΆΠ΅Π½, RAM Π² Π½ΠΎΡΠΌΠ΅, Π΄ΠΈΡΠΊ Π½Π΅ ΡΡΠ΅ΡΠΈΡ, Π° Π»Π°Π³ΠΈ Π΅ΡΡΡ. Π ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
Ρ ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡ ΡΠΊΡΡΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ΅ Π·Π°Π΄Π°Ρ.
π₯ ΠΠΎΡ ΠΏΠ°ΡΠΎΡΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ Π² PowerShell, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π½Π°ΠΉΡΠΈ Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠ°:
1οΈβ£ ΠΡΠΎΡΠ΅ΡΡΡ Ρ Π°Π½ΠΎΠΌΠ°Π»ΡΠ½ΠΎ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΡΠΊΠΈ Π² ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ
):
Get-Process | Sort-Object -Property Handles -Descending | Select-Object -First 10
ΠΡΠ»ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ Ρ ΡΠΎΡΠ½ΡΠΌΠΈ ΡΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² β ΡΡΠΎ ΡΡΠ΅Π²ΠΎΠΆΠ½ΡΠΉ Π·Π²ΠΎΠ½ΠΎΡΠ΅ΠΊ.
2οΈβ£ ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ (ΡΡΠΎΠ±Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π±ΠΎΠ»ΡΠ»ΠΈΠ²ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ):
Get-NetTCPConnection | Group-Object -Property OwningProcess | Sort-Object Count -Descending | Select-Object -First 10
ΠΡΡΡΠ½ΠΈΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π΄Π΅ΡΠΆΠ°Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ Π³ΡΡΠ·ΠΈΡ ΡΠ΅ΡΡ.
3οΈβ£ Π€Π°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ (ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ, ΠΊΡΠΎ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ Π³ΡΡΠ·ΠΈΡ Π΄ΠΈΡΠΊ):
Get-Process | Sort-Object -Property Handles -Descending | Select-Object -First 10
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠ°, Π΅ΡΠ»ΠΈ Π΄ΠΈΡΠΊ Π·Π°Π½ΡΡ, Π½ΠΎ Π½Π΅ ΡΡΠ½ΠΎ, ΠΊΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΈΡΠ°Π΅Ρ.
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ°ΠΌΡΡ
Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ
ΡΠΈΡΡΠ°ΡΠΈΠΉ β ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΆΠ°Π»ΡΡΡΡΡ, ΡΡΠΎ ΠΈΡ
ΡΡΠ΅ΡΠ½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ Π±Π΅Π· Π²ΠΈΠ΄ΠΈΠΌΡΡ
ΠΏΡΠΈΡΠΈΠ½. Π Π°Π·Π±ΠΈΡΠ°Π΅ΡΡΡΡ Π² Π»ΠΎΠ³Π°Ρ
β Π° ΡΠ°ΠΌ Event ID 4740 Ρ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠΎΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ?
π₯ PowerShell ΡΠΏΠ°ΡΠ°Π΅Ρ! ΠΠΎΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΡΠΎ Π½Π°ΠΉΡΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ:
$LockedUser = "user@domain.com" # ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π° Π½ΡΠΆΠ½ΡΠΉ Π°ΠΊΠΊΠ°ΡΠ½Ρ
Get-WinEvent -LogName Security | Where-Object {
$_.Id -eq 4740 -and $_.Message -match $LockedUser
} | Select-Object TimeCreated, @{n="ΠΡΡΠΎΡΠ½ΠΈΠΊ";e={($_.Properties[1].Value)}}
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ ΠΆΡΡΠ½Π°Π» Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π½Π°ΠΉΠ΄Π΅Ρ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ 4740 (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ) ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΊΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ»ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΡΠ°Π½Π½ΡΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° β ΠΏΠΎΡΠ° ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ!
π‘ ΠΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Scheduled Task Ρ ΡΡΠΈΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠΌ ΠΈΠ»ΠΈ Π·Π°Π²ΡΠ·Π°ΡΡ Π½Π° SIEM.
π @win_sysadminπ ΠΡΠ΅ΠΌ Π°Π΄ΠΌΠΈΠ½Π°ΠΌ Π΄ΠΎΠ±ΡΠΎΠ³ΠΎ ΡΡΡΠ°!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π³ΡΡΠΏΠΏΠΎΠ²ΡΡ
ΠΏΠΎΠ»ΠΈΡΠΈΠΊ (GPO) Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ
Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΆΠ΄Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ²Π°Π΅Ρ ΡΠ°Π· Π² 90 ΠΌΠΈΠ½ΡΡ + ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π΄ΠΎ 30 ΠΌΠΈΠ½ΡΡ).
π₯ ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
gpupdate /force
ΠΠΎ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ Π½Π° Π²ΡΠ΅Ρ
ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ
Π΄ΠΎΠΌΠ΅Π½Π° ΡΡΠ°Π·Ρ? Π’ΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ PowerShell:
Invoke-GPUpdate -Computer "ΠΠΌΡΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°" -RandomDelayInMinutes 0
Π Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π½Π° Π²ΡΠ΅Ρ
ΠΌΠ°ΡΠΈΠ½Π°Ρ
Π² OU? Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=domain,DC=local" | ForEach-Object {
Invoke-GPUpdate -Computer $_.Name -RandomDelayInMinutes 0 -AsJob
}
πΉ gpupdate /force - Ρ
ΠΎΡΠΎΡ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
πΉ Invoke-GPUpdate - ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ GPO.
πΉ ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ρ Get-ADComputer - ΠΈΠ΄Π΅Π°Π»ΡΠ½Π° Π΄Π»Ρ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π² Π΄ΠΎΠΌΠ΅Π½Π΅.
π @win_sysadminπ ΠΡΠ΅ΠΌ Π°Π΄ΠΌΠΈΠ½Π°ΠΌ Π΄ΠΎΠ±ΡΠΎΠ³ΠΎ Π²Π΅ΡΠ΅ΡΠ°!
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ΅ΠΌΡ ΡΠ΅Π½Π΅Π²ΡΡ
ΠΊΠΎΠΏΠΈΠΉ Π² Windows - Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΡΠΈΡΡΠΎ PowerShell-ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°. Π’Π΅Π½Π΅Π²ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ (VSS) Π½Π΅ ΡΠ°Π· ΡΠΏΠ°ΡΠ°Π»ΠΈ ΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ Π²Π΅ΡΠ½ΡΡΡ ΡΠ΄Π°Π»ΡΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΠ· Π±ΡΠΊΠ°ΠΏΠ°. ΠΠΈΠΆΠ΅ - ΠΌΠΎΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ Β«Π½Π°Π±ΠΎΡ Π²ΡΠΆΠΈΠ²Π°Π»ΡΡΠΈΠΊΠ°Β»: ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ½Π°ΠΏΡΠΎΡ, ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ, Π²ΡΡΠ°ΡΠΈΡΡ ΡΠ°ΠΉΠ», ΠΏΠΎΡΠΈΡΡΠΈΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΠ΅.
π ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ VSS ΡΠ΅ΡΠ΅Π· PowerShell
Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π½Π΅Π²ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΎΠΌΠ° C:
# PS 5.1/7+ (ΡΠ΅ΡΠ΅Π· CIM)
Invoke-CimMethod -ClassName Win32_ShadowCopy -MethodName Create `
-Arguments @{ Volume = 'C:\'; Context = 'ClientAccessible' } | Out-Null
Π‘ΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΡΠ΅Π½Π΅Π²ΡΡ
ΠΊΠΎΠΏΠΈΠΉ:
Get-CimInstance Win32_ShadowCopy |
Sort-Object InstallDate -Descending |
Format-Table ID, VolumeName, InstallDate, ClientAccessible, DeviceObject -Auto
Π‘ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΡΡ ΡΠ²Π΅ΠΆΡΡ ΠΊΠΎΠΏΠΈΡ Π² ΠΏΠ°ΠΏΠΊΡ (ΡΠ΄ΠΎΠ±Π½ΠΎ Π»Π°Π·ΠΈΡΡ ΠΏΠΎ ΡΠ½Π°ΠΏΡΠΎΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠΎΠΌ):
$sh = Get-CimInstance Win32_ShadowCopy | Sort-Object InstallDate -Desc | Select-Object -First 1
$mount = 'C:\ShadowMounts\C_latest'
New-Item -ItemType Directory -Path $mount -Force | Out-Null
$dev = ($sh.DeviceObject.TrimEnd('\')) + '\'
cmd /c "mklink /d `"$mount`" `"$dev`""
# ΠΠΎΡΠΎΠ²ΠΎ: ΠΎΡΠΊΡΡΠ²Π°ΠΉΡΠ΅ C:\ShadowMounts\C_latest
ΠΡΡΡΠ½ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ (Π±Π΅Π· ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ):
$path = 'C:\Data\report.xlsx' # ΡΡΠΎ Ρ
ΠΎΡΠΈΠΌ Π²Π΅ΡΠ½ΡΡΡ
$sh = Get-CimInstance Win32_ShadowCopy | Sort-Object InstallDate -Desc | Select-Object -First 1
$rel = $path -replace '^[A-Za-z]:\\','' # ΡΠ±ΡΠ°ΡΡ "C:\"
$src = Join-Path ( ($sh.DeviceObject.TrimEnd('\')) + '\' ) $rel
Copy-Item $src $path -Force
Π£Π΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π½Π΅Π²ΡΡ ΠΊΠΎΠΏΠΈΡ:
$sh | Remove-CimInstance
π§ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΡΠ΅Π½Π΅Π²ΡΡ
ΠΊΠΎΠΏΠΈΠΉ
ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ:
vssadmin list shadowstorage
vssadmin resize shadowstorage /For=C: /On=C: /MaxSize=20%
π ΠΡΠ»ΠΈ ΠΌΠ΅ΡΡΠ° ΠΌΠ°Π»ΠΎ - VSS Π½Π°ΡΠ½ΡΡ ΡΠ½ΠΎΡΠΈΡΡ ΡΠ°ΠΌΡΠ΅ ΡΡΠ°ΡΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ. ΠΠ»Π°Π½ΠΈΡΡΠΉΡΠ΅ Β«MaxSizeΒ».
β° ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ ΡΠ½Π°ΠΏΡΠΎΡΠ° (02:00)
$cmd = 'powershell.exe'
$arg = '-NoProfile -WindowStyle Hidden -Command "Invoke-CimMethod -ClassName Win32_ShadowCopy -MethodName Create -Arguments @{Volume=''C:\'';Context=''ClientAccessible''} | Out-Null"'
$action = New-ScheduledTaskAction -Execute $cmd -Argument $arg
$trigger = New-ScheduledTaskTrigger -Daily -At 02:00
Register-ScheduledTask -TaskName 'Daily-VSS-C' -Action $action -Trigger $trigger -RunLevel Highest
ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Ρ PowerShell 7 ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡπ ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ - Π Π°Π½ΡΠΎΠΌΠ²Π°ΡΡ Π»ΡΠ±ΠΈΡ Π³ΡΠΎΡ Π°ΡΡ VSS: ΠΈΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΎΠ΄Π΅powershell.exeΠ½Π°pwsh.exe.
vssadmin delete shadows /all /quiet, wmic shadowcopy delete, diskshadow.exe.
ΠΠΎΠ³ΠΈ: Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π°ΡΠ΄ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (Sysmon Event ID 1) ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΠ΄ ΡΡΠΈ ΡΡΠΈΠ»ΠΈΡΡ ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
- ΠΠ³ΡΠ°Π½ΠΈΡΡΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ: Π½Π° ΡΠ°Π±ΠΎΡΠΈΡ
ΡΡΠ°Π½ΡΠΈΡΡ
, Π³Π΄Π΅ VSS Π°Π΄ΠΌΠΈΠ½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½ β AppLocker/WDAC Π΄Π»Ρ vssadmin.exe, wmic.exe, diskshadow.exe.
- ΠΡΡΠ½Π°Π»Ρ VSS: Π·Π°Π³Π»ΡΠ΄ΡΠ²Π°ΠΉΡΠ΅ Π² Application ΠΈ Microsoft-Windows-Volume Shadow Copy/Operational ΠΏΡΠΈ ΡΠ±ΠΎΡΡ
ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°.
π§© Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ Π·Π°ΡΡΠΊΠΈ ΠΈ Π»Π°ΠΉΡΡ
Π°ΠΊΠΈ
- ΠΠΎΡΡΡΠΏΠ° Π½Π΅Ρ ΠΊ ΠΏΡΡΡΠΌ ΡΠ½Π°ΠΏΡΠΎΡΠ° β Π΄ΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN\ Π² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ° Π½Π° Π²ΡΠ΅ΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
- ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ° β ΡΠ°ΡΡΠΈΡΡΡΠ΅ shadowstorage ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ Π΄ΠΈΡΠΊ-Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅: /For=C: /On=D:.
- ΠΡΠΆΠ½Ρ Β«ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈΒ» Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ - ΡΡΠ°Π²ΡΡΠ΅ Context='ClientAccessible' (ΠΈΠ»ΠΈ ClientAccessibleWriters Π΄Π»Ρ VSS-aware ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ).
π @win_sysadminπ ΠΠΎΠ΄Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
IT ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Max
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, DevOps π
https://max.ru/i_odmin ΠΡΠ΅ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/bash_srv Bash Π‘ΠΎΠ²Π΅ΡΡ
https://max.ru/sysadminof ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ
https://max.ru/i_odmin_book ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/i_devops DevOps: ΠΠΈΡΠ΅ΠΌ ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ.
https://max.ru/tipsysdmin Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ Π‘ΠΈΡΠ°Π΄ΠΌΠΈΠ½
1C ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/odin1c_rus CΡΠ°ΡΡΠΈ, ΠΊΡΡΡΡ, ΡΠΎΠ²Π΅ΡΡ, ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° 1Π‘
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ C++π
https://max.ru/cpp_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C/C++ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Goπ
https://max.ru/golang_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go (Golang) ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Reactπ
https://max.ru/react_lib React
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Python π
https://max.ru/python_of Python Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡ.
https://max.ru/BookPython ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/bookjava ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
GitHub Π‘ΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ π
https://max.ru/githublib ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
(Data Base) π
https://max.ru/database_info ΠΡΠ΅ ΠΏΡΠΎ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π€ΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/frontend_1 ΠΠΎΠ΄Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ frontend ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ π
https://max.ru/programmist_of ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
https://max.ru/proglb ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
https://max.ru/bfbook ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ π
https://max.ru/bookflow ΠΠ΅ΠΊΡΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ Ρ IT ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΉ
https://max.ru/itmozg ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡ, Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΈΠ· ΠΌΠΈΡΠ° IT
https://max.ru/php_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° PHP ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° π¨πΌβπ»π©βπ»
Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² π
https://max.ru/itumor Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΠ°ΡΠΈΡΠ°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ π
https://max.ru/thehaking ΠΠ°Π½Π°Π» ΠΎ ΠΊΠΈΠ±Π΅ΡΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
https://max.ru/xakkep_1 Π₯Π°ΠΊΠ΅Ρ Free
ΠΠ½ΠΈΠ³ΠΈ, ΡΡΠ°ΡΡΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ² π
https://max.ru/odesigners Π‘ΡΠ°ΡΡΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ²
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° π
https://max.ru/Pomatematike ΠΠ°Π½Π°Π» ΠΏΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
https://max.ru/phismat_1 ΠΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ π
https://max.ru/progjob ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ Π² IT
ΠΠΈΡ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ π
https://max.ru/mir_teh ΠΠ°Π½Π°Π» Π΄Π»Ρ Π»ΡΠ±ΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΠΠΎΠ½ΡΡ π
https://max.ru/piterspb_78 Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³Π°
https://max.ru/mockva_life Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΠΎΡΠΊΠ²Ρ
π ΠΠ΄ΠΌΠΈΠ½Ρ, Π²ΡΠ΅ΠΌ Π΄ΠΎΠ±ΡΠΎΠ³ΠΎ ΠΏΠΎΠ½Π΅Π΄Π΅Π»ΡΠ½ΠΈΠΊΠ°!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π½Π°ΠΏΠΎΠΌΠ½Ρ ΠΏΡΠΎ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΡΠ½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ - PowerShell-Π΄ΠΈΡΠΊΠΈ (PSDrive). ΠΡΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ βΠ΄ΠΈΡΠΊΠΈβ ΠΊ ΡΠ°Π·Π½ΡΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌ: ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° (
C:), ΡΠ΅Π΅ΡΡΡ (HKCU:/HKLM:), ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ (Cert:) ΠΈ Ρ.Π΄. Π‘ Π½ΠΈΠΌΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ Π½Π°Π²ΠΈΠ³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅ΡΠΎΠ² Location.
π§ ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
# ΠΠΎΠΊΠ°Π·Π°ΡΡ Π²ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ PSDrive
Get-PSDrive
# ΠΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
Get-PSDrive -PSProvider FileSystem
# ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ ΡΠ΅Π΅ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ°ΠΌ
Set-Location HKLM:\SOFTWARE
Push-Location .\Microsoft
Get-Location
(Π Π΄Π°, Get-PSDrive ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΈ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ Π²ΡΠΎΠ΄Π΅ Registry/Certificate/Environment - ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ ΠΎΠ±Π·ΠΎΡΠ°).
π§© Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ²ΠΎΠΈΡ
βΠ΄ΠΈΡΠΊΠΎΠ²β:
# ΠΠΎΠ½ΡΠΈΡΡΠ΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΡΠ»ΡΠΊ Π½Π° ΠΏΠ°ΠΏΠΊΡ
New-PSDrive -Name Tools -PSProvider FileSystem -Root "C:\Admin\Tools"
# ΠΠΎΡΠΎΡΠΊΠΈΠΉ ΠΏΡΡΡ ΠΊ Π²Π°ΠΆΠ½ΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΡΠ΅Π΅ΡΡΡΠ°
New-PSDrive -Name CV -PSProvider Registry -Root HKLM:\Software\Microsoft\Windows\CurrentVersion
β οΈ Π’Π°ΠΊΠΈΠ΅ Π΄ΠΈΡΠΊΠΈ ΠΆΠΈΠ²ΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΡΡΠΈΠΈ. Π₯ΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ - Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ New-PSDrive Π² ΠΏΡΠΎΡΠΈΠ»Ρ ($PROFILE).
π§Ή Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅:
Remove-PSDrive -Name Tools
ΠΠ΅Π»ΡΠ·Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π΄ΠΈΡΠΊ, Π΅ΡΠ»ΠΈ Π²Ρ βΠ½Π° Π½ΡΠΌβ (ΡΠ½Π°ΡΠ°Π»Π° Set-Location Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ).
π‘ ΠΠ°ΠΉΡΡ
Π°ΠΊΠΈ ΠΈΠ· ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ:
- ΠΠ΅ΡΠΆΠΈΡΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Π°Π»ΠΈΠ°ΡΡ Π½Π° Π΄Π»ΠΈΠ½Π½ΡΠ΅ Π²Π΅ΡΠΊΠΈ ΡΠ΅Π΅ΡΡΡΠ° Π΄Π»Ρ Π±ΡΡΡΡΡΡ
ΠΏΡΠ°Π²ΠΎΠΊ.
- ΠΠ»Ρ ΠΎΠ³Π»ΡΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π΅Π»Π°ΠΉΡΠ΅ Get-PSDrive | Format-Table Name,Provider,Root -Auto.
- Π ΠΏΡΠΎΡΠΈΠ»Π΅ Ρ
ΡΠ°Π½ΠΈΡΠ΅ ΡΠ²ΠΎΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΡΠΊΠΈΡ
Π·Π°Π΄Π°Ρ.
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ, Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΌ ΡΡΡΠΊΠ΅ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π΄ΠΈΡΠΊΠΎΠ² Π² Windows ΡΠ΅ΡΠ΅Π· PowerShell. ΠΠ½ΠΎΠ³Π΄Π° ΠΌΠ΅ΡΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ°Π»ΠΎ, ΠΈ Π΅ΡΠ»ΠΈ Π½Π΅ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π²ΠΎΠ²ΡΠ΅ΠΌΡ - ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π»ΠΎΠ³ΠΈ.
Get-PSDrive -PSProvider FileSystem | Select-Object Name,@{n="FreeGB";e={[math]::Round($_.Free/1GB,2)}},@{n="Used%";e={[math]::Round(100-($_.Free/$_.Used+ $_.Free)*100,2)}}
ΠΠ½ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ:
- ΠΠΌΡ Π΄ΠΈΡΠΊΠ°
- Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ (ΠΠ)
- ΠΡΠΎΡΠ΅Π½Ρ Π·Π°Π½ΡΡΠΎΡΡΠΈ
ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Π·Π°Π΄Π°Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΡΡΡΡ Π½Π° ΠΏΠΎΡΡΡ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°ΡΡ Π»ΠΎΠ³. Π Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠΎ ΠΊ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· Zabbix/PRTG), ΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°ΠΌ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡ ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ.
π @win_sysadminπ ΠΠΎΠ΄Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
IT ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Max
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, DevOps π
https://max.ru/i_odmin ΠΡΠ΅ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/bash_srv Bash Π‘ΠΎΠ²Π΅ΡΡ
https://max.ru/sysadminof ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ
https://max.ru/i_odmin_book ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/i_devops DevOps: ΠΠΈΡΠ΅ΠΌ ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ.
https://max.ru/tipsysdmin Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ Π‘ΠΈΡΠ°Π΄ΠΌΠΈΠ½
1C ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/odin1c_rus CΡΠ°ΡΡΠΈ, ΠΊΡΡΡΡ, ΡΠΎΠ²Π΅ΡΡ, ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° 1Π‘
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ C++π
https://max.ru/cpp_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C/C++ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Goπ
https://max.ru/golang_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go (Golang) ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Reactπ
https://max.ru/react_lib React
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Python π
https://max.ru/python_of Python Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡ.
https://max.ru/BookPython ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/bookjava ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
GitHub Π‘ΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ π
https://max.ru/githublib ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
(Data Base) π
https://max.ru/database_info ΠΡΠ΅ ΠΏΡΠΎ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π€ΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/frontend_1 ΠΠΎΠ΄Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ frontend ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ π
https://max.ru/programmist_of ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
https://max.ru/proglb ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
https://max.ru/bfbook ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ π
https://max.ru/bookflow ΠΠ΅ΠΊΡΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ Ρ IT ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΉ
https://max.ru/itmozg ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡ, Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΈΠ· ΠΌΠΈΡΠ° IT
https://max.ru/php_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° PHP ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° π¨πΌβπ»π©βπ»
Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² π
https://max.ru/itumor Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΠ°ΡΠΈΡΠ°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ π
https://max.ru/thehaking ΠΠ°Π½Π°Π» ΠΎ ΠΊΠΈΠ±Π΅ΡΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
https://max.ru/xakkep_1 Π₯Π°ΠΊΠ΅Ρ Free
ΠΠ½ΠΈΠ³ΠΈ, ΡΡΠ°ΡΡΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ² π
https://max.ru/odesigners Π‘ΡΠ°ΡΡΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ²
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° π
https://max.ru/Pomatematike ΠΠ°Π½Π°Π» ΠΏΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
https://max.ru/phismat_1 ΠΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ π
https://max.ru/progjob ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ Π² IT
ΠΠΈΡ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ π
https://max.ru/mir_teh ΠΠ°Π½Π°Π» Π΄Π»Ρ Π»ΡΠ±ΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΠΠΎΠ½ΡΡ π
https://max.ru/piterspb_78 Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³Π°
https://max.ru/mockva_life Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΠΎΡΠΊΠ²Ρ
π ΠΡΠ΅ΠΌ Π°Π΄ΠΌΠΈΠ½Π°ΠΌ Π΄ΠΎΠ±ΡΠΎΠ³ΠΎ Π²Π΅ΡΠ΅ΡΠ°!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ΄Π΅Π»ΡΡΡ ΠΏΡΠΈΡΠΌΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΠΏΠ°ΡΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΆΠ°Π»ΡΡΡΡΡ Π½Π° Β«ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΒ» ΠΈΠ»ΠΈ Β«ΡΠ΅ΡΠ΅Π²ΡΠ΅ Π»Π°Π³ΠΈΒ». Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²ΠΈΠ½ΠΎΠ²Π°Ρ Π²ΠΎΠ²ΡΠ΅ Π½Π΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ, Π° ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅.
π₯ ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π°Π΄Π°ΠΏΡΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
Get-NetAdapterStatistics | Select-Object Name, ReceivedBytes, SentBytes, ReceivedErrors, OutboundErrors
ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ½ΡΡΡΡ
/ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ
Π±Π°ΠΉΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅. ΠΡΠ»ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΡΡ ReceivedErrors ΠΈΠ»ΠΈ OutboundErrors - Π·Π½Π°ΡΠΈΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΆΠ΅Π»Π΅Π·Π΅, Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠ°Π±Π΅Π»Π΅.
Π Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠΊΠ»:
while ($true) {
Get-NetAdapterStatistics -Name "Ethernet0" |
Select-Object Name, ReceivedErrors, OutboundErrors
Start-Sleep -Seconds 5
}
Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Β«ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΒ» Π·Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ
ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΡΠΈΡΠΌΠΎΠ² ΠΈΠ· PowerShell, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ
Π² ΡΠ΅ΡΠΈ. Π§Π°ΡΡΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ, Π°ΡΠ΄ΠΈΡΠ°Ρ
ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΌΠ°ΡΠΈΠ½.
π₯ ΠΡΠΈΠΌΠ΅Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ:
$computers = "PC1","PC2","PC3"
foreach ($c in $computers) {
Write-Host "Π‘ΠΎΠ±ΠΈΡΠ°Ρ Π΄Π°Π½Π½ΡΠ΅ Ρ $c..."
Get-WmiObject -Class Win32_ComputerSystem -ComputerName $c |
Select-Object Name, Manufacturer, Model, TotalPhysicalMemory
Get-WmiObject -Class Win32_OperatingSystem -ComputerName $c |
Select-Object Caption, Version, OSArchitecture, LastBootUpTime
}
π Π’Π°ΠΊΠΎΠΉ ΡΠΊΡΠΈΠΏΡ Π²ΡΠ΄Π°ΡΡ:
- ΠΈΠΌΡ ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΠ,
- ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ,
- ΠΎΠ±ΡΡΠΌ RAM,
- Π²Π΅ΡΡΠΈΡ ΠΠ‘, ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡ,
- Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
π‘ ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π² CSV:
$results = foreach ($c in $computers) {
Get-WmiObject -Class Win32_OperatingSystem -ComputerName $c |
Select-Object PSComputerName, Caption, Version, LastBootUpTime
}
$results | Export-Csv "C:\Temp\computers.csv" -NoTypeInformation -Encoding UTF8
Π ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΌΠ°ΡΠΈΠ½Π°ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ Π² Excel ΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΏΠΎ Π»ΡΠ±ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ.
π¬ Π ΠΊΠ°ΠΊ Π²Ρ Π²Π΅Π΄ΡΡΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΠΊΠ° ΠΌΠ°ΡΠΈΠ½? Excel, CMDB, Intune, SCCM ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΈ ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ?
π @win_sysadminπ ΠΡΠΈΠ²Π΅Ρ, Π°Π΄ΠΌΠΈΠ½Ρ!
ΠΠ°ΠΊΠΈΠ΄Π°Π» Π±ΡΡΡΡΡΠΉ ΡΠ΅ΠΊ-ΡΠΊΡΠΈΠΏΡl, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Ρ
ΠΎΡΡΡ/ΠΏΠΎΡΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΡΠ³ΠΎΡΠΈΡ.
ΠΡΡΡΡΡΠΉ ΡΠ΅ΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ
ΠΎΡΡΠ°
$HostName = 'site.contoso.com'
$Port = 443
$tcp = [Net.Sockets.TcpClient]::new($HostName, $Port)
$ssl = [Net.Security.SslStream]::new($tcp.GetStream(), $false, { $true })
$ssl.AuthenticateAsClient($HostName)
$cert = [Security.Cryptography.X509Certificates.X509Certificate2]::new($ssl.RemoteCertificate)
[pscustomobject]@{
Host = $HostName
Port = $Port
Subject = $cert.Subject
NotAfter = $cert.NotAfter
DaysLeft = [math]::Floor(($cert.NotAfter - (Get-Date)).TotalDays)
}
$ssl.Dispose(); $tcp.Close()
Π‘ΠΊΠ°Π½ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ΅Π»Π΅ΠΉ + ΡΡΠ°ΡΡΡ
$targets = @(
'site1.contoso.com:443',
'mail.contoso.com:993',
'rdgw.contoso.com:443'
)
$result = foreach ($t in $targets) {
$host,$port = $t.Split(':',2)
try {
$tcp = [Net.Sockets.TcpClient]::new($host,[int]$port)
$ssl = [Net.Security.SslStream]::new($tcp.GetStream(), $false, { $true })
$ssl.AuthenticateAsClient($host)
$cert = [Security.Cryptography.X509Certificates.X509Certificate2]::new($ssl.RemoteCertificate)
$days = [math]::Floor(($cert.NotAfter - (Get-Date)).TotalDays)
[pscustomobject]@{
Host = $host
Port = [int]$port
CN = $cert.GetNameInfo('SimpleName',$false)
NotAfter = $cert.NotAfter
DaysLeft = $days
Status = if ($days -le 14) { 'π₯ expiring β€14d' }
elseif ($days -le 30) { 'β οΈ <30d' }
else { 'β
ok' }
}
}
catch {
[pscustomobject]@{
Host=$host; Port=[int]$port; CN=$null; NotAfter=$null; DaysLeft=$null
Status="β error: $($_.Exception.Message)"
}
}
finally {
if ($ssl) { $ssl.Dispose() }
if ($tcp) { $tcp.Close() }
}
}
$result | Sort-Object DaysLeft | Format-Table -AutoSize
# ΠΠ»Ρ ΠΎΡΡΡΡΠ°:
# $result | Export-Csv .\tls_report.csv -NoTypeInformation -Encoding UTF8
ΠΠ»ΡΡ: ΠΌΠΎΠΆΠ½ΠΎ ΠΊΡΡΡΠΈΡΡ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ Π² Task Scheduler ΠΈ ΡΠ»Π°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ DaysLeft β€ 30. Π‘ΠΏΠ°ΡΠ°Π΅Ρ ΠΎΡ Β«Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΡ
Β» ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½Π°.
π @win_sysadmin