Полезные советы

Ответить
Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Полезные советы

Сообщение Fors1k »

Как держать всегда под рукой любимые скрипты

Video

Аватара пользователя
Madeus
Сообщения: 3
Зарегистрирован: 02 июл 2021, 16:19

Re: Полезные советы

Сообщение Madeus »

Курсор из ла2 топ)

Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Полезные советы

Сообщение Fors1k »

Это да, уже лет 10 на нём))

Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Полезные советы

Сообщение Fors1k »

Как передать большое количество параметров в команду одной "пачкой" (PowerShell Splatting)



Так будет выглядеть вызов команды поиска цвета, записанный обычным способом

Wake up, Neo, select all

$color = New-Color (53, 121, 185)
$handle = (Get-Process -id $pid).MainWindowHandle

$pos = Find-Color -Color $color -Handle $handle -StartPos 0, 0 -Size 100, 100 -Deviation 12 -Count 1
$pos.location

А сейчас зададим параметры отдельно, используя powershell Splatting:

Wake up, Neo, select all

$find = @{
Color = New-Color (53, 121, 185)
Handle = (Get-Process -id $pid).MainWindowHandle
StartPos = 0, 0
Size = 100, 100
Deviation = 12
Count = 1
}

Теперь вызов команды будет выглядеть очень лаконично

Wake up, Neo, select all

$pos = Find-Color @find
$pos.location

При таком способе весьма читабельно выглядит декларирование параметров.
Также будет удобно вызывать команду с разными наборами параметров несколько раз.
Можно в начале скрипта задать несколько
наборов параметров $find1 = @{...} ; $find2 = @{...},
и затем в нужном месте вызывать команду, указывая определенный
набор параметров Find-Color @find1 ; Find-Color @find2

Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Полезные советы

Сообщение Fors1k »

Как быстро создать строку, например, из 10 символов


Wake up, Neo, select all

"#" * 10
Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Полезные советы

Сообщение Fors1k »

Операторы & и .



Оператор . запускает ScriptBlock в текущей области, в то время как оператор & запускает ScriptBlock в дочерней области.

Wake up, Neo, select all

.{
$var1 = "test"
}

&{
$var2 = "test"
}

Write-Host "var1 = $var1"
Write-Host "var2 = $var2"

Output


var1 = test
var2 =
Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Полезные советы

Сообщение Fors1k »

Найти файл по его содержимому



Есть папка с кучей текстовых файлов, и нам понадобилось найти один из них.
Все, что мы о нем помним - где-то в тексте присутствует слово "gold".

Как найти "иголку в стоге сена"? Решить эту задачу через PowerShell нам поможет всего одна строка кода.
Укажем путь, фильтр по типу файлов, и что будем искать, а в результат выберем
путь к файлу, и номер строки, где обнаружилось совпадение:

Wake up, Neo, select all

Select-String "gold" "D:\files\*.txt"|Select Path , LineNumber

Output


Path             LineNumber
----             ----------
D:\files\qwe.txt          4
Аватара пользователя
cirus
Expert
Сообщения: 56
Зарегистрирован: 12 июн 2021, 17:53
Поблагодарили: 8 раз

Re: Полезные советы

Сообщение cirus »

Поиск изображения в невидимом окне



Этот пример показывает как скрыть окно с экрана, при этом скрипт будет искать в этом окне изображение и выполнять клик мышкой. Пользователь может использовать пк, это не повлияет на работу скрипта. Не все окна воспринимают эмуляцию кликов поэтому такой способ работает не всегда.  

Wake up, Neo, select all

Clear-Host
try{
$img = Get-Image -Path "C:\menu.bmp" # загрузить изображение
}
catch{
Write-Host "Картинка не загрузилась" -ForegroundColor Red
Stop-Script
}

$window = Find-Window -Title "Warspear Online" # поиск окна с именем Warspear Online
if(!$window){
Write-Host "Окно не найдено" -ForegroundColor Red
Stop-Script
}

Set-WindowTransparency 0 -Handle $window.handle[0] # сделать окно невидимым
Start-Sleep 1 # пауза 1 секунду (можно убрать если не нужна)

$coord = Find-Image $img -Handle $window.handle[0] -Accuracy 90 -Deviation 10 # поиск изображения в окне
if($coord){ # если найдено
Write-Host "Координаты картинки: $($coord.location[0])" -ForegroundColor Green
Click-Mouse $coord.location[0] -Handle $window.handle[0] -Event # клик на картинку, курсор при этом не задействован
}
else{
Write-Host "Картинка не найдена" -ForegroundColor Red
}

Set-WindowTransparency 255 -Handle $window.handle[0] # сделать окно видимым
Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Полезные советы

Сообщение Fors1k »

Получить внешний IP адрес компьютера



Через PowerShell получить публичный IP адрес компьютера можно всего одной строкой кода:

Wake up, Neo, select all

$myIP = (IRM api.myip.com).IP
Write-Host $myIP
Аватара пользователя
Fors1k
Администратор
Сообщения: 57
Зарегистрирован: 08 июн 2021, 17:23
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: Полезные советы

Сообщение Fors1k »

Получить результат с определенным шансом



Получить случайное число или объект из массива можно через Get-Random.
А для получения чего-либо с определенной вероятностью можно воспользоваться следующей функцией:

Wake up, Neo, select all

function Get-WithChance($Chance){
(Get-Random -Minimum 1.0 -Maximum 101) -le $Chance
}

Запросить результат с вероятностью успеха 30%:

Wake up, Neo, select all

Get-WithChance 30

Проверим верно ли производится вычисление, выполнив запрос 200 раз:

Wake up, Neo, select all

$tests = 200
(1..$tests|Where{Get-WithChance 30}).Count * 100 / $tests
#29.8

Ну и пример использования на условном коде казино, в котором шанс выигрыша 30%:

Wake up, Neo, select all

if(Get-WithChance 30){
Write-Host 'Вы выиграли 100$' -Fore Green
}
else{
Write-Host "Попробуйте еще раз" -Fore Red
}
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей