Add zabbix, influx regex, openssl
Pre add: ansible, winrm config, bit convertor, openssh, hyper-v, pki
This commit is contained in:
parent
8609b6ff17
commit
e8eae9dfa0
1 changed files with 370 additions and 96 deletions
466
README.md
466
README.md
|
|
@ -53,13 +53,13 @@
|
||||||
- [Performance](#performance)
|
- [Performance](#performance)
|
||||||
- [SNMP](#snmp)
|
- [SNMP](#snmp)
|
||||||
- [Zabbix](#zabbix)
|
- [Zabbix](#zabbix)
|
||||||
|
# [pki](#pki)
|
||||||
|
# [OpenSSL](#openssl)
|
||||||
- [OpenSSH](#openssh)
|
- [OpenSSH](#openssh)
|
||||||
- [WinRM](#winrm)
|
- [WinRM](#winrm)
|
||||||
- [pki](#pki)
|
- [pki](#pki)
|
||||||
- [DSC](#dsc)
|
|
||||||
- [Git](#git)
|
- [Git](#git)
|
||||||
- [Ansible](#ansible)
|
- [Ansible](#ansible)
|
||||||
- [Jenkins](#jenkins)
|
|
||||||
|
|
||||||
### Help
|
### Help
|
||||||
`Get-Verb` действия/глаголы, утвержденные для использования в командлетах \
|
`Get-Verb` действия/глаголы, утвержденные для использования в командлетах \
|
||||||
|
|
@ -316,6 +316,17 @@ $ # Конец строки
|
||||||
`-match "zabbix|rpc"` условия, для поиска по нескольким словам \
|
`-match "zabbix|rpc"` условия, для поиска по нескольким словам \
|
||||||
`-NotMatch` проверка на отсутствие вхождения \
|
`-NotMatch` проверка на отсутствие вхождения \
|
||||||
|
|
||||||
|
### Matches
|
||||||
|
`$ip = "192.168.10.1"` \
|
||||||
|
`$ip -match "(\.\d{1,3})\.\d{1,2}"` True \
|
||||||
|
`$Matches` отобразить все подходящие переменные последнего поиска, которые входят и не входят в группы ()
|
||||||
|
|
||||||
|
`$String = "09/14/2017 12:00:27 - mtbill_post_201709141058.txt 7577_Delivered: OK"` \
|
||||||
|
`$String -Match ".*(?=\.txt)" | Out-Null` \
|
||||||
|
`$Matches[0][-4..-1] -Join ""`
|
||||||
|
|
||||||
|
`$string.Substring($string.IndexOf(".txt")-4, 4) # 2-й вариант (IndexOf)`
|
||||||
|
|
||||||
### Форматирование (.NET method format)
|
### Форматирование (.NET method format)
|
||||||
`[string]::Format("{1} {0}","Index0","Index1")` \
|
`[string]::Format("{1} {0}","Index0","Index1")` \
|
||||||
`"{1} {0}" -f "Index0","Index1"` \
|
`"{1} {0}" -f "Index0","Index1"` \
|
||||||
|
|
@ -330,17 +341,6 @@ foreach ($p in $gp) {
|
||||||
"{0} - {1:N2}" -f $p.processname, $p.cpu # округлить
|
"{0} - {1:N2}" -f $p.processname, $p.cpu # округлить
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### Matches
|
|
||||||
`$ip = "192.168.10.1"` \
|
|
||||||
`$ip -match "(\.\d{1,3})\.\d{1,2}"` True \
|
|
||||||
`$Matches` отобразить все подходящие переменные последнего поиска, которые входят и не входят в группы ()
|
|
||||||
|
|
||||||
`$String = "09/14/2017 12:00:27 - mtbill_post_201709141058.txt 7577_Delivered: OK"` \
|
|
||||||
`$String -Match ".*(?=\.txt)" | Out-Null` \
|
|
||||||
`$Matches[0][-4..-1] -Join ""`
|
|
||||||
|
|
||||||
`$string.Substring($string.IndexOf(".txt")-4, 4) # 2-й вариант (IndexOf)`
|
|
||||||
|
|
||||||
### Условный оператор
|
### Условный оператор
|
||||||
`$rh = Read-Host` \
|
`$rh = Read-Host` \
|
||||||
`if ($rh -eq 1) {ipconfig} elseif ($rh -eq 2) {getmac} else {hostname}` \
|
`if ($rh -eq 1) {ipconfig} elseif ($rh -eq 2) {getmac} else {hostname}` \
|
||||||
|
|
@ -2481,6 +2481,12 @@ $Explorer = $Folder.GetExplorer()
|
||||||
$Explorer.Display()
|
$Explorer.Display()
|
||||||
$Outlook.Quit()
|
$Outlook.Quit()
|
||||||
```
|
```
|
||||||
|
### Microsoft.Update
|
||||||
|
|
||||||
|
`(New-Object -com 'Microsoft.Update.AutoUpdate').Settings` \
|
||||||
|
`(New-Object -com 'Microsoft.Update.AutoUpdate').Results` \
|
||||||
|
`(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).hours` кол-во часов, прошедших с последней даты установки обновления безопасности в Windows.
|
||||||
|
|
||||||
# dotNET
|
# dotNET
|
||||||
|
|
||||||
`[System.Diagnostics.EventLog] | select Assembly,Module` \
|
`[System.Diagnostics.EventLog] | select Assembly,Module` \
|
||||||
|
|
@ -3870,7 +3876,9 @@ API Token: `wqsqOIR3d-PYmiJQYir4sX_NjtKKyh8ZWbfX1ZlfEEpAH3Z2ylcHx3XZzUA36XO3HIos
|
||||||
`DROP DATABASE powershell` удалить БД \
|
`DROP DATABASE powershell` удалить БД \
|
||||||
`USE powershell` \
|
`USE powershell` \
|
||||||
`SHOW measurements` отобразить все таблицы \
|
`SHOW measurements` отобразить все таблицы \
|
||||||
`INSERT performance,host=console,counter=CPU value=0.88` записать данные в таблицу performance \
|
`INSERT performance,host=console,counter=CPU value=0.88` записать данные в таблицу performance
|
||||||
|
|
||||||
|
### SELECT/WHERE
|
||||||
`SELECT * FROM performance` отобразить все данные в таблице \
|
`SELECT * FROM performance` отобразить все данные в таблице \
|
||||||
`SELECT value FROM performance` отфильтровать по столбцу value (только Field Keys) \
|
`SELECT value FROM performance` отфильтровать по столбцу value (только Field Keys) \
|
||||||
`SELECT * FROM performance limit 10` отобразить 10 единиц данных \
|
`SELECT * FROM performance limit 10` отобразить 10 единиц данных \
|
||||||
|
|
@ -3881,7 +3889,24 @@ API Token: `wqsqOIR3d-PYmiJQYir4sX_NjtKKyh8ZWbfX1ZlfEEpAH3Z2ylcHx3XZzUA36XO3HIos
|
||||||
`DELETE FROM performance WHERE time > now() -1h` удалить данные за последние 1/4 часа \
|
`DELETE FROM performance WHERE time > now() -1h` удалить данные за последние 1/4 часа \
|
||||||
`DELETE FROM performance WHERE time < now() -24h` удалить данные старше 24 часов
|
`DELETE FROM performance WHERE time < now() -24h` удалить данные старше 24 часов
|
||||||
|
|
||||||
`SELECT/DELETE/SHOW/CREATE/DROP/EXPLAIN/GRANT/REVOKE/ALTER/SET/KILL`
|
### REGEX
|
||||||
|
`SELECT * FROM "performance" WHERE host =~ /.*-Pro/` приблизительно равно любое значение и на конце -Pro \
|
||||||
|
`SELECT * FROM "win_pdisk" WHERE instance =~/.*C:/ and time > now() - 5m` и \
|
||||||
|
`SELECT * FROM "win_pdisk" WHERE instance =~/.*E:/ or instance =~ /.*F:/` или \
|
||||||
|
`SELECT * FROM "win_pdisk" WHERE instance !~ /.*Total/` не равно (исключить) \
|
||||||
|
|
||||||
|
### GROUP BY tag_key
|
||||||
|
`SELECT * FROM "win_pdisk" WHERE instance !~ /.*Total/ and instance !~/.*C:/ GROUP BY instance` группировать результаты по тегу
|
||||||
|
|
||||||
|
### Functions(field_key)
|
||||||
|
https://docs.influxdata.com/influxdb/v1.8/query_language/functions/ \
|
||||||
|
`SELECT instance,LAST(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance` отфильтровать вывод по последнему/текущему значению \
|
||||||
|
`SELECT instance,FIRST(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance` отфильтровать вывод по первому значению за весь или указанный отрезок времени \
|
||||||
|
`SELECT instance,MIN(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance` отфильтровать вывод с отображением минимального значения \
|
||||||
|
`SELECT instance,MAX(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance` отфильтровать вывод с отображением максимального значения \
|
||||||
|
`SELECT SUM(Bytes_Received_persec) FROM "win_net" GROUP BY instance` суммах всех значений \
|
||||||
|
`SELECT COUNT(Bytes_Received_persec) FROM "win_net" WHERE Bytes_Received_persec >= 0 GROUP BY instance` кол-во данных, где значение выше или равно 0 \
|
||||||
|
`SELECT MEAN(Bytes_Received_persec) FROM "win_net" WHERE Bytes_Received_persec < 1000 GROUP BY instance` среднее значение данных с показателем от 0 до 1000 (509)
|
||||||
|
|
||||||
### POLICY
|
### POLICY
|
||||||
`CREATE DATABASE powershell WITH DURATION 48h REPLICATION 1 NAME "del2d"` создать БД с политикой хранения 2 дня \
|
`CREATE DATABASE powershell WITH DURATION 48h REPLICATION 1 NAME "del2d"` создать БД с политикой хранения 2 дня \
|
||||||
|
|
@ -4358,6 +4383,333 @@ $results2 +=[PSCustomObject]@{'ID'=$d.id.ToString();'Data'=$d.Data.ToString()} #
|
||||||
}
|
}
|
||||||
$results2
|
$results2
|
||||||
```
|
```
|
||||||
|
# Zabbix
|
||||||
|
|
||||||
|
### Zabbix Agent Deploy
|
||||||
|
```
|
||||||
|
$url = "https://cdn.zabbix.com/zabbix/binaries/stable/6.4/6.4.5/zabbix_agent2-6.4.5-windows-amd64-static.zip"
|
||||||
|
$path = "$home\Downloads\zabbix-agent2-6.4.5.zip"
|
||||||
|
$WebClient = New-Object System.Net.WebClient
|
||||||
|
$WebClient.DownloadFile($url, $path) # скачать файл
|
||||||
|
Expand-Archive $path -DestinationPath "C:\zabbix-agent2-6.4.5\" # разархивировать
|
||||||
|
Remove-Item $path # удалить архив
|
||||||
|
New-NetFirewallRule -DisplayName "Zabbix-Agent" -Profile Any -Direction Inbound -Action Allow -Protocol TCP -LocalPort 10050,10051 # открыть порты в FW
|
||||||
|
|
||||||
|
$Zabbix_Server = "192.168.3.102"
|
||||||
|
$conf = "C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.conf"
|
||||||
|
$cat = cat $conf
|
||||||
|
$rep = $cat -replace "Server=.+","Server=$Zabbix_Server"
|
||||||
|
$rep | Select-String Server=
|
||||||
|
$rep > $conf
|
||||||
|
|
||||||
|
$exe = "C:\zabbix-agent2-6.4.5\bin\zabbix_agent2.exe"
|
||||||
|
.$exe --config $conf --install # установить службу
|
||||||
|
Get-Service *Zabbix*Agent* | Start-Service # запустить службу
|
||||||
|
#.$exe --config $conf --uninstall # удалить службу
|
||||||
|
```
|
||||||
|
### zabbix_sender
|
||||||
|
|
||||||
|
Создать host - задать произвольное имя (powershell-host) и добавить в группу \
|
||||||
|
Создать Items \
|
||||||
|
Name: Service Count \
|
||||||
|
Type: Zabbix trapper \
|
||||||
|
Key: service.count \
|
||||||
|
Type of Information: Numeric
|
||||||
|
```
|
||||||
|
$path = "C:\zabbix-agent2-6.4.5\bin"
|
||||||
|
$scount = (Get-Service).Count
|
||||||
|
.$path\zabbix_sender.exe -z 192.168.3.102 -s "powershell-host" -k service.count -o $scount
|
||||||
|
```
|
||||||
|
### zabbix_get
|
||||||
|
|
||||||
|
`apt install zabbix-get` \
|
||||||
|
`nano /etc/zabbix/zabbix_agentd.conf` \
|
||||||
|
`Server=127.0.0.1,192.168.3.102,192.168.3.99` добавить сервера для получения данных zabbix_get с агента (как их запрашивает сервер)
|
||||||
|
|
||||||
|
`.$path\zabbix_get -s 192.168.3.101 -p 10050 -k agent.version` проверить версию агента \
|
||||||
|
`.$path\zabbix_get -s 192.168.3.101 -p 10050 -k agent.ping` 1 - ok \
|
||||||
|
`.$path\zabbix_get -s 192.168.3.101 -p 10050 -k net.if.discovery` список сетевых интерфейсов \
|
||||||
|
`.$path\zabbix_get -s 192.168.3.101 -p 10050 -k net.if.in["ens33"]` \
|
||||||
|
`.$path\zabbix_get -s 192.168.3.101 -p 10050 -k net.if.out["ens33"]`
|
||||||
|
|
||||||
|
### UserParameter
|
||||||
|
|
||||||
|
`UserParameter=process.count,powershell -Command "(Get-Process).Count" \
|
||||||
|
`UserParameter=process.vm[*],powershell -Command "(Get-Process $1).ws"
|
||||||
|
|
||||||
|
Test: \
|
||||||
|
`C:\zabbix-agent2-6.4.5\bin\zabbix_get.exe -s 127.0.0.1 -p 10050 -k process.count \
|
||||||
|
`C:\zabbix-agent2-6.4.5\bin\zabbix_get.exe -s 127.0.0.1 -p 10050 -k process.vm[zabbix_agent2] \
|
||||||
|
`C:\zabbix-agent2-6.4.5\bin\zabbix_get.exe -s 127.0.0.1 -p 10050 -k process.vm[powershell]
|
||||||
|
|
||||||
|
Создать новые Items: \
|
||||||
|
key: process.count \
|
||||||
|
key: process.vm[zabbix_agent2]
|
||||||
|
|
||||||
|
### Include
|
||||||
|
|
||||||
|
- Добавить параметр Include для включения конфигурационных файлов подключаемых плагинов
|
||||||
|
`'Include=.\zabbix_agent2.d\plugins.d\*.conf' >> C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.conf`
|
||||||
|
|
||||||
|
- Создать конфигурационный файл с пользовательскими параметрами в каталоге, путь к которому указан в zabbix_agentd.conf
|
||||||
|
`'UserParameter=Get-Query-Param[*],powershell.exe -noprofile -executionpolicy bypass -File C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.d\scripts\User-Sessions\Get-Query-Param.ps1 $1' > C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.d\plugins.d\User-Sessions.conf`
|
||||||
|
|
||||||
|
- Поместить скрипт Get-Query-Param.ps1 в каталог, путь к которому указан в User-Sessions.conf. Скрипт содержим пользовательские параметры, которые он принимает от Zabbix сервера.
|
||||||
|
```
|
||||||
|
Param([string]$select)
|
||||||
|
if ($select -eq "ACTIVEUSER") {
|
||||||
|
(Get-Query | where status -match "Active").User
|
||||||
|
}
|
||||||
|
if ($select -eq "INACTIVEUSER") {
|
||||||
|
(Get-Query | where status -match "Disconnect").User
|
||||||
|
}
|
||||||
|
if ($select -eq "ACTIVECOUNT") {
|
||||||
|
(Get-Query | where status -match "Active").Status.Count
|
||||||
|
}
|
||||||
|
if ($select -eq "INACTIVECOUNT") {
|
||||||
|
(Get-Query | where status -match "Disconnect").Status.Count
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- Проверить работу скрипта:
|
||||||
|
|
||||||
|
`$path = "C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.d\scripts\User-Sessions" \
|
||||||
|
`.$path\Get-Query-Param.ps1 ACTIVEUSER \
|
||||||
|
`.$path\Get-Query-Param.ps1 INACTIVEUSER \
|
||||||
|
`.$path\Get-Query-Param.ps1 ACTIVECOUNT \
|
||||||
|
`.$path\Get-Query-Param.ps1 INACTIVECOUNT
|
||||||
|
|
||||||
|
- Создать Items с ключами:
|
||||||
|
|
||||||
|
`Get-Query-Param[ACTIVEUSER]` Type: Text \
|
||||||
|
`Get-Query-Param[INACTIVEUSER]` Type: Text \
|
||||||
|
`Get-Query-Param[ACTIVECOUNT]` Type: Int \
|
||||||
|
`Get-Query-Param[INACTIVECOUNT]` Type: Int
|
||||||
|
|
||||||
|
- Макросы:
|
||||||
|
|
||||||
|
`{$ACTIVEMAX} = 16 \
|
||||||
|
`{$ACTIVEMIN} = 0
|
||||||
|
|
||||||
|
- Триггеры:
|
||||||
|
|
||||||
|
`last(/Windows-User-Sessions/Get-Query-Param[ACTIVECOUNT])>{$ACTIVEMAX} \
|
||||||
|
`min(/Windows-User-Sessions/Get-Query-Param[ACTIVECOUNT],24h)={$ACTIVEMIN}
|
||||||
|
|
||||||
|
### zabbix_agent2.conf
|
||||||
|
```
|
||||||
|
# Агент может работать в пассивном (сервер забирает сам информацию) и активном режиме (агент сам отправляет):
|
||||||
|
Server=192.168.3.102
|
||||||
|
ServerActive=192.168.3.102
|
||||||
|
# Требуется указать hostname для ServerActive:
|
||||||
|
Hostname=huawei-book-01
|
||||||
|
# Если не указано, используется для генерации имени хоста (игнорируется, если имя хоста определено):
|
||||||
|
# HostnameItem=system.hostname
|
||||||
|
# Как часто обновляется список активных проверок, в секундах (Range: 60-3600):
|
||||||
|
RefreshActiveChecks=120
|
||||||
|
# IP-адрес источника для исходящих соединений:
|
||||||
|
# SourceIP=
|
||||||
|
# Агент будет слушать на этом порту соединения с сервером (Range: 1024-32767):
|
||||||
|
# ListenPort=10050
|
||||||
|
# Список IP-адресов, которые агент должен прослушивать через запятую
|
||||||
|
# ListenIP=0.0.0.0
|
||||||
|
# Агент будет прослушивать этот порт для запросов статуса HTTP (Range: 1024-32767):
|
||||||
|
# StatusPort=
|
||||||
|
ControlSocket=\\.\pipe\agent.sock
|
||||||
|
# Куда вести журнал (file/syslog/console):
|
||||||
|
LogType=file
|
||||||
|
LogFile=C:\zabbix-agent2-6.4.5\zabbix_agent2.log
|
||||||
|
# Размер лога от 0-1024 MB (0 - отключить автоматическую ротацию логов)
|
||||||
|
LogFileSize=100
|
||||||
|
# Уровень логирования. 4 - для отладки (выдает много информации)
|
||||||
|
DebugLevel=4
|
||||||
|
```
|
||||||
|
### API Token
|
||||||
|
|
||||||
|
https://www.zabbix.com/documentation/current/en/manual/api/reference
|
||||||
|
|
||||||
|
`$ip = "192.168.3.102" \
|
||||||
|
`$url = "http://$ip/zabbix/api_jsonrpc.php"
|
||||||
|
```
|
||||||
|
$data = @{
|
||||||
|
"jsonrpc"="2.0";
|
||||||
|
"method"="user.login";
|
||||||
|
"params"=@{
|
||||||
|
"username"="Admin"; # в версии до 6.4 параметр "user"
|
||||||
|
"password"="zabbix";
|
||||||
|
};
|
||||||
|
"id"=1;
|
||||||
|
}
|
||||||
|
$token = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||||
|
```
|
||||||
|
`$token = "914ee100f4e8c4b68a70eab2a0a1fb153cfcd4905421d0ffacb82c20a57aa50e"` создать токен в UI (http://192.168.3.102/zabbix/zabbix.php?action=token.list)
|
||||||
|
|
||||||
|
### user.get
|
||||||
|
```
|
||||||
|
$data = @{
|
||||||
|
"jsonrpc"="2.0";
|
||||||
|
"method"="user.get";
|
||||||
|
"params"=@{
|
||||||
|
};
|
||||||
|
"auth"=$token;
|
||||||
|
"id"=1;
|
||||||
|
}
|
||||||
|
$users = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||||
|
```
|
||||||
|
### problem.get
|
||||||
|
```
|
||||||
|
$data = @{
|
||||||
|
"jsonrpc"="2.0";
|
||||||
|
"method"="problem.get";
|
||||||
|
"params"=@{
|
||||||
|
};
|
||||||
|
"auth"=$token;
|
||||||
|
"id"=1;
|
||||||
|
}
|
||||||
|
(Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||||
|
```
|
||||||
|
### host.get
|
||||||
|
|
||||||
|
https://www.zabbix.com/documentation/current/en/manual/api/reference/host
|
||||||
|
|
||||||
|
host.create - creating new hosts \
|
||||||
|
host.delete - deleting hosts \
|
||||||
|
host.get - retrieving hosts \
|
||||||
|
host.massadd - adding related objects to hosts \
|
||||||
|
host.massremove - removing related objects from hosts \
|
||||||
|
host.massupdate - replacing or removing related objects from hosts \
|
||||||
|
host.update - updating hosts
|
||||||
|
```
|
||||||
|
$data = @{
|
||||||
|
"jsonrpc"="2.0";
|
||||||
|
"method"="host.get";
|
||||||
|
"params"=@{
|
||||||
|
"output"=@( # отфильтровать вывод
|
||||||
|
"hostid";
|
||||||
|
"host";
|
||||||
|
);
|
||||||
|
};
|
||||||
|
"id"=2;
|
||||||
|
"auth"=$token;
|
||||||
|
}
|
||||||
|
$hosts = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||||
|
$host_id = $hosts[3].hostid # забрать id хоста по индексу
|
||||||
|
```
|
||||||
|
### item.get
|
||||||
|
```
|
||||||
|
$data = @{
|
||||||
|
"jsonrpc"="2.0";
|
||||||
|
"method"="item.get";
|
||||||
|
"params"=@{
|
||||||
|
"hostids"=@($host_id); # отфильтровать по хосту
|
||||||
|
};
|
||||||
|
"auth"=$token;
|
||||||
|
"id"=1;
|
||||||
|
}
|
||||||
|
$items = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||||
|
$items_id = ($items | where key_ -match system.uptime).itemid # забрать id элемента данных
|
||||||
|
```
|
||||||
|
### history.get
|
||||||
|
```
|
||||||
|
$data = @{
|
||||||
|
"jsonrpc"="2.0";
|
||||||
|
"method"="history.get";
|
||||||
|
"params"=@{
|
||||||
|
"hostids"=@($host_id); # фильтрация по хосту
|
||||||
|
"itemids"=@($items_id); # фильтрация по элементу данных
|
||||||
|
};
|
||||||
|
"auth"=$token;
|
||||||
|
"id"=1;
|
||||||
|
}
|
||||||
|
$items_data_uptime = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result # получить все данные по ключу у конкретного хоста
|
||||||
|
```
|
||||||
|
### Convert Secconds To TimeSpan and DateTime
|
||||||
|
|
||||||
|
`$sec = $items_data_uptime.value`
|
||||||
|
```
|
||||||
|
function ConvertSecondsTo-TimeSpan {
|
||||||
|
param (
|
||||||
|
$insec
|
||||||
|
)
|
||||||
|
$TimeSpan = [TimeSpan]::fromseconds($insec)
|
||||||
|
"{0:dd' day 'hh\:mm\:ss}" -f $TimeSpan
|
||||||
|
}
|
||||||
|
```
|
||||||
|
`$UpTime = ConvertSecondsTo-TimeSpan $sec[-1]`
|
||||||
|
|
||||||
|
### Convert From Unix Time
|
||||||
|
|
||||||
|
`$time = $items_data_uptime.clock`
|
||||||
|
```
|
||||||
|
function ConvertFrom-UnixTime {
|
||||||
|
param (
|
||||||
|
$intime
|
||||||
|
)
|
||||||
|
$EpochTime = [DateTime]"1/1/1970"
|
||||||
|
$TimeZone = Get-TimeZone
|
||||||
|
$UTCTime = $EpochTime.AddSeconds($intime)
|
||||||
|
$UTCTime.AddMinutes($TimeZone.BaseUtcOffset.TotalMinutes)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
`$GetDataTime = ConvertFrom-UnixTime $time[-1]`
|
||||||
|
|
||||||
|
`($hosts | where hostid -eq $host_id).host` получить имя хоста \
|
||||||
|
`$UpTime` последнее полученное значение времени работы хоста \
|
||||||
|
`$GetDataTime` время последнего полученного значения
|
||||||
|
|
||||||
|
# pki
|
||||||
|
|
||||||
|
`New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "$env:computername" -FriendlyName "Test Certificate" -NotAfter (Get-Date).AddYears(5)` создать самоподписанный сертификат (в LocalMachine\My - Сертификаты компьютера\Личное) с сроком действия 5 лет
|
||||||
|
|
||||||
|
`Get-ChildItem -Path Cert:\CurrentUser\Root\` список всех установленных сертификатов в хранилище Доверенные корневые ЦС Текущего пользователя \
|
||||||
|
`Get-ChildItem -Path Cert:\CurrentUser\My\` список самозаверяющих сертификатов в Личное хранилище Текущего пользователя \
|
||||||
|
`Get-ChildItem -Path Cert:\LocalMachine\My\` список самозаверяющих сертификатов в Личное хранилище Локального компьютера \
|
||||||
|
`Get-ChildItem -Path Cert:\LocalMachine\My\ | select NotBefore,NotAfter,Thumbprint,Subject` срок действия сертификата \
|
||||||
|
`Get-ChildItem -Path Cert:\LocalMachine\My\ | where Thumbprint -eq D9356FB774EE0E6206B7D5B59B99102CA5B17BDA` поиск сертификат по отпечатку
|
||||||
|
|
||||||
|
`Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Certificates\` сертификаты в файловой системе, каждый файл соответствует сертификату, установленному в личном хранилище текущего пользователя \
|
||||||
|
`Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Keys\` ссылки на объекты закрытых ключей, созданных поставщиком хранилища ключей (KSP) \
|
||||||
|
`Get-ChildItem -Path HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates | ft -AutoSize` список сертификатов в реестре вошедшего в систему пользователя
|
||||||
|
|
||||||
|
`$cert = (Get-ChildItem -Path Cert:\CurrentUser\My\)[1]` выбрать сертификат \
|
||||||
|
`$cert | Remove-Item` удалить сертификат
|
||||||
|
|
||||||
|
`Export-Certificate -FilePath $home\Desktop\certificate.cer -Cert $cert` экспортировать сертификат \
|
||||||
|
`$cert.HasPrivateKey` проверить наличие закрытого ключа \
|
||||||
|
`$pass = "password" | ConvertTo-SecureString -AsPlainText -Force` создать пароль для шифрования закрытого ключа \
|
||||||
|
`Export-PfxCertificate -FilePath $home\Desktop\certificate.pfx -Password $pass -Cert $certificate` экспортировать сертификат с закрытым ключем
|
||||||
|
|
||||||
|
`Import-Certificate -FilePath $home\Desktop\certificate.cer -CertStoreLocation Cert:\CurrentUser\My` импортировать сертификат \
|
||||||
|
`Import-PfxCertificate -Exportable -Password $pass -CertStoreLocation Cert:\CurrentUser\My -FilePath $home\Desktop\certificate.pfx`
|
||||||
|
|
||||||
|
# OpenSSL
|
||||||
|
```
|
||||||
|
Invoke-WebRequest -Uri https://slproweb.com/download/Win64OpenSSL_Light-3_1_1.msi -OutFile $home\Downloads\OpenSSL-Light-3.1.1.msi
|
||||||
|
Start-Process $home\Downloads\OpenSSL-Light-3.1.1.msi -ArgumentList '/quiet' -Wait # установить msi пакет в тихом режиме
|
||||||
|
cd "C:\Program Files\OpenSSL-Win64\bin"
|
||||||
|
```
|
||||||
|
- Изменить пароль для PFX
|
||||||
|
`openssl pkcs12 -in "C:\Cert\domain.ru.pfx" -out "C:\Cert\domain.ru.pem" -nodes` экспортируем имеющийся сертификат и закрытый ключ в .pem-файл без пароля с указанием текущего пароля \
|
||||||
|
`openssl pkcs12 -export -in "C:\Cert\domain.ru.pem" -out "C:\Cert\domain.ru_password.pfx" -nodes` конвертируем .pem обратно в .pfx c указанием нового пароля
|
||||||
|
|
||||||
|
- Конвертация из закрытого и открытого ключа PEM в PFX
|
||||||
|
`openssl pkcs12 -export -in "C:\tmp\vpn\vpn.itproblog.ru-crt.pem" -inkey "C:\tmp\vpn\vpn.itproblog.ru-key.pem" -out "C:\tmp\vpn\vpn.iiproblog.ru.pfx" \
|
||||||
|
in – путь до файла с открытым ключом \
|
||||||
|
inkey – путь до файла с закрытым ключом \
|
||||||
|
out – путь до файла, в который будет конвертирован сертификат (pfx)
|
||||||
|
|
||||||
|
- Конвертация PFX в CRT
|
||||||
|
`openssl pkcs12 -in "C:\OpenSSL-Win64\bin\_.domain.ru.pfx" -clcerts -out "C:\OpenSSL-Win64\bin\_.domain.ru.crt"` указывается текущий и 2 раза новый пароль PEM pass phrase (файл содержит EGIN CERTIFICATE и BEGIN ENCRYPTED PRIVATE KEY) \
|
||||||
|
`openssl pkcs12 -in "C:\OpenSSL-Win64\bin\_.domain.ru.pfx" -clcerts -nokeys -out "C:\OpenSSL-Win64\bin\_.domain.ru.crt"` без ключа, получить открытую часть (файл содержит только EGIN CERTIFICATE)
|
||||||
|
|
||||||
|
- Конвертация PFX в KEY
|
||||||
|
`openssl pkcs12 -in "C:\OpenSSL-Win64\bin\_.domain.ru.pfx" -nocerts -out "C:\OpenSSL-Win64\bin\_.domain.ru.key"` файл содержит только BEGIN ENCRYPTED PRIVATE KEY
|
||||||
|
|
||||||
|
- Снять пароль к закрытого ключа .key
|
||||||
|
`openssl rsa -in "C:\OpenSSL-Win64\bin\_.domain.ru.key" -out "C:\OpenSSL-Win64\bin\_.domain.ru-decrypted.key"`
|
||||||
|
|
||||||
|
- CRT и KEY в PFX:
|
||||||
|
`openssl pkcs12 -inkey certificate.key -in certificate.crt -export -out certificate.pfx`
|
||||||
|
|
||||||
# OpenSSH
|
# OpenSSH
|
||||||
|
|
||||||
`Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'` \
|
`Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'` \
|
||||||
|
|
@ -4463,29 +4815,6 @@ New-WSManInstance -ResourceURI "winrm/config/Listener" -SelectorSet $selector_se
|
||||||
`MaxFieldLength увеличить до 0000ffff (65535)` \
|
`MaxFieldLength увеличить до 0000ffff (65535)` \
|
||||||
`MaxRequestBytes увеличить до 0000ffff (65535)`
|
`MaxRequestBytes увеличить до 0000ffff (65535)`
|
||||||
|
|
||||||
# pki
|
|
||||||
|
|
||||||
`Get-ChildItem -Path Cert:\CurrentUser\Root\` список всех установленных сертификатов в хранилище Доверенные корневые ЦС Текущего пользователя \
|
|
||||||
`Get-ChildItem -Path Cert:\CurrentUser\My\` список самозаверяющих сертификатов в Личное хранилище Текущего пользователя \
|
|
||||||
`Get-ChildItem -Path Cert:\LocalMachine\My\` список самозаверяющих сертификатов в Личное хранилище Локального компьютера \
|
|
||||||
`Get-ChildItem -Path Cert:\LocalMachine\My\ | select NotBefore,NotAfter,Thumbprint,Subject` срок действия сертификата \
|
|
||||||
`Get-ChildItem -Path Cert:\LocalMachine\My\ | where Thumbprint -eq D9356FB774EE0E6206B7D5B59B99102CA5B17BDA` поиск сертификат по отпечатку
|
|
||||||
|
|
||||||
`Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Certificates\` сертификаты в файловой системе, каждый файл соответствует сертификату, установленному в личном хранилище текущего пользователя \
|
|
||||||
`Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Keys\` ссылки на объекты закрытых ключей, созданных поставщиком хранилища ключей (KSP) \
|
|
||||||
`Get-ChildItem -Path HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates | ft -AutoSize` список сертификатов в реестре вошедшего в систему пользователя
|
|
||||||
|
|
||||||
`$cert = (Get-ChildItem -Path Cert:\CurrentUser\My\)[1]` выбрать сертификат \
|
|
||||||
`$cert | Remove-Item` удалить сертификат
|
|
||||||
|
|
||||||
`Export-Certificate -FilePath $home\Desktop\certificate.cer -Cert $cert` экспортировать сертификат \
|
|
||||||
`$cert.HasPrivateKey` проверить наличие закрытого ключа \
|
|
||||||
`$pass = "password" | ConvertTo-SecureString -AsPlainText -Force` создать пароль для шифрования закрытого ключа \
|
|
||||||
`Export-PfxCertificate -FilePath $home\Desktop\certificate.pfx -Password $pass -Cert $certificate` экспортировать сертификат с закрытым ключем
|
|
||||||
|
|
||||||
`Import-Certificate -FilePath $home\Desktop\certificate.cer -CertStoreLocation Cert:\CurrentUser\My` импортировать сертификат \
|
|
||||||
`Import-PfxCertificate -Exportable -Password $pass -CertStoreLocation Cert:\CurrentUser\My -FilePath $home\Desktop\certificate.pfx`
|
|
||||||
|
|
||||||
# DSC
|
# DSC
|
||||||
|
|
||||||
`Import-Module PSDesiredStateConfiguration` \
|
`Import-Module PSDesiredStateConfiguration` \
|
||||||
|
|
@ -4635,7 +4964,7 @@ path_user=/home/lifailon
|
||||||
ansible_python_interpreter=/usr/bin/python3
|
ansible_python_interpreter=/usr/bin/python3
|
||||||
|
|
||||||
[ws]
|
[ws]
|
||||||
huawei-01 ansible_host=192.168.3.99
|
huawei-book-01 ansible_host=192.168.3.99
|
||||||
plex-01 ansible_host=192.168.3.100
|
plex-01 ansible_host=192.168.3.100
|
||||||
|
|
||||||
[ws:vars]
|
[ws:vars]
|
||||||
|
|
@ -4652,7 +4981,7 @@ ansible_winrm_server_cert_validation=ignore
|
||||||
validate_certs=false
|
validate_certs=false
|
||||||
|
|
||||||
[win_ssh]
|
[win_ssh]
|
||||||
huawei-01 ansible_host=192.168.3.99
|
huawei-book-01 ansible_host=192.168.3.99
|
||||||
plex-01 ansible_host=192.168.3.100
|
plex-01 ansible_host=192.168.3.100
|
||||||
|
|
||||||
[win_ssh:vars]
|
[win_ssh:vars]
|
||||||
|
|
@ -4701,7 +5030,7 @@ ansible_shell_type=powershell
|
||||||
- name: Get port ssh
|
- name: Get port ssh
|
||||||
win_shell: |
|
win_shell: |
|
||||||
Get-Content "C:\Programdata\ssh\sshd_config" | Select-String "{{SearchName}}"
|
Get-Content "C:\Programdata\ssh\sshd_config" | Select-String "{{SearchName}}"
|
||||||
# Зарегистрировать вывод в переменную
|
# Передать вывод в переменную
|
||||||
register: command_output
|
register: command_output
|
||||||
- name: Output port ssh
|
- name: Output port ssh
|
||||||
# Вывести переменную на экран
|
# Вывести переменную на экран
|
||||||
|
|
@ -5050,58 +5379,3 @@ ansible_shell_type=powershell
|
||||||
var: wu_output
|
var: wu_output
|
||||||
```
|
```
|
||||||
`ansible-playbook /etc/ansible/win-update.yml`
|
`ansible-playbook /etc/ansible/win-update.yml`
|
||||||
|
|
||||||
# Jenkins
|
|
||||||
|
|
||||||
`nano /etc/apt/sources.list.d/jenkins.list` \
|
|
||||||
`deb [trusted=yes] https://pkg.jenkins.io/debian binary/` \
|
|
||||||
`apt-get update` \
|
|
||||||
`apt-get install -y fontconfig openjdk-11-jre` \
|
|
||||||
`apt-get install -y jenkins` \
|
|
||||||
`systemctl status jenkins` \
|
|
||||||
`cat /var/lib/jenkins/secrets/initialAdminPassword`
|
|
||||||
|
|
||||||
`Item - Freestyle` \
|
|
||||||
`This build is parameterized - Add Parameter - String Parameter - ProcessName` \
|
|
||||||
`Add build step - PowerShell` \
|
|
||||||
`Command:` \
|
|
||||||
`pwsh -command Get-Process -name *$env:ProcessName*`
|
|
||||||
|
|
||||||
`Item - Pipeline` \
|
|
||||||
`SCM - Git` \
|
|
||||||
`Repository URL: https://github.com/Lifailon/Deploy-PS-Module.git` \
|
|
||||||
`Branch: */rsa` \
|
|
||||||
`Script Path: Win-Get-Service/jenkinsfile.groovy` \
|
|
||||||
|
|
||||||
### jenkinsfile.groovy
|
|
||||||
```
|
|
||||||
pipeline {
|
|
||||||
agent any
|
|
||||||
parameters {
|
|
||||||
string(name: "ServiceName", defaultValue: "WinRM", trim: true, description: "Введите имя службы") // создать параметр
|
|
||||||
}
|
|
||||||
stages {
|
|
||||||
stage('Before Deploy Version') {
|
|
||||||
steps {
|
|
||||||
echo "Имя выбранной службы: $params.ServiceName"
|
|
||||||
sh "ansible-playbook Win-Get-Service/Get-Service.yml -e ServiceName=$params.ServiceName" // передать параметр на вход переменной playbook
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
### Get-Service.yml
|
|
||||||
```
|
|
||||||
- name: win_powershell
|
|
||||||
vars:
|
|
||||||
ServiceName: WinRM
|
|
||||||
hosts: ws
|
|
||||||
tasks:
|
|
||||||
- name: Run PowerShell Commands
|
|
||||||
win_shell: |
|
|
||||||
Get-Service *"{{ServiceName}}"*
|
|
||||||
register: command_output
|
|
||||||
- name: Command Output
|
|
||||||
debug:
|
|
||||||
var: command_output.stdout_lines
|
|
||||||
```
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue