Почему Get-Content тормозит?
📖 Вы читаете лог-файл в 10 ГБ через
🛠 Решение:
❓Почему это лучше:
-
- Подходит для гигабайтных логов.
А как вы обрабатываете огромные файлы? Делитесь лайфхаками!
🌐 @automate_today | #powershell
📖 Вы читаете лог-файл в 10 ГБ через
Get-Content, а PowerShell зависает на час. В чём проблема? Get-Content загружает весь файл в память перед обработкой. Для больших файлов — это убийственно. 🛠 Решение:
# Медленно:
$lines = Get-Content "huge.log" # Тормозит и жрёт память
# Быстро (чтение построчно):
$reader = [System.IO.StreamReader]::new("huge.log")
while ($line = $reader.ReadLine()) {
# Обрабатываем $line здесь
}
$reader.Close()
❓Почему это лучше:
-
StreamReader читает файл потоково, без загрузки в память. - Подходит для гигабайтных логов.
А как вы обрабатываете огромные файлы? Делитесь лайфхаками!
Get-Content для больших файлов — как пытаться выпить океан через трубочку.
🌐 @automate_today | #powershell
👍3
Как заставить PowerShell приносить тебе кофе? Ну почти…
🛠 PowerShell может автоматизировать что угодно — даже отправлять сообщения в Telegram или включать умный чайник.
Пример:
💡Идеи для автоматизации:
- Скрипт, который пишет вам, когда заканчивается CI/CD-пайплайн.
- Уведомление, если сервер падает.
Что бы вы автоматизировали в повседневной жизни?
🌐 @automate_today | #powershell
🛠 PowerShell может автоматизировать что угодно — даже отправлять сообщения в Telegram или включать умный чайник.
Пример:
# Отправляем уведомление (через Telegram Bot API):
$token = "YOUR_BOT_TOKEN"
$chat_id = "YOUR_CHAT_ID"
$message = "Кофе готов! 🚀"
Invoke-RestMethod -Uri "https://api.telegram.org/bot$token/sendMessage?chat_id=$chat_id&text=$message"
💡Идеи для автоматизации:
- Скрипт, который пишет вам, когда заканчивается CI/CD-пайплайн.
- Уведомление, если сервер падает.
Что бы вы автоматизировали в повседневной жизни?
🌐 @automate_today | #powershell
1👍2
Автоматизация Excel без макросов
➕ Плюсы:
- Не требует Excel на сервере.
- Поддержка стилей, графиков и даже PivotTables!
👉 Кто ещё ненавидит VBA?
🌐 @automate_today | #powershell
ImportExcel — модуль, который меняет всё # Установка: Install-Module ImportExcel -Force
$data = Get-Process | Select Name, CPU
$data | Export-Excel -Path "report.xlsx" -AutoSize -TableName "Processes"
➕ Плюсы:
- Не требует Excel на сервере.
- Поддержка стилей, графиков и даже PivotTables!
👉 Кто ещё ненавидит VBA?
🌐 @automate_today | #powershell
👍1
Почему -ErrorAction SilentlyContinue — это зло?
🚨 Проблемы:
- Ошибки пропадают, а скрипт продолжает работать с битыми данными.
- Невозможно отладить, потому что вы даже не знаете, что что-то сломалось.
Что делать вместо этого?
❓Когда можно использовать SilentlyContinue?
Только если ошибка ожидаема и не критична (например, проверка, существует ли файл перед удалением).
👉 Вы тоже когда-то глушили ошибки, а потом час искали баг? Поделитесь в коментариях!
🌐 @automate_today | #powershell
-ErrorAction SilentlyContinue — это как заглушить Check Engine в машине и надеяться, что всё ок. 🚗💥 🚨 Проблемы:
- Ошибки пропадают, а скрипт продолжает работать с битыми данными.
- Невозможно отладить, потому что вы даже не знаете, что что-то сломалось.
Что делать вместо этого?
# Вариант 1: Ловить ошибки и логировать
try {
Get-Item "C:\NonExistentFile.txt" -ErrorAction Stop
} catch {
Write-Warning "Файл не найден: $_"
# Или отправить в Telegram/Slack
}
# Вариант 2: Проверять результат
$file = Get-Item "C:\NonExistentFile.txt" -ErrorAction SilentlyContinue
if (-not $file) {
Write-Warning "Файл не найден, но мы это обработали!"
}
❓Когда можно использовать SilentlyContinue?
Только если ошибка ожидаема и не критична (например, проверка, существует ли файл перед удалением).
👉 Вы тоже когда-то глушили ошибки, а потом час искали баг? Поделитесь в коментариях!
🌐 @automate_today | #powershell
👍3
Как автоматизировать IIS?
Хотите управлять сайтами, пулами приложений или настройками SSL без ручного кликания? PowerShell спешит на помощь!
Примеры:
Плюсы:
- Можно полностью автоматизировать развёртывание.
- Интеграция с Ansible/Terraform (через PowerShell-провижнры).
👉 Кто ещё ненавидит IIS Manager? Дайте знать!
🌐 @automate_today | #powershell
WebAdministration модуль — ваш друг Хотите управлять сайтами, пулами приложений или настройками SSL без ручного кликания? PowerShell спешит на помощь!
Примеры:
# Получить список всех сайтов
Get-Website | Select Name, State
# Перезапустить пул приложений
Restart-WebAppPool -Name "MyAppPool"
# Создать новый сайт
New-Website -Name "TestSite" -Port 8080 -PhysicalPath "C:\sites\test"
Плюсы:
- Можно полностью автоматизировать развёртывание.
- Интеграция с Ansible/Terraform (через PowerShell-провижнры).
👉 Кто ещё ненавидит IIS Manager? Дайте знать!
🌐 @automate_today | #powershell
👍2
Invoke-WebRequest тормозит? Вот как ускорить в 5 раз
PowerShell и медленные запросы — вечная история
Если ваш
🛠 Ускоряем запросы:
❓Почему это работает?
-
-
-
🧑💻 Тест:
Попробуйте оба варианта с
А какие у вас есть способы ускорения HTTP-запросов в PowerShell?
🌐 @automate_today | #powershell
PowerShell и медленные запросы — вечная история
Если ваш
Invoke-WebRequest или curl (да, в PowerShell есть алиас!) работает как улитка в сиропе, возможно, вы просто не знаете одну хитрость. 🛠 Ускоряем запросы:
# Медленный вариант (по умолчанию)
$response = Invoke-WebRequest -Uri "https://api.example.com/data"
# Быстрый вариант (отключаем проверку SSL + используем BasicParsing)
$response = Invoke-WebRequest -Uri "https://api.example.com/data" -DisableKeepAlive -SkipCertificateCheck -UseBasicParsing
❓Почему это работает?
-
-SkipCertificateCheck убирает верификацию SSL (осторожно, только для доверенных источников!). -
-UseBasicParsing отключает парсинг DOM, если он не нужен. -
-DisableKeepAlive предотвращает "липкие" соединения, которые иногда тормозят. 🧑💻 Тест:
Попробуйте оба варианта с
Measure-Command { ... } и сравните время (вставить команды выше вместо точек). Вы будете крайне удивлены. Разница примерно в 12 раз. А какие у вас есть способы ускорения HTTP-запросов в PowerShell?
Если ваш запрос всё ещё медленный, возможно, проблема не в PowerShell, а в том, что API держит вас на кулдауне.
🌐 @automate_today | #powershell
👍3
Pester: как писать тесты для скриптов?
Если вы пишете PowerShell-скрипты без тестов — это как ехать на машине без тормозов. Раньше или позже будет больно.
Простейший тест с Pester:
Как запустить?
❓Зачем это нужно?
- Ловите баги до того, как скрипт уйдёт в продакшн.
- Рефакторинг становится безопаснее.
- Можно интегрировать в CI/CD (GitHub Actions, Azure DevOps).
А вы тестируете свои скрипты? Если да — какими инструментами?
🌐 @automate_today | #powershell
Если вы пишете PowerShell-скрипты без тестов — это как ехать на машине без тормозов. Раньше или позже будет больно.
Простейший тест с Pester:
# Файл MyScript.Tests.ps1
Describe "Проверка функции сложения" {
It "2 + 2 должно быть 4" {
(2 + 2) | Should -Be 4
}
It "Скрипт должен содержать функцию Get-Data" {
Get-Command Get-Data -ErrorAction SilentlyContinue | Should -Not -BeNullOrEmpty
}
}
Как запустить?
Invoke-Pester -Path .\MyScript.Tests.ps1
❓Зачем это нужно?
- Ловите баги до того, как скрипт уйдёт в продакшн.
- Рефакторинг становится безопаснее.
- Можно интегрировать в CI/CD (GitHub Actions, Azure DevOps).
А вы тестируете свои скрипты? Если да — какими инструментами?
Если тесты зелёные — можно мержить. Если красные — значит, вы хотя бы проверили.
🌐 @automate_today | #powershell
👍3
Как найти все битые ссылки в системе?
"Мёртвые" симлинки — тихие убийцы свободного места
Битые символьные ссылки (symlinks) не только бесполезны, но и могут сломать скрипты. Найдём и удалим их!
🛠 Bash-команда для поиска:
🛠 PowerShell-вариант:
🛠 Что дальше?
- Удалить:
- Заменить на актуальные пути.
А вы часто сталкиваетесь с битыми ссылками?
🌐 @automate_today | #bash #powershell
"Мёртвые" симлинки — тихие убийцы свободного места
Битые символьные ссылки (symlinks) не только бесполезны, но и могут сломать скрипты. Найдём и удалим их!
🛠 Bash-команда для поиска:
find /path/to/search -type l ! -exec test -e {} \; -print 🛠 PowerShell-вариант:
Get-ChildItem -Path C:\ -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object { $_.Attributes -match "ReparsePoint" -and !(Test-Path $_.FullName) }
🛠 Что дальше?
- Удалить:
find ... -delete (осторожно!). - Заменить на актуальные пути.
А вы часто сталкиваетесь с битыми ссылками?
P.S. Если find ничего не нашёл — либо у вас идеальная система, либо вы искали не там.
🌐 @automate_today | #bash #powershell
👍2
Как автоматизировать переключение VPN при утечке DNS
VPN включён, но DNS сливается? Пора это исправить!
Даже если трафик идёт через VPN, DNS-запросы могут "просачиваться" через ваш провайдер. Вот как автоматически переключать VPN при утечке.
🛠 Решение на Linux (bash + OpenVPN)
🛠 Решение на Windows (PowerShell)
❔Что ещё можно сделать?
- Использовать DNS over HTTPS (DoH) для дополнительной защиты.
- Настроить kill-switch в настройках VPN.
А вы проверяете, не "светится" ли ваш реальный IP при работе с VPN?
🌐 @helcode | #bash #powershell
VPN включён, но DNS сливается? Пора это исправить!
Даже если трафик идёт через VPN, DNS-запросы могут "просачиваться" через ваш провайдер. Вот как автоматически переключать VPN при утечке.
🛠 Решение на Linux (bash + OpenVPN)
#!/bin/bash
VPN_INTERFACE="tun0"
DNS_SERVER="10.8.0.1" # DNS вашего VPN
while true; do
CURRENT_DNS=$(resolvectl | grep 'Current DNS Server' | awk '{print $4}')
if [ "$CURRENT_DNS" != "$DNS_SERVER" ]; then
echo "Утечка DNS! Перезапускаю VPN..."
systemctl restart openvpn
fi
sleep 60 # Проверка каждую минуту
done
🛠 Решение на Windows (PowerShell)
$VPNInterface = "Ethernet 2" # Имя интерфейса VPN
$CorrectDNS = "10.8.0.1"
while ($true) {
$CurrentDNS = (Get-DnsClientServerAddress -InterfaceAlias $VPNInterface).ServerAddresses
if ($CurrentDNS -notcontains $CorrectDNS) {
Write-Host "Обнаружена утечка DNS! Переподключаю VPN..."
Restart-Service -Name "OpenVPNService"
}
Start-Sleep -Seconds 60
}
❔Что ещё можно сделать?
- Использовать DNS over HTTPS (DoH) для дополнительной защиты.
- Настроить kill-switch в настройках VPN.
А вы проверяете, не "светится" ли ваш реальный IP при работе с VPN?
P.S. Если скрипт постоянно перезапускает VPN, возможно, проблема не в DNS, а в самом VPN-сервере. 🕵️♂️
🌐 @helcode | #bash #powershell
👍2❤1
Как тихо собрать все метаданные в сети
Passive recon: собираем данные, не привлекая внимания
Прежде чем тестировать безопасность сети, нужно разведать её структуру. Вот как сделать это незаметно.
Сбор информации без сканирования (Linux)
PowerShell-версия (Windows)
❗️Важно:
- Не нарушайте законы! Используйте только в своей сети или с разрешения.
- Для этичного тестирования лучше Nmap (
Какие инструменты для сбора метаданных вы считаете самыми эффективными?
🌐 @helcode | #bash #powershell
Passive recon: собираем данные, не привлекая внимания
Прежде чем тестировать безопасность сети, нужно разведать её структуру. Вот как сделать это незаметно.
Сбор информации без сканирования (Linux)
# 1. ARP-таблица (уже подключённые устройства)
arp -a
# 2. DNS-записи (если есть доступ)
dig example.com ANY
# 3. Слушаем сетевой трафик (только заголовки)
tcpdump -i eth0 -nn -c 100 'port 53 or port 80'
PowerShell-версия (Windows)
# 1. ARP-кэш
Get-NetNeighbor
# 2. Активные подключения
Get-NetTCPConnection | Where-Object { $_.State -eq "Established" }
# 3. DNS-кэш
Get-DnsClientCache
❗️Важно:
- Не нарушайте законы! Используйте только в своей сети или с разрешения.
- Для этичного тестирования лучше Nmap (
nmap -sS -T4 192.168.1.0/24). Какие инструменты для сбора метаданных вы считаете самыми эффективными?
P.S. Если tcpdump ничего не показывает, проверьте, не блокирует ли брандмауэр трафик.
🌐 @helcode | #bash #powershell
🔥4🤔2
Автоматическое обновление Windows-серверов
Модуль
1. Установка модуля
2. Проверка обновлений
3. Установка (с перезагрузкой, если нужно)
4. Добавляем в планировщик
❗️Важно:
- Тестируйте обновления в dev-среде!
- Можно исключить конкретные KB (
Как вы обновляете Windows-серверы? WSUS, SCCM или скрипты?
🌐 @helcode | #powershell
Модуль
PSWindowsUpdate позволяет апдейтить серверы без RDP. 1. Установка модуля
Install-Module -Name PSWindowsUpdate -Force
2. Проверка обновлений
Get-WindowsUpdate
3. Установка (с перезагрузкой, если нужно)
Install-WindowsUpdate -AcceptAll -AutoReboot
4. Добавляем в планировщик
Register-ScheduledJob -Name "AutoUpdate" -ScriptBlock {
Install-WindowsUpdate -AcceptAll -AutoReboot
} -Trigger (New-JobTrigger -Weekly -At "3:00 AM") ❗️Важно:
- Тестируйте обновления в dev-среде!
- Можно исключить конкретные KB (
-NotKBArticleID "KB1234567"). Как вы обновляете Windows-серверы? WSUS, SCCM или скрипты?
P.S. Если после обновления что-то сломалось, вините Patch Tuesday.
🌐 @helcode | #powershell
👍3
Как автоматизировать создание виртуальных машин?
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
Запуск:
Вариант 2: Hyper-V + PowerShell
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
🌐 @helcode | #bash #powershell
🫸 Хватит тыкать в GUI — создаём ВМ скриптом!
Ручное создание виртуальных машин — это прошлый век.
⚙️ Автоматизируем это с помощью Vagrant и PowerShell.
Вариант 1: Vagrant (кроссплатформенная магия)
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
Запуск:
vagrant up # Создаёт и запускает ВМ
vagrant ssh # Подключается к ней
Вариант 2: Hyper-V + PowerShell
# Создаём новую ВМ
New-VM -Name "MyServer" -MemoryStartupBytes 4GB -NewVHDPath "C:\VMs\MyServer.vhdx" -NewVHDSizeBytes 50GB
Set-VMProcessor -VMName "MyServer" -Count 2
Start-VM -Name "MyServer"
❔Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?
P.S. Если Vagrant говорит «box not found», проверьте, установили ли вы бокс командой vagrant box add ubuntu/focal64
🌐 @helcode | #bash #powershell
👍1