update scripts

This commit is contained in:
Alex Kup 2023-10-03 22:02:33 +03:00 committed by GitHub
parent 566cebdc96
commit a5a3637b5c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 6289 additions and 5805 deletions

11662
README.md

File diff suppressed because it is too large Load diff

View file

@ -10,4 +10,5 @@ function ConvertFrom-Html {
}
# $apache_status = "http://192.168.3.102/server-status"
# $apache_status | ConvertFrom-Html
# $apache_status | ConvertFrom-Html
# irm http://192.168.3.102/server-status?auto

7
Scripts/Get-AltTab.ps1 Normal file
View file

@ -0,0 +1,7 @@
function Get-AltTab {
$wshell = New-Object -ComObject wscript.shell
$wshell.SendKeys("%{Tab}")
sleep 120
Get-AltTab
}
Get-AltTab

View file

@ -0,0 +1,15 @@
$WARNING = 25
$CRITICAL = 50
$Interface = $(Get-Counter).CounterSamples.Path[0]
$TransferRate = ((Get-Counter $Interface).countersamples | select -ExpandProperty CookedValue)*8
$NetworkUtilisation = [math]::round($TransferRate/1000000000*100,2)
if ($NetworkUtilisation -gt $CRITICAL){
Write-Output "CRITICAL: $($NetworkUtilisation) % Network utilisation, $($TransferRate.ToString('N0')) b/s"
# exit 2
}
if ($NetworkUtilisation -gt $WARNING){
Write-Output "WARNING: $($NetworkUtilisation) % Network utilisation, $($TransferRate.ToString('N0')) b/s"
# exit 1
}
Write-Output "OK: $($NetworkUtilisation) % Network utilisation, $($TransferRate.ToString('N0')) b/s"
# exit 0

View file

@ -0,0 +1,170 @@
### Var
$ServiceName = "*sshd*" # formate wildcard (*)
$Server = "localhost" # default
$server_list = @(
"192.168.3.99",
"192.168.3.100"
)
### Console Size
# $size = $Host.UI.RawUI.WindowSize
# $size.Width = 30
# $size.Height = 25
# $Host.UI.RawUI.WindowSize = $size
# $title = $Host.UI.RawUI.WindowTitle
# $title = "Menu Service Start-Stop"
# $Host.UI.RawUI.WindowTitle = $title
### Module ps-menu
### Source: https://github.com/chrisseroka/ps-menu
function DrawMenu {
param ($menuItems, $menuPosition, $Multiselect, $selection)
$l = $menuItems.length
for ($i = 0; $i -le $l;$i++) {
if ($menuItems[$i] -ne $null){
$item = $menuItems[$i]
if ($Multiselect)
{
if ($selection -contains $i){
$item = '[x] ' + $item
}
else {
$item = '[ ] ' + $item
}
}
if ($i -eq $menuPosition) {
Write-Host "> $($item)" -ForegroundColor Green
} else {
Write-Host " $($item)"
}
}
}
}
function Toggle-Selection {
param ($pos, [array]$selection)
if ($selection -contains $pos){
$result = $selection | where {$_ -ne $pos}
}
else {
$selection += $pos
$result = $selection
}
$result
}
function Menu {
param ([array]$menuItems, [switch]$ReturnIndex=$false, [switch]$Multiselect)
$vkeycode = 0
$pos = 0
$selection = @()
if ($menuItems.Length -gt 0)
{
try {
[console]::CursorVisible=$false #prevents cursor flickering
DrawMenu $menuItems $pos $Multiselect $selection
While ($vkeycode -ne 13 -and $vkeycode -ne 27) {
$press = $host.ui.rawui.readkey("NoEcho,IncludeKeyDown")
$vkeycode = $press.virtualkeycode
If ($vkeycode -eq 38 -or $press.Character -eq 'k') {$pos--}
If ($vkeycode -eq 40 -or $press.Character -eq 'j') {$pos++}
If ($vkeycode -eq 36) { $pos = 0 }
If ($vkeycode -eq 35) { $pos = $menuItems.length - 1 }
If ($press.Character -eq ' ') { $selection = Toggle-Selection $pos $selection }
if ($pos -lt 0) {$pos = 0}
If ($vkeycode -eq 27) {$pos = $null }
if ($pos -ge $menuItems.length) {$pos = $menuItems.length -1}
if ($vkeycode -ne 27)
{
$startPos = [System.Console]::CursorTop - $menuItems.Length
[System.Console]::SetCursorPosition(0, $startPos)
DrawMenu $menuItems $pos $Multiselect $selection
}
}
}
finally {
[System.Console]::SetCursorPosition(0, $startPos + $menuItems.Length)
[console]::CursorVisible = $true
}
}
else {
$pos = $null
}
if ($ReturnIndex -eq $false -and $pos -ne $null)
{
if ($Multiselect){
return $menuItems[$selection]
}
else {
return $menuItems[$pos]
}
}
else
{
if ($Multiselect){
return $selection
}
else {
return $pos
}
}
}
### Get-Menu
function Get-Menu ($server) {
Write-Host
$sn = $ServiceName -replace "\*"
$menu = menu @("Get Services $sn", "Start Services $sn", "Stop Services $sn", "Restart Services $sn", "Select Server") -ReturnIndex
if ($menu -eq 0) {
Get-ServiceColor
Get-Menu -server $server
}
elseif ($menu -eq 1) {
Get-Service $ServiceName -ComputerName $server | Start-Service
Get-ServiceColor
Get-Menu -server $server
}
elseif ($menu -eq 2) {
Get-Service $ServiceName -ComputerName $server | Stop-Service -Force
Get-ServiceColor
Get-Menu -server $server
}
elseif ($menu -eq 3) {
Get-Service $ServiceName -ComputerName $server | Restart-Service -Force
Get-ServiceColor
Get-Menu -server $server
}
elseif ($menu -eq 4) {
Write-Host
$select_servers = menu $server_list
$server = $select_servers
clear
Get-Menu -server $server
}
}
### Get-Service
function Get-ServiceColor {
clear
$services = Get-Service $ServiceName -ComputerName $server
Write-Host
foreach ($s in $services) {
$name = $s.Name
$stat = $s.Status
if ($stat -eq "Running") {
Write-Host " $server " -NoNewline
Write-Host "$stat " -ForegroundColor Green -NoNewline
Write-Host "$Name"
}
elseif ($stat -eq "Stopped") {
Write-Host "$stat " -ForegroundColor Red -NoNewline
Write-Host "$Name"
}
}
Write-Host
}
clear
Get-Menu -server $server

View file

@ -0,0 +1,22 @@
$Username = "support@domain.local";
$Password = "password";
$SendTo = "admin@domain.ru";
$MailServer = "mail.domain.ru";
$HostName = $args[0];
$IPAddress = $args[1];
$PingStatus = $args[2];
$FailedOn = $args[3];
$message = new-object Net.Mail.MailMessage;
$message.From = $Username;
$message.To.Add($SendTo);
$message.Subject = "Ping Info View";
$message.Body = "Failed ping: `r`nHost Name: $HostName`r`nIP Address: $IPAddress`r`nPing Status: $PingStatus`r`nPing Time: $FailedOn";
$smtp = new-object Net.Mail.SmtpClient($MailServer, "25");
$smtp.EnableSSL = $true;
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message);
# F9 - Advanced Options - Execute the following command on failed ping:
# Powershell.exe -executionpolicy remotesigned -File С:\Send-Message-PIV.ps1 "%HostName%" "%IPAddress%" "%LastPingStatus%" "%LastFailedOn%"

24
Scripts/Send-SMTP.psm1 Normal file
View file

@ -0,0 +1,24 @@
function Send-SMTP {
param (
[Parameter(Mandatory = $True)]$mess
)
$srv_smtp = "smtp.yandex.ru"
$port = "587"
$from = "login1@yandex.ru"
$to = "login2@yandex.ru"
$user = "login1"
$pass = "password"
$subject = "Service status on Host: $hostname"
$Message = New-Object System.Net.Mail.MailMessage
$Message.From = $from
$Message.To.Add($to)
$Message.Subject = $subject
$Message.IsBodyHTML = $true
$Message.Body = "<h1> $mess </h1>"
$smtp = New-Object Net.Mail.SmtpClient($srv_smtp, $port)
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
$smtp.Send($Message)
}
# Send-SMTP $(Get-Service)

16
Scripts/Send-Telegram.ps1 Normal file
View file

@ -0,0 +1,16 @@
function Send-Telegram {
param (
[Parameter(Mandatory = $True)]$Text
)$token_bot = "5517149522:AAFop4_darMpTT7VgLpY2hjkDkkV1dzmGNM"
$id_chat = "-609779646"
$payload = @{
"chat_id" = $id_chat
"text" = $Text
"parse_mode" = "html"
}
Invoke-RestMethod -Uri ("https://api.telegram.org/bot{0}/sendMessage" -f $token_bot) -Method Post -ContentType "application/json;charset=utf-8" -Body (
ConvertTo-Json -Compress -InputObject $payload
)
}
Send-Telegram -Text Test

View file

@ -0,0 +1,19 @@
function Start-PingJob ($Network) {
$RNetwork = $Network -replace "\.\d{1,3}$","."
foreach ($4 in 1..254) {
$ip = $RNetwork+$4
# создаем задания, забираем 3-ю строку вывода и добавляем к выводу ip-адрес:
(Start-Job {"$using:ip : "+(ping -n 1 -w 50 $using:ip)[2]}) | Out-Null
}
while ($True){
$status_job = (Get-Job).State[-1] # забираем статус последнего задания
if ($status_job -like "Completed"){ # проверяем на выполнение (задания выполняются по очереди сверху вниз)
$ping_out = Get-Job | Receive-Job # если выполнен, забираем вывод всех заданий
Get-Job | Remove-Job -Force # удаляем задания
$ping_out
break # завершаем цикл
}}
}
# Start-PingJob -Network 192.168.3.0
# (Measure-Command {Start-PingJob -Network 192.168.3.0}).TotalSeconds # 60 Seconds

View file

@ -0,0 +1,13 @@
function Start-PingRSJob ($Network) {
$RNetwork = $Network -replace "\.\d{1,3}$","."
foreach ($4 in 1..254) {
$ip = $RNetwork+$4
(Start-RSJob {"$using:ip : "+(ping -n 1 -w 50 $using:ip)[2]}) | Out-Null
}
$ping_out = Get-RSJob | Receive-RSJob
$ping_out
Get-RSJob | Remove-RSJob
}
# Start-PingRSJob -Network 192.168.3.0
# (Measure-Command {Start-PingRSJob -Network 192.168.3.0}).TotalSeconds # 10 Seconds

View file

@ -0,0 +1,19 @@
function Start-PingThread ($Network) {
$RNetwork = $Network -replace "\.\d{1,3}$","."
foreach ($4 in 1..254) {
$ip = $RNetwork+$4
# создаем задания, забираем 3-ю строку вывода и добавляем к выводу ip-адрес:
(Start-ThreadJob {"$using:ip : "+(ping -n 1 -w 50 $using:ip)[2]}) | Out-Null
}
while ($True){
$status_job = (Get-Job).State[-1] # забираем статус последнего задания
if ($status_job -like "Completed"){ # проверяем на выполнение (задания выполняются по очереди сверху вниз)
$ping_out = Get-Job | Receive-Job # если выполнен, забираем вывод всех заданий
Get-Job | Remove-Job -Force # удаляем задания
$ping_out
break # завершаем цикл
}}
}
# Start-PingThread -Network 192.168.3.0
# (Measure-Command {Start-PingThread -Network 192.168.3.0}).TotalSeconds # 24 Seconds

View file

@ -0,0 +1,18 @@
function Test-PingNetwork {
param (
[Parameter(Mandatory,ValueFromPipeline)][string[]]$Network,
[ValidateRange(100,10000)][int]$Timeout = 100
)
$ping = New-Object System.Net.NetworkInformation.Ping
$Network = $Network -replace "0$"
$net = @()
foreach ($r in @(1..254)) {
$net += "$network$r"
}
foreach ($n in $net) {
$ping.Send($n, $timeout) | select @{Name="Address"; Expression={$n -replace ".+\."}}, Status
}
}
# Test-PingNetwork -Network 192.168.3.0
# Test-PingNetwork -Network 192.168.3.0 -Timeout 1000

Binary file not shown.

106
posh.txt
View file

@ -21,7 +21,10 @@ PowerShell Commands
# DHCP
# DFS
# Package
# PS2EXE
# NSSM
# Jobs
# SMTP
# Hyper-V
# VMWare/PowerCLI
# Exchange/EMShell
@ -83,6 +86,8 @@ Invoke-Expression # iex принимает текст в виде команды
$PSVersionTable # версия PowerShell
Set-ExecutionPolicy Unrestricted
Get-ExecutionPolicy
$Metadata = New-Object System.Management.Automation.CommandMetaData (Get-Command Get-Service) # получить информацию о командлете
[System.Management.Automation.ProxyCommand]::Create($Metadata) # исходный код функции
# Object
@ -1019,8 +1024,24 @@ Test-Connection -Count 1 $srv1, $srv2 # отправить icmp-пакет дв
Test-Connection $srv -ErrorAction SilentlyContinue # не выводить ошибок, если хост не отвечает
Test-Connection -Source $srv1 -ComputerName $srv2 # пинг с удаленного компьютера
$ping = New-Object System.Net.Networkinformation.Ping
1..254 | % {$ping.send("192.168.3.$_") | select address, status}
function Test-PingNetwork {
param (
[Parameter(Mandatory,ValueFromPipeline)][string[]]$Network,
[ValidateRange(100,10000)][int]$Timeout = 100
)
$ping = New-Object System.Net.NetworkInformation.Ping
$Network = $Network -replace "0$"
$net = @()
foreach ($r in @(1..254)) {
$net += "$network$r"
}
foreach ($n in $net) {
$ping.Send($n, $timeout) | select @{Name="Address"; Expression={$n -replace ".+\."}}, Status
}
}
Test-PingNetwork -Network 192.168.3.0
Test-PingNetwork -Network 192.168.3.0 -Timeout 1000
### port
tnc $srv -p 5985
@ -1083,6 +1104,7 @@ hostname.exe
[System.Net.Dns]::GetHostName()
### arp
ipconfig /all | Select-String "физ" # grep
Get-NetNeighbor -AddressFamily IPv4
function Get-ARP {
@ -1684,7 +1706,8 @@ Get-Command *Veeam*
Import-Module -Name VeeamLogParser # загрузить модуль
Get-Module VeeamLogParser | select -ExpandProperty ExportedCommands # отобразить список функций
### PS2EXE
# PS2EXE
Install-Module ps2exe -Repository PSGallery
Get-Module -ListAvailable # список всех модулей
-noConsole # использовать GUI, без окна консоли powershell
@ -1694,7 +1717,8 @@ Get-Module -ListAvailable # список всех модулей
-credentialGUI # вывод диалогового окна для ввода учетных данных
Invoke-ps2exe -inputFile "$home\Desktop\WinEvent-Viewer-1.1.ps1" -outputFile "$home\Desktop\WEV-1.1.exe" -iconFile "$home\Desktop\log_48px.ico" -title "WinEvent-Viewer" -noConsole -noOutput -noError
### NSSM
# NSSM
$powershell_Path = (Get-Command powershell).Source
$NSSM_Path = (Get-Command "C:\WinPerf-Agent\NSSM-2.24.exe").Source
$Script_Path = "C:\WinPerf-Agent\WinPerf-Agent-1.1.ps1"
@ -1709,6 +1733,7 @@ $Service_Name | Stop-Service # остановить
& $NSSM_Path remove $Service_Name # удалить
# Jobs
Get-Job # получение списка задач
Start-Job # запуск процесса
Stop-Job # остановка процесса
@ -1718,7 +1743,7 @@ Wait-Job # ожидание вывода команды
Receive-Job # получение результатов выполненного процесса
Remove-Job # удалить задачу
function Start-MTPing ($Network){
function Start-PingJob ($Network) {
$RNetwork = $Network -replace "\.\d{1,3}$","."
foreach ($4 in 1..254) {
$ip = $RNetwork+$4
@ -1735,10 +1760,11 @@ break # завершаем цикл
}}
}
Start-MTPing -Network 192.168.3.0
(Measure-Command {Start-MTPing -Network 192.168.3.0}).TotalSeconds # 60 Seconds
Start-PingJob -Network 192.168.3.0
(Measure-Command {Start-PingJob -Network 192.168.3.0}).TotalSeconds # 60 Seconds
### ThreadJob
Install-Module -Name ThreadJob
Get-Module ThreadJob -list
Start-ThreadJob {ping ya.ru} | Out-Null # создать фоновую задачу
@ -1746,7 +1772,7 @@ Get-Job | Receive-Job -Keep # отобразить и не удалять выв
(Get-Job).HasMoreData # если False, то вывод команы удален
(Get-Job)[-1].Output # отобразить вывод последней задачи
function Start-MTPing ($Network){
function Start-PingThread ($Network) {
$RNetwork = $Network -replace "\.\d{1,3}$","."
foreach ($4 in 1..254) {
$ip = $RNetwork+$4
@ -1763,12 +1789,12 @@ break # завершаем цикл
}}
}
Start-MTPing -Network 192.168.3.0
(Measure-Command {Start-MTPing -Network 192.168.3.0}).TotalSeconds # 24 Seconds
Start-PingThread -Network 192.168.3.0
(Measure-Command {Start-PingThread -Network 192.168.3.0}).TotalSeconds # 24 Seconds
### PoshRSJob
function Start-MTPing ($Network){
function Start-PingRSJob ($Network) {
$RNetwork = $Network -replace "\.\d{1,3}$","."
foreach ($4 in 1..254) {
$ip = $RNetwork+$4
@ -1779,8 +1805,35 @@ $ping_out
Get-RSJob | Remove-RSJob
}
Start-MTPing -Network 192.168.3.0
(Measure-Command {Start-MTPing -Network 192.168.3.0}).TotalSeconds # 10 Seconds
Start-PingRSJob -Network 192.168.3.0
(Measure-Command {Start-PingRSJob -Network 192.168.3.0}).TotalSeconds # 10 Seconds
# SMTP
function Send-SMTP {
param (
[Parameter(Mandatory = $True)]$mess
)
$srv_smtp = "smtp.yandex.ru"
$port = "587"
$from = "login1@yandex.ru"
$to = "login2@yandex.ru"
$user = "login1"
$pass = "password"
$subject = "Service status on Host: $hostname"
$Message = New-Object System.Net.Mail.MailMessage
$Message.From = $from
$Message.To.Add($to)
$Message.Subject = $subject
$Message.IsBodyHTML = $true
$Message.Body = "<h1> $mess </h1>"
$smtp = New-Object Net.Mail.SmtpClient($srv_smtp, $port)
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
$smtp.Send($Message)
}
Send-SMTP $(Get-Service)
# Hyper-V
@ -2358,6 +2411,25 @@ $vjob = $vjob.Content | ConvertFrom-Json
$vjob = Invoke-RestMethod "https://veeam-11:9419/api/v1/jobs" -Method GET -Headers $Header -SkipCertificateCheck
$vjob.data.virtualMachines.includes.inventoryObject
### Telegram
function Send-Telegram {
param (
[Parameter(Mandatory = $True)]$Text
)$token_bot = "5517149522:AAFop4_darMpTT7VgLpY2hjkDkkV1dzmGNM"
$id_chat = "-609779646"
$payload = @{
"chat_id" = $id_chat
"text" = $Text
"parse_mode" = "html"
}
Invoke-RestMethod -Uri ("https://api.telegram.org/bot{0}/sendMessage" -f $token_bot) -Method Post -ContentType "application/json;charset=utf-8" -Body (
ConvertTo-Json -Compress -InputObject $payload
)
}
Send-Telegram -Text Test
# Selenium
.\nuget.exe install Selenium.WebDriver
@ -2469,6 +2541,14 @@ $wshell.SendKeys("{F1}")
$wshell.SendKeys("{F12}")
$wshell.SendKeys("{+}{^}{%}{~}{(}{)}{[}{]}{{}{}}")
function Get-AltTab {
$wshell = New-Object -ComObject wscript.shell
$wshell.SendKeys("%{Tab}") # ALT+TAB
sleep 120
Get-AltTab
}
Get-AltTab
### Wscript.Shell.Popup
$wshell = New-Object -ComObject Wscript.Shell
$output = $wshell.Popup("Выберите действие?",0,"Заголовок",4)