110 lines
3.9 KiB
PowerShell
110 lines
3.9 KiB
PowerShell
# gper-core.psm1 — Личный модуль функций gper
|
|||
|
|
# Версия: 1.0.0
|
||
|
|
# Дата: 2026-07-21
|
||
|
|
|
||
|
|
# ============================================================
|
||
|
|
# WOL — Wake-On-LAN
|
||
|
|
# ============================================================
|
||
|
|
function Send-WakeOnLan {
|
||
|
|
<#
|
||
|
|
.SYNOPSIS Отправить магический пакет WOL по MAC-адресу.
|
||
|
|
.EXAMPLE Send-WakeOnLan -MacAddress 'BC:24:11:AA:BB:CC'
|
||
|
|
#>
|
||
|
|
[CmdletBinding()]
|
||
|
|
param(
|
||
|
|
[Parameter(Mandatory, Position = 0)]
|
||
|
|
[ValidatePattern('^([0-9A-Fa-f]{2}[:\-]){5}[0-9A-Fa-f]{2}$')]
|
||
|
|
[string]$MacAddress,
|
||
|
|
|
||
|
|
[string]$BroadcastAddress = '255.255.255.255',
|
||
|
|
[int]$Port = 9
|
||
|
|
)
|
||
|
|
|
||
|
|
$mac = $MacAddress -replace '[:\-]', ''
|
||
|
|
$bytes = [byte[]](@(0xFF) * 6 + ($mac -split '(..)' | Where-Object { $_ } | ForEach-Object { [Convert]::ToByte($_, 16) }) * 16)
|
||
|
|
$udp = [System.Net.Sockets.UdpClient]::new()
|
||
|
|
$udp.Connect($BroadcastAddress, $Port)
|
||
|
|
$udp.Send($bytes, $bytes.Length) | Out-Null
|
||
|
|
$udp.Close()
|
||
|
|
Write-Host "WOL → $MacAddress" -ForegroundColor Green
|
||
|
|
}
|
||
|
|
Set-Alias -Name wol -Value Send-WakeOnLan -Option AllScope -Force
|
||
|
|
|
||
|
|
# ============================================================
|
||
|
|
# SSH — быстрый доступ к узлам
|
||
|
|
# ============================================================
|
||
|
|
function Connect-VPS {
|
||
|
|
<#
|
||
|
|
.SYNOPSIS SSH на VPS по алиасу (ru/us/us2/iz/ya).
|
||
|
|
.EXAMPLE Connect-VPS ru
|
||
|
|
#>
|
||
|
|
param(
|
||
|
|
[Parameter(Mandatory, Position = 0)]
|
||
|
|
[ValidateSet('ru', 'us', 'us2', 'iz', 'ya')]
|
||
|
|
[string]$Node
|
||
|
|
)
|
||
|
|
$keyPath = 'c:\Users\tarakan\.ssh\ai_ssh_key'
|
||
|
|
$ipMap = @{
|
||
|
|
ru = '5.129.200.97'
|
||
|
|
us = '77.91.126.90'
|
||
|
|
us2 = '77.91.126.64'
|
||
|
|
iz = '185.239.48.145'
|
||
|
|
ya = '158.160.227.222'
|
||
|
|
}
|
||
|
|
ssh -p 63121 -i $keyPath "uai@$($ipMap[$Node])"
|
||
|
|
}
|
||
|
|
Set-Alias -Name vps -Value Connect-VPS -Option AllScope -Force
|
||
|
|
|
||
|
|
# ============================================================
|
||
|
|
# Профиль — обновление
|
||
|
|
# ============================================================
|
||
|
|
function Update-GperProfile {
|
||
|
|
<#
|
||
|
|
.SYNOPSIS git pull в директории профиля + перезагрузить профиль.
|
||
|
|
#>
|
||
|
|
$profileDir = Join-Path $HOME 'Documents\PowerShell\gper-profile'
|
||
|
|
if (-not (Test-Path $profileDir)) {
|
||
|
|
Write-Host 'Директория профиля не найдена' -ForegroundColor Red
|
||
|
|
return
|
||
|
|
}
|
||
|
|
Push-Location $profileDir
|
||
|
|
git pull
|
||
|
|
Pop-Location
|
||
|
|
. (Join-Path $profileDir 'profile.ps1')
|
||
|
|
Write-Host 'Профиль обновлён и перезагружен' -ForegroundColor Green
|
||
|
|
}
|
||
|
|
Set-Alias -Name reload -Value Update-GperProfile -Option AllScope -Force
|
||
|
|
|
||
|
|
# ============================================================
|
||
|
|
# Утилиты
|
||
|
|
# ============================================================
|
||
|
|
function Get-ExternalIP {
|
||
|
|
# Показать внешний IP (через us-vps для проверки обхода)
|
||
|
|
(Invoke-RestMethod -Uri 'https://api.ipify.org?format=json' -TimeoutSec 10).ip
|
||
|
|
}
|
||
|
|
Set-Alias -Name myip -Value Get-ExternalIP -Option AllScope -Force
|
||
|
|
|
||
|
|
function Test-PortOpen {
|
||
|
|
<#
|
||
|
|
.SYNOPSIS Проверить доступность TCP-порта.
|
||
|
|
.EXAMPLE Test-PortOpen 10.10.10.1 22
|
||
|
|
#>
|
||
|
|
param(
|
||
|
|
[Parameter(Mandatory)][string]$Host,
|
||
|
|
[Parameter(Mandatory)][int]$Port,
|
||
|
|
[int]$TimeoutMs = 2000
|
||
|
|
)
|
||
|
|
$tcp = [System.Net.Sockets.TcpClient]::new()
|
||
|
|
$result = $tcp.BeginConnect($Host, $Port, $null, $null)
|
||
|
|
$ok = $result.AsyncWaitHandle.WaitOne($TimeoutMs, $false)
|
||
|
|
$tcp.Close()
|
||
|
|
if ($ok) {
|
||
|
|
Write-Host "$Host`:$Port OPEN" -ForegroundColor Green
|
||
|
|
} else {
|
||
|
|
Write-Host "$Host`:$Port CLOSED / timeout" -ForegroundColor Red
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Set-Alias -Name portcheck -Value Test-PortOpen -Option AllScope -Force
|
||
|
|
|
||
|
|
Export-ModuleMember -Function * -Alias *
|