add media api

This commit is contained in:
Alex Kup 2024-03-10 16:20:57 +03:00 committed by GitHub
parent 53c94bbeff
commit d2fb6b4fed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 452 additions and 212 deletions

358
README.md
View file

@ -9,8 +9,6 @@
[➡️ Веб-версия](https://lifailon.github.io/) [➡️ Веб-версия](https://lifailon.github.io/)
[WinForms](https://github.com/Lifailon/PS-Commands/blob/rsa/WinForms/WinForms-Test-Stend.ps1) (тестовый стенд с примерами)
📢 Habr: [PowerShell и его возможности](https://habr.com/ru/articles/782592/) 📢 Habr: [PowerShell и его возможности](https://habr.com/ru/articles/782592/)
- [Help](#help) - [Help](#help)
@ -18,7 +16,9 @@
- [npp](#npp) - [npp](#npp)
- [Regex](#regex) - [Regex](#regex)
- [DataType](#datatype) - [DataType](#datatype)
- [Module](#module)
- [Bit](#bit) - [Bit](#bit)
- [Cycle](#cycle)
- [Files](#files) - [Files](#files)
- [Credential](#credential) - [Credential](#credential)
- [WinEvent](#winevent) - [WinEvent](#winevent)
@ -97,13 +97,16 @@
- [Git](#git) - [Git](#git)
- [DSC](#dsc) - [DSC](#dsc)
- [Ansible](#ansible) - [Ansible](#ansible)
- [Win_Modules](#win_modules)
- [GigaChat](#GigaChat) - [GigaChat](#GigaChat)
- [YandexGPT](#YandexGPT) - [YandexGPT](#YandexGPT)
- [SuperAGI](#superagi) - [SuperAGI](#superagi)
- [Replicate](#replicate) - [Replicate](#replicate)
- [Google-Filter](#google-filter)
- [Google-API](#google-api) - [Google-API](#google-api)
- [RapidAPI](#rapidapi) - [RapidAPI](#rapidapi)
- [TMDB](#tmdb) - [TMDB](#tmdb)
- [OMDb](#omdb)
- [ivi](#ivi) - [ivi](#ivi)
- [Kinopoisk](#kinopoisk) - [Kinopoisk](#kinopoisk)
- [VideoCDN](#videocdn) - [VideoCDN](#videocdn)
@ -111,8 +114,8 @@
- [Discord](#discord) - [Discord](#discord)
- [oh-my-posh](#oh-my-posh) - [oh-my-posh](#oh-my-posh)
- [Pester](#pester) - [Pester](#pester)
- [FFmpeg](#ffmpeg)
- [Pandoc](#pandoc) - [Pandoc](#pandoc)
- [FFmpeg](#ffmpeg)
- [ImageMagick](#imagemagick) - [ImageMagick](#imagemagick)
# Help # Help
@ -332,12 +335,71 @@ $(foreach ($Group in $Groups) {
$Group.Group[0] $Group.Group[0]
}) | Format-Table }) | Format-Table
``` ```
### Error
`$Error` выводит все ошибки текущего сеанса \
`$Error[0].InvocationInfo` развернутый отчет об ошибке \
`$Error.clear()` \
`$LASTEXITCODE` результат выполнения последней команды (0 - успех) \
`exit 1` код завершения, который возвращается $LASTEXITCODE
### Property
`$srv.Count` кол-во элементов в массиве \
`$srv.Length` содержит количество символом строки переменной [string] или количество значений (строк) объекта \
`$srv.Chars(2)` отобразить 3-й символ в строке \
`$srv[2]` отобразить 3-ю строку в массиве
### Method
`$srv.Insert(0,"https://")` добавить значение перед первым символом \
`$srv.Substring(4)` удалить (из всего массива) первые 4 символа \
`$srv.Remove(3)` удалить из всего массива все после 3 символа \
`$string = "123"` создать строку \
`$int = [convert]::ToInt32($string)` преобразовать строку в тип данных число \
`[string]::Concat($text,$num)` объеденить переменные в одну строку \
`[string]::Join(":",$text,$num)` объеденить используя разделитель \
`[string]::Compare($text,$num,$true)` выдает 0 при совпадении или 1/-1 при несовпадении, $true (без учета регистра) или $false (с учетом регистра) \
`[string]::Equals($text,$num)` производит сравнение двух строк и выдает $true при их совпадении или $false при несовпадении \
`[string]::IsNullOrEmpty($text)` проверяет наличие строки, если строка пуста $true, если нет $false \
`[string]::IsNullOrWhiteSpace($text2)` проверяет на наличие только символов пробел, табуляция или символ новой строки
### DateTime
`Get-TimeZone` часовой пояс \
`[DateTime]::UtcNow` время в формате UTC 0 \
`(Get-Date).AddHours(-3)` \
`$Date = (Get-Date -Format "dd/MM/yyyy hh:mm:ss")` \
`$Date = Get-Date -f "dd/MM/yyyy"` получаем тип данных [string] \
`[DateTime]$gDate = Get-Date "$Date"` преобразовать в тип [DateTime] \
`[int32]$days=($fDate-$gDate).Days` получить разницу в днях \
`"5/7/07" -as [DateTime]` преобразовать входные данные в тип данных [DateTime] \
`New-TimeSpan -Start $VBRRP.CreationTimeUTC -End $VBRRP.CompletionTimeUTC` получить разницу во времени
### Measure-Command
`(Measure-Command {ping ya.ru}).TotalSeconds` узнать только время выполнения \
`(Get-History)[-1] | select @{Name="RunTime"; Expression={$_.EndExecutionTime - $_.StartExecutionTime}},ExecutionStatus,CommandLine` посчитать время работы последней [-1] (select -Last 1) выполненной команды и узнать ее статус
### Timer
`$start_time = Get-Date` зафиксировать время до выполнения команды \
`$end_time = Get-Date` зафиксировать время по завершению \
`$time = $end_time - $start_time` высчитать время работы скрипта \
`$min = $time.minutes` \
`$sec = $time.seconds` \
`Write-Host "$min минут $sec секунд"` \
`$timer = [System.Diagnostics.Stopwatch]::StartNew()` запустить таймер \
`$timer.IsRunning` статус работы таймера \
`$timer.Elapsed.TotalSeconds` отобразить время с момента запуска (в секундах) \
`$timer.Stop()` остановить таймер
# npp # npp
`pwsh -NoExit -ExecutionPolicy Unrestricted -WindowStyle Maximized -File "$(FULL_CURRENT_PATH)"` `pwsh -NoExit -ExecutionPolicy Unrestricted -WindowStyle Maximized -File "$(FULL_CURRENT_PATH)"`
`%AppData%\Notepad++` themes/shortcuts.xml `%AppData%\Notepad++` themes/shortcuts.xml \
``` ```xml
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus> <NotepadPlus>
<InternalCommands /> <InternalCommands />
@ -550,31 +612,79 @@ foreach ($p in $gp) {
`[Char]` cимвол Юникода (16-разрядный) \ `[Char]` cимвол Юникода (16-разрядный) \
`$char = $srv.ToCharArray()` разбить строку [string] на массив [System.Array] из букв \ `$char = $srv.ToCharArray()` разбить строку [string] на массив [System.Array] из букв \
# Module
### psd1
```PowerShell
@{
RootModule = "Get-Function.psm1"
ModuleVersion = "0.1"
Author = "Lifailon"
CompanyName = "Open Source Community"
Copyright = "Apache-2.0"
Description = "Function example"
PowerShellVersion = "7.2"
PrivateData = @{
PSData = @{
Tags = @("Function","Example")
ProjectUri = "https://github.com/Lifailon/PS-Commands"
LicenseUri = "https://github.com/Lifailon/Console-Translate/blob/rsa/LICENSE"
ReleaseNotes = "Second release"
}
}
}
```
### psm1
```PowerShell
function Get-Function {
<#
.SYNOPSIS
Описание
.DESCRIPTION
Описание
.LINK
https://github.com/Lifailon/PS-Commands
#>
param (
[Parameter(Mandatory,ValueFromPipeline)][string]$Text,
[ValidateSet("Test1","Test2")][string]$Provider = "Test1",
[ValidateRange(1,3)][int]$Number = 2,
[Switch]$Switch
)
Write-Host Param Text: $Text
Write-Host Param Provider: $Provider
Write-Host Param Number: $Number
Write-Host Param Switch: $Switch
}
```
`Get-Function Test`
### Switch ### Switch
```PowerShell ```PowerShell
$MMM = Get-Date -UFormat "%m" $MMM = Get-Date -UFormat "%m"
switch($MMM) { switch($MMM) {
"01" {$Month = 'Jan'} "01" {$Month = 'Jan'}
"02" {$Month = 'Feb'} "02" {$Month = 'Feb'}
"03" {$Month = 'Mar'} "03" {$Month = 'Mar'}
"04" {$Month = 'Apr'} "04" {$Month = 'Apr'}
"05" {$Month = 'May'} "05" {$Month = 'May'}
"06" {$Month = 'Jun'} "06" {$Month = 'Jun'}
"07" {$Month = 'Jul'} "07" {$Month = 'Jul'}
"08" {$Month = 'Aug'} "08" {$Month = 'Aug'}
"09" {$Month = 'Sep'} "09" {$Month = 'Sep'}
"10" {$Month = 'Oct'} "10" {$Month = 'Oct'}
"11" {$Month = 'Nov'} "11" {$Month = 'Nov'}
"12" {$Month = 'Dec'} "12" {$Month = 'Dec'}
} }
``` ```
### function switch ### function switch
```PowerShell ```PowerShell
Function fun-switch ( Function fun-switch (
[switch]$param [switch]$param
) { ) {
If ($param) {"yes"} else {"no"} If ($param) {"yes"} else {"no"}
} }
fun-switch -param fun-switch -param
``` ```
# Bit # Bit
@ -687,53 +797,10 @@ function ConvertFrom-Bit {
`(Get-Process pwsh).ProcessorAffinity = 61440` 1111000000000000 присвоить 4 последних ядра \ `(Get-Process pwsh).ProcessorAffinity = 61440` 1111000000000000 присвоить 4 последних ядра \
`(Get-Process pwsh).ProcessorAffinity = (ConvertFrom-Bit 1111000000000000)` `(Get-Process pwsh).ProcessorAffinity = (ConvertFrom-Bit 1111000000000000)`
### Property # Cycle
`$srv.Count` кол-во элементов в массиве \
`$srv.Length` содержит количество символом строки переменной [string] или количество значений (строк) объекта \
`$srv.Chars(2)` отобразить 3-й символ в строке \
`$srv[2]` отобразить 3-ю строку в массиве
### Method
`$srv.Insert(0,"https://")` добавить значение перед первым символом \
`$srv.Substring(4)` удалить (из всего массива) первые 4 символа \
`$srv.Remove(3)` удалить из всего массива все после 3 символа \
`$string = "123"` создать строку \
`$int = [convert]::ToInt32($string)` преобразовать строку в тип данных число \
`[string]::Concat($text,$num)` объеденить переменные в одну строку \
`[string]::Join(":",$text,$num)` объеденить используя разделитель \
`[string]::Compare($text,$num,$true)` выдает 0 при совпадении или 1/-1 при несовпадении, $true (без учета регистра) или $false (с учетом регистра) \
`[string]::Equals($text,$num)` производит сравнение двух строк и выдает $true при их совпадении или $false при несовпадении \
`[string]::IsNullOrEmpty($text)` проверяет наличие строки, если строка пуста $true, если нет $false \
`[string]::IsNullOrWhiteSpace($text2)` проверяет на наличие только символов пробел, табуляция или символ новой строки
### DateTime
`Get-TimeZone` часовой пояс \
`[DateTime]::UtcNow` время в формате UTC 0 \
`(Get-Date).AddHours(-3)` \
`$Date = (Get-Date -Format "dd/MM/yyyy hh:mm:ss")` \
`$Date = Get-Date -f "dd/MM/yyyy"` получаем тип данных [string] \
`[DateTime]$gDate = Get-Date "$Date"` преобразовать в тип [DateTime] \
`[int32]$days=($fDate-$gDate).Days` получить разницу в днях \
`"5/7/07" -as [DateTime]` преобразовать входные данные в тип данных [DateTime] \
`New-TimeSpan -Start $VBRRP.CreationTimeUTC -End $VBRRP.CompletionTimeUTC` получить разницу во времени
### Measure-Command
`(Measure-Command {ping ya.ru}).TotalSeconds` узнать только время выполнения \
`(Get-History)[-1] | select @{Name="RunTime"; Expression={$_.EndExecutionTime - $_.StartExecutionTime}},ExecutionStatus,CommandLine` посчитать время работы последней [-1] (select -Last 1) выполненной команды и узнать ее статус
### Timer
`$start_time = Get-Date` зафиксировать время до выполнения команды \
`$end_time = Get-Date` зафиксировать время по завершению \
`$time = $end_time - $start_time` высчитать время работы скрипта \
`$min = $time.minutes` \
`$sec = $time.seconds` \
`Write-Host "$min минут $sec секунд"` \
`$timer = [System.Diagnostics.Stopwatch]::StartNew()` запустить таймер \
`$timer.IsRunning` статус работы таймера \
`$timer.Elapsed.TotalSeconds` отобразить время с момента запуска (в секундах) \
`$timer.Stop()` остановить таймер
### Foreach ### Foreach
`$list = 100..110` создать массив из цифр от 100 до 110 \ `$list = 100..110` создать массив из цифр от 100 до 110 \
`foreach ($srv in $list) {ping 192.168.3.$srv -n 1 -w 50}` $srv хранит текущий элемент из $list и повторяет команду до последнего элемента в массиве \ `foreach ($srv in $list) {ping 192.168.3.$srv -n 1 -w 50}` $srv хранит текущий элемент из $list и повторяет команду до последнего элемента в массиве \
`$foreach.Current` текущий элемент в цикле \ `$foreach.Current` текущий элемент в цикле \
@ -741,45 +808,40 @@ function ConvertFrom-Bit {
`$foreach.MoveNext()` переход к следующему элементу в цикле `$foreach.MoveNext()` переход к следующему элементу в цикле
### ForEach-Object (%) ### ForEach-Object (%)
`100..110 | %{ping -n 1 -w 50 192.168.3.$_ > $null` \ ```PowerShell
`if ($LastExitCode -eq 0) {Write-Host "192.168.3.$_" -ForegroundColor green` \ 100..110 | %{ping -n 1 -w 50 192.168.3.$_ > $null
`} else {` \ if ($LastExitCode -eq 0) {Write-Host "192.168.3.$_" -ForegroundColor green
`Write-Host "192.168.3.$_"-ForegroundColor Red}}` \ } else {
`%` передать цикл через конвеер (ForEach-Object) \ Write-Host "192.168.3.$_"-ForegroundColor Red}}
`$_` переменная цикла и конвеера ($PSItem) \ % # передать цикл через конвеер (ForEach-Object)
`gwmi Win32_QuickFixEngineering | where {$_.InstalledOn.ToString() -match "2022"} | %{($_.HotFixID.Substring(2))}` gwmi создает массив, вывод команды передается where для поиска подходящих под критерии объектов. По конвееру передается в цикл для удаления первых (2) символов методом Substring из всех объектов HotFixID. $_ # переменная цикла и конвеера ($PSItem)
gwmi Win32_QuickFixEngineering | where {$_.InstalledOn.ToString() -match "2022"} | %{($_.HotFixID.Substring(2))} # gwmi создает массив, вывод команды передается where для поиска подходящих под критерии объектов. По конвееру передается в цикл для удаления первых (2) символов методом Substring из всех объектов HotFixID.
```
### While ### While
`$srv = "yandex.ru"` \ ```PowerShell
`$out2 = "Есть пинг"` \ $srv = "yandex.ru"
`$out3 = "Нет пинга"` \ $out2 = "Есть пинг"
`$out = $false`` предварительно сбросить переменную, While проверяет условие до запуска цикла \ $out3 = "Нет пинга"
`While ($out -eq $false){`` пока условие является $true, цикл будет повторяться \ $out = $false # предварительно сбросить переменную, While проверяет условие до запуска цикла
`$out = ping -n 1 -w 50 $srv` \ While ($out -eq $false){ # пока условие является $true, цикл будет повторяться
`if ($out -match "ttl") {$out = $true; $out2} else {$out = $false; $out3; sleep 1}` \ $out = ping -n 1 -w 50 $srv
`}` if ($out -match "ttl") {$out = $true; $out2} else {$out = $false; $out3; sleep 1}
}
`while ($True){`` запустить бесконечный цикл \
`$result = ping yandex.ru -n 1 -w 50` \
`if ($result -match "TTL"){`` условие, при котором будет выполнен break \
`Write-Host "Сайт доступен"` \
`break`` остановит цикл \
`} else {Write-Host "Сайт недоступен"; sleep 1}` \
`}`
while ($True){ # запустить бесконечный цикл
$result = ping yandex.ru -n 1 -w 50
if ($result -match "TTL"){ # условие, при котором будет выполнен break
Write-Host "Сайт доступен"
break # остановит цикл
} else {Write-Host "Сайт недоступен"; sleep 1}
}
```
### Try-Catch-Finally ### Try-Catch-Finally
```PowerShell ```PowerShell
Try {$out = pping 192.168.3.1} Try {$out = pping 192.168.3.1}
Catch {Write-Warning "$($error[0])"} # выводит в случае ошибки (вместо ошибки) Catch {Write-Warning "$($error[0])"} # выводит в случае ошибки (вместо ошибки)
finally {$out = "End"} # выполняется в конце в любом случае finally {$out = "End"} # выполняется в конце в любом случае
``` ```
### Error
`$Error` выводит все ошибки текущего сеанса \
`$Error[0].InvocationInfo` развернутый отчет об ошибке \
`$Error.clear()` \
`$LASTEXITCODE` результат выполнения последней команды (0 - успех) \
`exit 1` код завершения, который возвращается $LASTEXITCODE
# Files # Files
`$file = [System.IO.File]::Create("$home\desktop\test.txt")` создать файл \ `$file = [System.IO.File]::Create("$home\desktop\test.txt")` создать файл \
@ -791,6 +853,7 @@ finally {$out = "End"} # выполняется в конце в любом сл
`$file.ReadToEnd()` прочитать файл целиком `$file.ReadToEnd()` прочитать файл целиком
### Read/Write Bytes ### Read/Write Bytes
`$file = [io.file]::ReadAllBytes("$home\desktop\powershell.jpg")` метод открывает двоичный файл, считывает его в массив байт и закрывает файл \ `$file = [io.file]::ReadAllBytes("$home\desktop\powershell.jpg")` метод открывает двоичный файл, считывает его в массив байт и закрывает файл \
`[io.file]::WriteAllBytes("$home\desktop\tloztotk-2.jpg",$file)` сохранить байты в файл (можно использовать для выгрузки двоичных файлов из БД) `[io.file]::WriteAllBytes("$home\desktop\tloztotk-2.jpg",$file)` сохранить байты в файл (можно использовать для выгрузки двоичных файлов из БД)
@ -838,7 +901,7 @@ foreach ($l in $ls) {
# Credential # Credential
`$Cred = Get-Credential` сохраняет креды в переменные $Cred.Username и $Cred.Password \ `$Cred = Get-Credential` сохраняет креды в переменные `$Cred.Username` и `$Cred.Password` \
`$Cred.GetNetworkCredential().password` извлечь пароль \ `$Cred.GetNetworkCredential().password` извлечь пароль \
`cmdkey /generic:"TERMSRV/$srv" /user:"$username" /pass:"$password"` добавить указанные креды аудентификации на на терминальный сервер для подключения без пароля \ `cmdkey /generic:"TERMSRV/$srv" /user:"$username" /pass:"$password"` добавить указанные креды аудентификации на на терминальный сервер для подключения без пароля \
`mstsc /admin /v:$srv` авторизоваться \ `mstsc /admin /v:$srv` авторизоваться \
@ -4975,10 +5038,11 @@ Security: \
`Get-Service SNMP | Restart-Service` `Get-Service SNMP | Restart-Service`
### snmpwalk ### snmpwalk
`snmpwalk -v 2c -c public 192.168.3.100` \ `snmpwalk -v 2c -c public 192.168.3.100` \
`snmpwalk -v 2c -c public -O e 192.168.3.100` `snmpwalk -v 2c -c public -O e 192.168.3.100`
### Modules ### SNMP Modules
`Install-Module -Name SNMP` \ `Install-Module -Name SNMP` \
`Get-SnmpData -IP 192.168.3.100 -OID 1.3.6.1.2.1.1.4.0 -UDPport 161 -Community public` \ `Get-SnmpData -IP 192.168.3.100 -OID 1.3.6.1.2.1.1.4.0 -UDPport 161 -Community public` \
@ -6074,7 +6138,7 @@ ansible_shell_type=powershell
``` ```
`ansible-inventory --list` проверить конфигурацию (читает в формате JSON) или YAML (-y) с просмотром все применяемых переменных `ansible-inventory --list` проверить конфигурацию (читает в формате JSON) или YAML (-y) с просмотром все применяемых переменных
# Modules # Win_Modules
`ansible us -m ping` \ `ansible us -m ping` \
`ansible win_ssh -m ping` \ `ansible win_ssh -m ping` \
@ -6742,6 +6806,23 @@ while ($response.status -ne "succeeded") {
} }
$response.output $response.output
``` ```
# Google-Filter
`https://www.google.com/search?q=the+rookie+2018+imdb` формат url-запроса поиска с пробелами \
`https://www.google.com/search?q=the+rookie+2018+site:imdb.com` поиск по сайту \
`https://www.google.com/search?q=the+rookie+intitle:index.of+"last modified"+(mkv|avi)` искать страницы, на которых указано "last modified" (последние изменения), заголовок страницы через расширенный оператор поиска (все перечисленные слова должны встречаться в заголовке) содержит слово "index.of" (указывает на директорию на веб-сервере, которая содержит список файлов) и искать файлы с расширениями .mkv или (|) .avi \
`https://www.google.com/search?q=the+rookie+2018+filetype:torrent` \
`инструкция gopro hero 11 filetype:pdf` искать сразу документ (на странице .pdf или загрузка) \
`"действия/глаголы, утвержденные для использования в командлетах"` искать по фразе целиком, без разбиения на отдельные слова \
`"ягуар скорость -животное -xe -xj"` узнаем скорость Ягуара, исключаем животное и модели автомобиля \
`"intitle:лучшие фильмы 2023"` запрос ищет страницы, заголовки (title HTML документа) которых содержат слова "лучшие", "фильмы" и "2023" (все слова должны быть в заголовке) \
`"allintitle:лучшие фильмы 2023"` запрос ищет страницы, заголовки (title HTML документа) которых содержат слова "лучшие", "фильмы" или "2023" (одно из) \
`"intext:telegram бот powershell"` поиск страниц, содержащих указанное ключевое слово в тексте страницы (а не только в заголовке) \
`"inurl:lifailon"` поиск страниц, в URL которых содержится указанное ключевое слово \
`intitle:index.of "game of thrones" mkv daterange:2010..2015` фильтрация по дате изменения, оператор позволяет задать диапазон дат в формате YYYYMMDD..YYYYMMDD \
`intitle:index.of "game of thrones" mkv after:2015` ограничить результаты поиска файлов, измененных до (before) или после (after) указанной даты \
`intitle:index.of "game of thrones" mkv from:2010 to:2015` фильтрация по диапазону дат
# Google-API # Google-API
### Google-Translate ### Google-Translate
@ -6834,6 +6915,20 @@ $(Invoke-RestMethod -Uri $url -Method Get) # список сезонов (.seaso
(Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2?api_key=$Token" -Method Get).episodes # вывести 2 сезон (Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2?api_key=$Token" -Method Get).episodes # вывести 2 сезон
Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2/episode/8?api_key=$Token" -Method Get # вывести 8 эпизод Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2/episode/8?api_key=$Token" -Method Get # вывести 8 эпизод
``` ```
# OMDb
Получение API ключа по [email](https://www.omdbapi.com)
`$API_KEY = "XXXXXXXX"` \
`$IMDb_ID = "tt7587890"` \
`curl -s "https://omdbapi.com/?apikey=$($API_KEY)&i=$($IMDb_ID)" | jq .` \
`curl -s "https://omdbapi.com/?apikey=$($API_KEY)&i=$($IMDb_ID)" | ConvertFrom-Json` \
`Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&s=The Rookie"` \
`Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie"` поиск по Title \
`Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie&y=1990"` поиск по Title и году выхода \
`Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie&type=movie"` поиск только фильма (movie) или сериала (series) \
`$(Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&s=The Rookie").Search` поиск всех совпадений (фильмы и сериалы)
# ivi # ivi
[ivi api doc](https://ask.ivi.ru/knowledge-bases/10/articles/51697-dokumentatsiya-dlya-api-ivi) [ivi api doc](https://ask.ivi.ru/knowledge-bases/10/articles/51697-dokumentatsiya-dlya-api-ivi)
@ -6853,7 +6948,7 @@ Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2/episode/8?a
```Bash ```Bash
id=5106881 id=5106881
get=$(curl -s https://www.kinopoisk.ru/film/$id/episodes/) get=$(curl -s https://www.kinopoisk.ru/film/$id/episodes/)
printf "%s\n" "${get[@]}" | grep -A 1 "Сезон 2" | grep "эпизодов" | sed -r "s/^.+\: //" # количество эпиздовод во втором сезоне (8) printf "%s\n" "${get[@]}" | grep -A 1 "Сезон 2" | grep "эпизодов" | sed -r "s/^.+\: //" # количество эпиздовод во втором сезоне
``` ```
### kinopoisk.dev ### kinopoisk.dev
@ -6943,6 +7038,31 @@ percent-decode() {
} }
percent-decode "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA" percent-decode "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA"
``` ```
### KinopoiskApiUnofficial
Бесплатно 500 запросов в сутки. [Swagger documentation](https://kinopoiskapiunofficial.tech/documentation/api)
```PowerShell
API_KEY="828ec96a-f45d-4e3d-84b1-XXXXXXXXXXXX"
$headers = @{
"accept" = "application/json"
"X-API-KEY" = "$API_KEY"
}
Invoke-RestMethod -Uri 'https://kinopoiskapiunofficial.tech/api/v2.2/films/1142153' -Headers $headers
```
`curl -s "https://kinopoiskapiunofficial.tech/api/v2.2/films/1142153" -H "accept: application/json" -H "X-API-KEY: $API_KEY" | jq .`
### Kinobox
`$url = "https://www.kinopoisk.ru/film/694051"` \
`$kp_id = $url -replace ".+/"` \
`https://kinomix.web.app/#694051` \
`curl -s -X GET "https://kinobox.tv/api/players/main?kinopoisk=$kp_id" -H "accept: application/json"` поиск по id Кинопоиск \
`curl -s -X GET "https://kinobox.tv/api/players/main?imdb=tt2293640" -H "accept: application/json"` поиск по id IMDb \
`curl -s -X GET "https://kinobox.tv/api/players/main?title=minions" -H "accept: application/json"` поиск основных плееров по названию \
`curl -s -X GET "https://kinobox.tv/api/players/all?title=minions" -H "accept: application/json"` поиск всех плееров \
`curl -s -X GET "https://kinobox.tv/api/popular/films" -H "accept: application/json"` популярные фильмы \
`curl -s -X GET "https://kinobox.tv/api/popular/series" -H "accept: application/json"` популярные сериалы
# VideoCDN # VideoCDN
[API](https://github.com/notssh/videocdn-api) \ [API](https://github.com/notssh/videocdn-api) \
@ -7277,26 +7397,6 @@ Describe "Get-RunningProcess" {
} }
} }
``` ```
# FFmpeg
```PowerShell
$release_latest = Invoke-RestMethod "https://api.github.com/repos/BtbN/FFmpeg-Builds/releases/latest"
$url = $($release_latest.assets | Where-Object name -match "ffmpeg-master-latest-win64-gpl.zip").browser_download_url
Invoke-RestMethod $url -OutFile $home\Downloads\ffmpeg-master-latest-win64-gpl.zip
Expand-Archive -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl.zip" -DestinationPath "$home\Downloads\"
Copy-Item -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" -Destination "C:\Windows\System32\ffmpeg.exe"
Remove-Item "$home\Downloads\ffmpeg-*" -Force -Recurse
```
`ffmpeg -i input.mp4 output.gif` конвертировать mp4 в gif \
`ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" output.gif` изменить разрешение на выходе \
`ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" -r 10 output.gif` изменить количество кадров в секунду на выходе \
`ffmpeg -i input.mp4 -filter_complex "fps=5,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" output.gif` сжатие за счет цветовой политры \
`ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 -q:v 1 output.jpg` вытащить скриншот из видео на 10 секунде \
`ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:10 -c copy output.mp4` вытащить кусок видео \
`ffmpeg -i "%d.jpeg" -framerate 2 -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4` создать видео из фото (1.jpeg, 2.jpeg и т.д.) с framerate (частотой кадров) в создаваемом видео 2 кадра в секунду \
`ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental output.mp4` запись без перекодирования (copy) RTSP-потока с камеры видеонаблюдения (+ аудио в кодеке AAC) в файл \
`ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental -movflags +faststart+frag_keyframe+empty_moov output.mp4` переместить метаданные в начало файла, что позволяет начать воспроизведение файла в видеоплеере до его полной загрузки \
`ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -frames:v 1 -c:v mjpeg output.jpg` сделать скриншот
# Pandoc # Pandoc
```PowerShell ```PowerShell
$release_latest = Invoke-RestMethod "https://api.github.com/repos/jgm/pandoc/releases/latest" $release_latest = Invoke-RestMethod "https://api.github.com/repos/jgm/pandoc/releases/latest"
@ -7318,6 +7418,26 @@ Import-Module ImportExcel
Import-Excel -Path srv.xlsx | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8 # конвертация Excel в csv Import-Excel -Path srv.xlsx | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8 # конвертация Excel в csv
pandoc -s -f csv -t markdown input.csv -o output.md # конвертация таблицу csv в markdown pandoc -s -f csv -t markdown input.csv -o output.md # конвертация таблицу csv в markdown
``` ```
# FFmpeg
```PowerShell
$release_latest = Invoke-RestMethod "https://api.github.com/repos/BtbN/FFmpeg-Builds/releases/latest"
$url = $($release_latest.assets | Where-Object name -match "ffmpeg-master-latest-win64-gpl.zip").browser_download_url
Invoke-RestMethod $url -OutFile $home\Downloads\ffmpeg-master-latest-win64-gpl.zip
Expand-Archive -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl.zip" -DestinationPath "$home\Downloads\"
Copy-Item -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" -Destination "C:\Windows\System32\ffmpeg.exe"
Remove-Item "$home\Downloads\ffmpeg-*" -Force -Recurse
```
`ffmpeg -i input.mp4 output.gif` конвертировать mp4 в gif \
`ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" output.gif` изменить разрешение на выходе \
`ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" -r 10 output.gif` изменить количество кадров в секунду на выходе \
`ffmpeg -i input.mp4 -filter_complex "fps=5,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" output.gif` сжатие за счет цветовой политры \
`ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 -q:v 1 output.jpg` вытащить скриншот из видео на 10 секунде \
`ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:10 -c copy output.mp4` вытащить кусок видео \
`ffmpeg -i "%d.jpeg" -framerate 2 -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4` создать видео из фото (1.jpeg, 2.jpeg и т.д.) с framerate (частотой кадров) в создаваемом видео 2 кадра в секунду \
`ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental output.mp4` запись без перекодирования (copy) RTSP-потока с камеры видеонаблюдения (+ аудио в кодеке AAC) в файл \
`ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental -movflags +faststart+frag_keyframe+empty_moov output.mp4` переместить метаданные в начало файла, что позволяет начать воспроизведение файла в видеоплеере до его полной загрузки \
`ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -frames:v 1 -c:v mjpeg output.jpg` сделать скриншот
# ImageMagick # ImageMagick
Source: [ImageMagick](https://sourceforge.net/projects/imagemagick) Source: [ImageMagick](https://sourceforge.net/projects/imagemagick)

306
posh.txt
View file

@ -7,9 +7,7 @@ GitHub Repo stars: https://img.shields.io/github/stars/Lifailon/PS-Commands
Большая база заметок PowerShell на русском языке. Большая база заметок PowerShell на русском языке.
Веб-версия (https://lifailon.github.io/) Веб-версия (https://lifailon.github.io)
WinForms - тестовый стенд с примерами (https://github.com/Lifailon/PS-Commands/blob/rsa/WinForms/WinForms-Test-Stend.ps1)
Habr: PowerShell и его возможности (https://habr.com/ru/articles/782592/) Habr: PowerShell и его возможности (https://habr.com/ru/articles/782592/)
@ -18,7 +16,9 @@ Habr: PowerShell и его возможности (https://habr.com/ru/articles/
# npp # npp
# Regex # Regex
# DataType # DataType
# Module
# Bit # Bit
# Cycle
# Files # Files
# Credential # Credential
# WinEvent # WinEvent
@ -97,13 +97,16 @@ Habr: PowerShell и его возможности (https://habr.com/ru/articles/
# Git # Git
# DSC # DSC
# Ansible # Ansible
# Win_Modules
# GigaChat # GigaChat
# YandexGPT # YandexGPT
# SuperAGI # SuperAGI
# Replicate # Replicate
# Google-Filter
# Google-API # Google-API
# RapidAPI # RapidAPI
# TMDB # TMDB
# OMDb
# ivi # ivi
# Kinopoisk # Kinopoisk
# VideoCDN # VideoCDN
@ -111,8 +114,8 @@ Habr: PowerShell и его возможности (https://habr.com/ru/articles/
# Discord # Discord
# oh-my-posh # oh-my-posh
# Pester # Pester
# FFmpeg
# Pandoc # Pandoc
# FFmpeg
# ImageMagick # ImageMagick
# Help # Help
@ -332,6 +335,65 @@ $(foreach ($Group in $Groups) {
$Group.Group[0] $Group.Group[0]
}) | Format-Table }) | Format-Table
### Error
$Error # выводит все ошибки текущего сеанса
$Error[0].InvocationInfo # развернутый отчет об ошибке
$Error.clear()
$LASTEXITCODE # результат выполнения последней команды (0 - успех)
exit 1 # код завершения, который возвращается $LASTEXITCODE
### Property
$srv.Count # кол-во элементов в массиве
$srv.Length # содержит количество символом строки переменной [string] или количество значений (строк) объекта
$srv.Chars(2) # отобразить 3-й символ в строке
$srv[2] # отобразить 3-ю строку в массиве
### Method
$srv.Insert(0,"https://") # добавить значение перед первым символом
$srv.Substring(4) # удалить (из всего массива) первые 4 символа
$srv.Remove(3) # удалить из всего массива все после 3 символа
$string = "123" # создать строку
$int = [convert]::ToInt32($string) # преобразовать строку в тип данных число
[string]::Concat($text,$num) # объеденить переменные в одну строку
[string]::Join(":",$text,$num) # объеденить используя разделитель
[string]::Compare($text,$num,$true) # выдает 0 при совпадении или 1/-1 при несовпадении, $true (без учета регистра) или $false (с учетом регистра)
[string]::Equals($text,$num) # производит сравнение двух строк и выдает $true при их совпадении или $false при несовпадении
[string]::IsNullOrEmpty($text) # проверяет наличие строки, если строка пуста $true, если нет $false
[string]::IsNullOrWhiteSpace($text2) # проверяет на наличие только символов пробел, табуляция или символ новой строки
### DateTime
Get-TimeZone # часовой пояс
[DateTime]::UtcNow # время в формате UTC 0
(Get-Date).AddHours(-3)
$Date = (Get-Date -Format "dd/MM/yyyy hh:mm:ss")
$Date = Get-Date -f "dd/MM/yyyy" # получаем тип данных [string]
[DateTime]$gDate = Get-Date "$Date" # преобразовать в тип [DateTime]
[int32]$days=($fDate-$gDate).Days # получить разницу в днях
"5/7/07" -as [DateTime] # преобразовать входные данные в тип данных [DateTime]
New-TimeSpan -Start $VBRRP.CreationTimeUTC -End $VBRRP.CompletionTimeUTC # получить разницу во времени
### Measure-Command
(Measure-Command {ping ya.ru}).TotalSeconds # узнать только время выполнения
(Get-History)[-1] | select @{Name="RunTime"; Expression={$_.EndExecutionTime - $_.StartExecutionTime}},ExecutionStatus,CommandLine # посчитать время работы последней [-1] (select -Last 1) выполненной команды и ее узнать статус
### Timer
$start_time = Get-Date # зафиксировать время до выполнения команды
$end_time = Get-Date # зафиксировать время по завершению
$time = $end_time - $start_time # высчитать время работы скрипта
$min = $time.minutes
$sec = $time.seconds
Write-Host "$min минут $sec секунд"
$timer = [System.Diagnostics.Stopwatch]::StartNew() # запустить таймер
$timer.IsRunning # статус работы таймера
$timer.Elapsed.TotalSeconds # отобразить время с момента запуска (в секундах)
$timer.Stop() # остановить таймер
# npp # npp
pwsh -NoExit -ExecutionPolicy Unrestricted -WindowStyle Maximized -File "$(FULL_CURRENT_PATH)" pwsh -NoExit -ExecutionPolicy Unrestricted -WindowStyle Maximized -File "$(FULL_CURRENT_PATH)"
@ -550,31 +612,79 @@ $srv -isnot [System.Object] # проверка на несоответствие
[Char] # cимвол Юникода (16-разрядный) [Char] # cимвол Юникода (16-разрядный)
$char = $srv.ToCharArray() # разбить строку [string] на массив [System.Array] из букв $char = $srv.ToCharArray() # разбить строку [string] на массив [System.Array] из букв
# Module
### psd1
@{
RootModule = "Get-Function.psm1"
ModuleVersion = "0.1"
Author = "Lifailon"
CompanyName = "Open Source Community"
Copyright = "Apache-2.0"
Description = "Function example"
PowerShellVersion = "7.2"
PrivateData = @{
PSData = @{
Tags = @("Function","Example")
ProjectUri = "https://github.com/Lifailon/PS-Commands"
LicenseUri = "https://github.com/Lifailon/Console-Translate/blob/rsa/LICENSE"
ReleaseNotes = "Second release"
}
}
}
### psm1
function Get-Function {
<#
.SYNOPSIS
Описание
.DESCRIPTION
Описание
.LINK
https://github.com/Lifailon/PS-Commands
#>
param (
[Parameter(Mandatory,ValueFromPipeline)][string]$Text,
[ValidateSet("Test1","Test2")][string]$Provider = "Test1",
[ValidateRange(1,3)][int]$Number = 2,
[Switch]$Switch
)
Write-Host Param Text: $Text
Write-Host Param Provider: $Provider
Write-Host Param Number: $Number
Write-Host Param Switch: $Switch
}
Get-Function Test
### Switch ### Switch
$MMM = Get-Date -UFormat "%m" $MMM = Get-Date -UFormat "%m"
switch($MMM) { switch($MMM) {
"01" {$Month = 'Jan'} "01" {$Month = 'Jan'}
"02" {$Month = 'Feb'} "02" {$Month = 'Feb'}
"03" {$Month = 'Mar'} "03" {$Month = 'Mar'}
"04" {$Month = 'Apr'} "04" {$Month = 'Apr'}
"05" {$Month = 'May'} "05" {$Month = 'May'}
"06" {$Month = 'Jun'} "06" {$Month = 'Jun'}
"07" {$Month = 'Jul'} "07" {$Month = 'Jul'}
"08" {$Month = 'Aug'} "08" {$Month = 'Aug'}
"09" {$Month = 'Sep'} "09" {$Month = 'Sep'}
"10" {$Month = 'Oct'} "10" {$Month = 'Oct'}
"11" {$Month = 'Nov'} "11" {$Month = 'Nov'}
"12" {$Month = 'Dec'} "12" {$Month = 'Dec'}
} }
### function switch ### function switch
Function fun-switch ( Function fun-switch (
[switch]$param [switch]$param
) { ) {
If ($param) {"yes"} else {"no"} If ($param) {"yes"} else {"no"}
} }
fun-switch -param fun-switch -param
# Bit # Bit
@ -687,53 +797,10 @@ Get-Process pwsh | fl ProcessorAffinity # привязка процесса к
(Get-Process pwsh).ProcessorAffinity = 61440 # 1111000000000000 присвоить 4 последних ядра (Get-Process pwsh).ProcessorAffinity = 61440 # 1111000000000000 присвоить 4 последних ядра
(Get-Process pwsh).ProcessorAffinity = (ConvertFrom-Bit 1111000000000000) (Get-Process pwsh).ProcessorAffinity = (ConvertFrom-Bit 1111000000000000)
### Property # Cycle
$srv.Count # кол-во элементов в массиве
$srv.Length # содержит количество символом строки переменной [string] или количество значений (строк) объекта
$srv.Chars(2) # отобразить 3-й символ в строке
$srv[2] # отобразить 3-ю строку в массиве
### Method
$srv.Insert(0,"https://") # добавить значение перед первым символом
$srv.Substring(4) # удалить (из всего массива) первые 4 символа
$srv.Remove(3) # удалить из всего массива все после 3 символа
$string = "123" # создать строку
$int = [convert]::ToInt32($string) # преобразовать строку в тип данных число
[string]::Concat($text,$num) # объеденить переменные в одну строку
[string]::Join(":",$text,$num) # объеденить используя разделитель
[string]::Compare($text,$num,$true) # выдает 0 при совпадении или 1/-1 при несовпадении, $true (без учета регистра) или $false (с учетом регистра)
[string]::Equals($text,$num) # производит сравнение двух строк и выдает $true при их совпадении или $false при несовпадении
[string]::IsNullOrEmpty($text) # проверяет наличие строки, если строка пуста $true, если нет $false
[string]::IsNullOrWhiteSpace($text2) # проверяет на наличие только символов пробел, табуляция или символ новой строки
### DateTime
Get-TimeZone # часовой пояс
[DateTime]::UtcNow # время в формате UTC 0
(Get-Date).AddHours(-3)
$Date = (Get-Date -Format "dd/MM/yyyy hh:mm:ss")
$Date = Get-Date -f "dd/MM/yyyy" # получаем тип данных [string]
[DateTime]$gDate = Get-Date "$Date" # преобразовать в тип [DateTime]
[int32]$days=($fDate-$gDate).Days # получить разницу в днях
"5/7/07" -as [DateTime] # преобразовать входные данные в тип данных [DateTime]
New-TimeSpan -Start $VBRRP.CreationTimeUTC -End $VBRRP.CompletionTimeUTC # получить разницу во времени
### Measure-Command
(Measure-Command {ping ya.ru}).TotalSeconds # узнать только время выполнения
(Get-History)[-1] | select @{Name="RunTime"; Expression={$_.EndExecutionTime - $_.StartExecutionTime}},ExecutionStatus,CommandLine # посчитать время работы последней [-1] (select -Last 1) выполненной команды и ее узнать статус
### Timer
$start_time = Get-Date # зафиксировать время до выполнения команды
$end_time = Get-Date # зафиксировать время по завершению
$time = $end_time - $start_time # высчитать время работы скрипта
$min = $time.minutes
$sec = $time.seconds
Write-Host "$min минут $sec секунд"
$timer = [System.Diagnostics.Stopwatch]::StartNew() # запустить таймер
$timer.IsRunning # статус работы таймера
$timer.Elapsed.TotalSeconds # отобразить время с момента запуска (в секундах)
$timer.Stop() # остановить таймер
### Foreach ### Foreach
$list = 100..110 # создать массив из цифр от 100 до 110 $list = 100..110 # создать массив из цифр от 100 до 110
foreach ($srv in $list) {ping 192.168.3.$srv -n 1 -w 50} # $srv хранит текущий элемент из $list и повторяет команду до последнего элемента в массиве foreach ($srv in $list) {ping 192.168.3.$srv -n 1 -w 50} # $srv хранит текущий элемент из $list и повторяет команду до последнего элемента в массиве
$foreach.Current # текущий элемент в цикле $foreach.Current # текущий элемент в цикле
@ -741,6 +808,7 @@ $foreach.Reset() # обнуляет итерацию, перебор начне
$foreach.MoveNext() # переход к следующему элементу в цикле $foreach.MoveNext() # переход к следующему элементу в цикле
### ForEach-Object (%) ### ForEach-Object (%)
100..110 | %{ping -n 1 -w 50 192.168.3.$_ > $null 100..110 | %{ping -n 1 -w 50 192.168.3.$_ > $null
if ($LastExitCode -eq 0) {Write-Host "192.168.3.$_" -ForegroundColor green if ($LastExitCode -eq 0) {Write-Host "192.168.3.$_" -ForegroundColor green
} else { } else {
@ -750,6 +818,7 @@ $_ # переменная цикла и конвеера ($PSItem)
gwmi Win32_QuickFixEngineering | where {$_.InstalledOn.ToString() -match "2022"} | %{($_.HotFixID.Substring(2))} # gwmi создает массив, вывод команды передается where для поиска подходящих под критерии объектов. По конвееру передается в цикл для удаления первых (2) символов методом Substring из всех объектов HotFixID. gwmi Win32_QuickFixEngineering | where {$_.InstalledOn.ToString() -match "2022"} | %{($_.HotFixID.Substring(2))} # gwmi создает массив, вывод команды передается where для поиска подходящих под критерии объектов. По конвееру передается в цикл для удаления первых (2) символов методом Substring из всех объектов HotFixID.
### While ### While
$srv = "yandex.ru" $srv = "yandex.ru"
$out2 = "Есть пинг" $out2 = "Есть пинг"
$out3 = "Нет пинга" $out3 = "Нет пинга"
@ -773,13 +842,6 @@ Try {$out = pping 192.168.3.1}
Catch {Write-Warning "$($error[0])"} # выводит в случае ошибки (вместо ошибки) Catch {Write-Warning "$($error[0])"} # выводит в случае ошибки (вместо ошибки)
finally {$out = "End"} # выполняется в конце в любом случае finally {$out = "End"} # выполняется в конце в любом случае
### Error
$Error # выводит все ошибки текущего сеанса
$Error[0].InvocationInfo # развернутый отчет об ошибке
$Error.clear()
$LASTEXITCODE # результат выполнения последней команды (0 - успех)
exit 1 # код завершения, который возвращается $LASTEXITCODE
# Files # Files
$file = [System.IO.File]::Create("$home\desktop\test.txt") # создать файл $file = [System.IO.File]::Create("$home\desktop\test.txt") # создать файл
@ -791,6 +853,7 @@ $file.ReadLine() # построчный вывод
$file.ReadToEnd() # прочитать файл целиком $file.ReadToEnd() # прочитать файл целиком
### Read/Write Bytes ### Read/Write Bytes
$file = [io.file]::ReadAllBytes("$home\desktop\powershell.jpg") # метод открывает двоичный файл, считывает его в массив байт и закрывает файл $file = [io.file]::ReadAllBytes("$home\desktop\powershell.jpg") # метод открывает двоичный файл, считывает его в массив байт и закрывает файл
[io.file]::WriteAllBytes("$home\desktop\tloztotk-2.jpg",$file) # сохранить байты в файл (можно использовать для выгрузки двоичных файлов из БД) [io.file]::WriteAllBytes("$home\desktop\tloztotk-2.jpg",$file) # сохранить байты в файл (можно использовать для выгрузки двоичных файлов из БД)
@ -4975,10 +5038,11 @@ New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\
Get-Service SNMP | Restart-Service Get-Service SNMP | Restart-Service
### snmpwalk ### snmpwalk
snmpwalk -v 2c -c public 192.168.3.100 snmpwalk -v 2c -c public 192.168.3.100
snmpwalk -v 2c -c public -O e 192.168.3.100 snmpwalk -v 2c -c public -O e 192.168.3.100
### Modules ### SNMP Modules
Install-Module -Name SNMP Install-Module -Name SNMP
Get-SnmpData -IP 192.168.3.100 -OID 1.3.6.1.2.1.1.4.0 -UDPport 161 -Community public Get-SnmpData -IP 192.168.3.100 -OID 1.3.6.1.2.1.1.4.0 -UDPport 161 -Community public
@ -6074,7 +6138,7 @@ ansible_shell_type=powershell
ansible-inventory --list # проверить конфигурацию (читает в формате JSON) или YAML (-y) с просмотром все применяемых переменных ansible-inventory --list # проверить конфигурацию (читает в формате JSON) или YAML (-y) с просмотром все применяемых переменных
# Modules # Win_Modules
ansible us -m ping ansible us -m ping
ansible win_ssh -m ping ansible win_ssh -m ping
@ -6742,6 +6806,23 @@ while ($response.status -ne "succeeded") {
} }
$response.output $response.output
# Google-Filter
https://www.google.com/search?q=the+rookie+2018+imdb # формат url-запроса поиска с пробелами
https://www.google.com/search?q=the+rookie+2018+site:imdb.com # поиск по сайту
https://www.google.com/search?q=the+rookie+intitle:index.of+"last modified"+(mkv|avi) # искать страницы, на которых указано "last modified" (последние изменения), заголовок страницы через расширенный оператор поиска (все перечисленные слова должны встречаться в заголовке) содержит слово "index.of" (указывает на директорию на веб-сервере, которая содержит список файлов) и искать файлы с расширениями .mkv или (|) .avi
https://www.google.com/search?q=the+rookie+2018+filetype:torrent
инструкция gopro hero 11 filetype:pdf # искать сразу документ (на странице .pdf или загрузка)
"действия/глаголы, утвержденные для использования в командлетах" # искать по фразе целиком, без разбиения на отдельные слова
"ягуар скорость -животное -xe -xj" # узнаем скорость Ягуара, исключаем животное и модели автомобиля
"intitle:лучшие фильмы 2023" # запрос ищет страницы, заголовки (title HTML документа) которых содержат слова "лучшие", "фильмы" и "2023" (все слова должны быть в заголовке)
"allintitle:лучшие фильмы 2023" # запрос ищет страницы, заголовки (title HTML документа) которых содержат слова "лучшие", "фильмы" или "2023" (одно из)
"intext:telegram бот powershell" # поиск страниц, содержащих указанное ключевое слово в тексте страницы (а не только в заголовке)
"inurl:lifailon" # поиск страниц, в URL которых содержится указанное ключевое слово
intitle:index.of "game of thrones" mkv daterange:2010..2015 # фильтрация по дате изменения, оператор позволяет задать диапазон дат в формате YYYYMMDD..YYYYMMDD
intitle:index.of "game of thrones" mkv after:2015 # ограничить результаты поиска файлов, измененных до (before) или после (after) указанной даты
intitle:index.of "game of thrones" mkv from:2010 to:2015 # фильтрация по диапазону дат
# Google-API # Google-API
### Google-Translate ### Google-Translate
@ -6834,6 +6915,20 @@ $(Invoke-RestMethod -Uri $url -Method Get) # список сезонов (.seaso
(Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2?api_key=$Token" -Method Get).episodes # вывести 2 сезон (Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2?api_key=$Token" -Method Get).episodes # вывести 2 сезон
Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2/episode/8?api_key=$Token" -Method Get # вывести 8 эпизод Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2/episode/8?api_key=$Token" -Method Get # вывести 8 эпизод
# OMDb
Получение API ключа по email (https://www.omdbapi.com)
$API_KEY = "XXXXXXXX"
$IMDb_ID = "tt7587890"
curl -s "https://omdbapi.com/?apikey=$($API_KEY)&i=$($IMDb_ID)" | jq .
curl -s "https://omdbapi.com/?apikey=$($API_KEY)&i=$($IMDb_ID)" | ConvertFrom-Json
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&s=The Rookie"
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie" # поиск по Title
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie&y=1990" # поиск по Title и году выхода
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie&type=movie" # поиск только фильма (movie) или сериала (series)
$(Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&s=The Rookie").Search # поиск всех совпадений (фильмы и сериалы)
# ivi # ivi
https://ask.ivi.ru/knowledge-bases/10/articles/51697-dokumentatsiya-dlya-api-ivi https://ask.ivi.ru/knowledge-bases/10/articles/51697-dokumentatsiya-dlya-api-ivi
@ -6853,7 +6948,7 @@ id=$(curl -s https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok | jq .resul
id=5106881 id=5106881
get=$(curl -s https://www.kinopoisk.ru/film/$id/episodes/) get=$(curl -s https://www.kinopoisk.ru/film/$id/episodes/)
printf "%s\n" "${get[@]}" | grep -A 1 "Сезон 2" | grep "эпизодов" | sed -r "s/^.+\: //" # количество эпиздовод во втором сезоне (8) printf "%s\n" "${get[@]}" | grep -A 1 "Сезон 2" | grep "эпизодов" | sed -r "s/^.+\: //" # количество эпиздовод во втором сезоне
### kinopoisk.dev ### kinopoisk.dev
@ -6943,6 +7038,31 @@ percent-decode() {
} }
percent-decode "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA" percent-decode "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA"
### KinopoiskApiUnofficial
Бесплатно 500 запросов в сутки. Swagger documentation (https://kinopoiskapiunofficial.tech/documentation/api)
API_KEY="828ec96a-f45d-4e3d-84b1-XXXXXXXXXXXX"
$headers = @{
"accept" = "application/json"
"X-API-KEY" = "$API_KEY"
}
Invoke-RestMethod -Uri 'https://kinopoiskapiunofficial.tech/api/v2.2/films/1142153' -Headers $headers
curl -s "https://kinopoiskapiunofficial.tech/api/v2.2/films/1142153" -H "accept: application/json" -H "X-API-KEY: $API_KEY" | jq .
### Kinobox
$url = "https://www.kinopoisk.ru/film/694051"
$kp_id = $url -replace ".+/"
https://kinomix.web.app/#694051
curl -s -X GET "https://kinobox.tv/api/players/main?kinopoisk=$kp_id" -H "accept: application/json" # поиск по id Кинопоиск
curl -s -X GET "https://kinobox.tv/api/players/main?imdb=tt2293640" -H "accept: application/json" # поиск по id IMDb
curl -s -X GET "https://kinobox.tv/api/players/main?title=minions" -H "accept: application/json" # поиск основных плееров по названию
curl -s -X GET "https://kinobox.tv/api/players/all?title=minions" -H "accept: application/json" # поиск всех плееров
curl -s -X GET "https://kinobox.tv/api/popular/films" -H "accept: application/json" # популярные фильмы
curl -s -X GET "https://kinobox.tv/api/popular/series" -H "accept: application/json" # популярные сериалы
# VideoCDN # VideoCDN
https://github.com/notssh/videocdn-api https://github.com/notssh/videocdn-api
@ -7277,26 +7397,6 @@ Describe "Get-RunningProcess" {
} }
} }
# FFmpeg
$release_latest = Invoke-RestMethod "https://api.github.com/repos/BtbN/FFmpeg-Builds/releases/latest"
$url = $($release_latest.assets | Where-Object name -match "ffmpeg-master-latest-win64-gpl.zip").browser_download_url
Invoke-RestMethod $url -OutFile $home\Downloads\ffmpeg-master-latest-win64-gpl.zip
Expand-Archive -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl.zip" -DestinationPath "$home\Downloads\"
Copy-Item -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" -Destination "C:\Windows\System32\ffmpeg.exe"
Remove-Item "$home\Downloads\ffmpeg-*" -Force -Recurse
ffmpeg -i input.mp4 output.gif # конвертировать mp4 в gif
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" output.gif # изменить разрешение на выходе
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" -r 10 output.gif # изменить количество кадров в секунду на выходе
ffmpeg -i input.mp4 -filter_complex "fps=5,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" output.gif # сжатие за счет цветовой политры
ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 -q:v 1 output.jpg # вытащить скриншот из видео на 10 секунде
ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:10 -c copy output.mp4 # вытащить кусок видео
ffmpeg -i "%d.jpeg" -framerate 2 -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4 # создать видео из фото (1.jpeg, 2.jpeg и т.д.) с framerate (частотой кадров) в создаваемом видео 2 кадра в секунду
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental output.mp4 # запись без перекодирования (copy) RTSP-потока с камеры видеонаблюдения (+ аудио в кодеке AAC) в файл
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental -movflags +faststart+frag_keyframe+empty_moov output.mp4 # переместить метаданные в начало файла, что позволяет начать воспроизведение файла в видеоплеере до его полной загрузки
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -frames:v 1 -c:v mjpeg output.jpg # сделать скриншот
# Pandoc # Pandoc
$release_latest = Invoke-RestMethod "https://api.github.com/repos/jgm/pandoc/releases/latest" $release_latest = Invoke-RestMethod "https://api.github.com/repos/jgm/pandoc/releases/latest"
@ -7318,6 +7418,26 @@ Import-Module ImportExcel
Import-Excel -Path srv.xlsx | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8 # конвертация Excel в csv Import-Excel -Path srv.xlsx | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8 # конвертация Excel в csv
pandoc -s -f csv -t markdown input.csv -o output.md # конвертация таблицу csv в markdown pandoc -s -f csv -t markdown input.csv -o output.md # конвертация таблицу csv в markdown
# FFmpeg
$release_latest = Invoke-RestMethod "https://api.github.com/repos/BtbN/FFmpeg-Builds/releases/latest"
$url = $($release_latest.assets | Where-Object name -match "ffmpeg-master-latest-win64-gpl.zip").browser_download_url
Invoke-RestMethod $url -OutFile $home\Downloads\ffmpeg-master-latest-win64-gpl.zip
Expand-Archive -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl.zip" -DestinationPath "$home\Downloads\"
Copy-Item -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" -Destination "C:\Windows\System32\ffmpeg.exe"
Remove-Item "$home\Downloads\ffmpeg-*" -Force -Recurse
ffmpeg -i input.mp4 output.gif # конвертировать mp4 в gif
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" output.gif # изменить разрешение на выходе
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" -r 10 output.gif # изменить количество кадров в секунду на выходе
ffmpeg -i input.mp4 -filter_complex "fps=5,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" output.gif # сжатие за счет цветовой политры
ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 -q:v 1 output.jpg # вытащить скриншот из видео на 10 секунде
ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:10 -c copy output.mp4 # вытащить кусок видео
ffmpeg -i "%d.jpeg" -framerate 2 -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4 # создать видео из фото (1.jpeg, 2.jpeg и т.д.) с framerate (частотой кадров) в создаваемом видео 2 кадра в секунду
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental output.mp4 # запись без перекодирования (copy) RTSP-потока с камеры видеонаблюдения (+ аудио в кодеке AAC) в файл
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental -movflags +faststart+frag_keyframe+empty_moov output.mp4 # переместить метаданные в начало файла, что позволяет начать воспроизведение файла в видеоплеере до его полной загрузки
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -frames:v 1 -c:v mjpeg output.jpg # сделать скриншот
# ImageMagick # ImageMagick
Source (https://sourceforge.net/projects/imagemagick) Source (https://sourceforge.net/projects/imagemagick)