Add files via upload

This commit is contained in:
Alex Kup 2023-05-02 12:44:36 +03:00 committed by GitHub
parent d674fc723a
commit d673fa782f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 772 additions and 60 deletions

628
API/Zabbix-api.psm1 Normal file
View file

@ -0,0 +1,628 @@
<#
.Synopsis
Open a session to the zabbix server
.Description
Open a session to the zabbix server
.Parameter PSCredential
Credential to connect to zabbix server
.Parameter IPAdress
Accept IP adress and domain name
.Parameter UseSSL
Switch to use https, leave empty to use http
.Example
Connect-Zabbix -User admin -Password zabbix -IPAdress 10.0.0.1
Connect to Zabbix server by IP adresse
.Example
Connect-Zabbix -User admin -Password zabbix -IPAdress zabbix.domain.lan -UseSSL
Connect to Zabbix server by domain name with SSL
#>
Function Connect-Zabbix {
Param (
[Parameter(Mandatory=$True)]
[PSCredential]$PSCredential
,
[Parameter(Mandatory=$True)]
[string]$IPAdress
,
[Switch]$UseSSL
)
$Body = @{
jsonrpc = "2.0"
method = "user.login"
params = @{
user = $PSCredential.UserName
password = $PSCredential.GetNetworkCredential().Password
}
id = 1
auth = $null
}
$BodyJSON = ConvertTo-Json $Body
Switch ($UseSSL.IsPresent) {
$False {$Protocol = "http"}
$True {$Protocol = "https"}
}
$URL = $Protocol+"://$IPAdress/zabbix"
$Res = Invoke-RestMethod ("$URL/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Connection successful
$Global:ZabbixSession = $Res | Select-Object jsonrpc,@{Name="Session";Expression={$_.Result}},id,@{Name="URL";Expression={$URL}}
Write-Host ("Successfuly connected to " + $URL)
}
else {
#Connection error
$Res.error
}
}
<#
.Synopsis
Get all host monitored from zabbix server
.Description
Get all host monitored from zabbix server
.Parameter HostName
To filter by name of the host
.Parameter HostID
To filter by id of the host
.Example
# Get all hosts managed by zabbix server
Get-ZabbixHost
.Example
# Get info about Server1 host
Get-ZabbixHost -HostName Server1
.Example
# Get info about 10123 ID
Get-ZabbixHost -HostID 10123
#>
Function Get-ZabbixHost {
Param (
$HostName
,
$HostID
)
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "host.get"
params = @{
output = "extend"
selectGroups = @(
"groupid",
"name"
)
selectParentTemplates = @(
"templateid",
"name"
)
filter = @{
host = $HostName
}
hostids = $HostID
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result
}
else {
#Command error
$Res.error
}
}
<#
.Synopsis
Get all templates from zabbix server
.Description
Get all templates from zabbix server
.Parameter TemplateName
To filter by name of the template
.Parameter TemplateID
To filter by id of the template
.Example
# Get all templates from zabbix server
$Session | Get-ZabbixTemplate
.Example
# Get info about Template1
Get-ZabbixTemplate -TemplateName Template1
.Example
# Get info about 10001 ID
Get-ZabbixTemplate -TemplateID 10001
#>
Function Get-ZabbixTemplate {
Param (
$TemplateName
,
$TemplateID
)
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "template.get"
params = @{
output = "extend"
selectHosts = "extend"
filter = @{
host = $TemplateName
}
templateids = $TemplateID
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result | Select-Object Name,TemplateID,@{Name="HostsMembers";Expression={$_.hosts.hostid}}
}
else {
#Command error
$Res.error
}
}
<#
.Synopsis
Get all groups from zabbix server
.Description
Get all groups from zabbix server
.Parameter GroupName
To filter by name of the group
.Parameter GroupID
To filter by id of the group
.Example
# Get all groups from zabbix server
$Session | Get-ZabbixGroup
.Example
# Get info about Group1
Get-ZabbixGroup -GroupName Group1
.Example
# Get info about 10001 ID
Get-ZabbixGroup -GroupID 10001
#>
Function Get-ZabbixGroup {
Param (
$GroupName
,
$GroupID
)
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "hostgroup.get"
params = @{
output = "extend"
selectHosts = @(
"hostid",
"host"
)
filter = @{
name = $GroupName
}
groupids = $GroupID
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result
}
else {
#Command error
$Res.error
}
}
<#
.Synopsis
Create new host to monitor from zabbix server
.Description
Create new host to monitor from zabbix server
.Parameter HostName
HostName of the host as it will display on zabbix
.Parameter IP
IP adress to supervise the host
.Parameter DNSName
Domain name to supervise the host
.Parameter Port
Port to supervise the host
.Parameter GroupID
ID of the group where add the host
.Parameter TemplateID
ID of the template where add the host
.Parameter MonitorByDNSName
If used, domain name of the host will used to contact it
.Example
# Get all groups from zabbix server
New-ZabbixHost -HostName Host1 -IP 10.0.0.1 -GroupID 8 -TemplateID 10001
#>
Function New-ZabbixHost {
Param (
[Parameter(Mandatory=$True)]
[string]$HostName
,
[string]$InterfaceType = 1
,
[string]$InterfaceMain = 1
,
[string]$IP
,
[string]$DNSName
,
[string]$Port = 10050
,
[Parameter(Mandatory=$True)]
[string]$GroupID
,
$TemplateID
,
[Switch]$MonitorByDNSName
)
Switch ($MonitorByDNSName.IsPresent) {
$False {$ByDNSName = 1} # = ByIP
$True {$ByDNSName = 0} # = ByDomainName
}
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "host.create"
params = @{
host = $HostName
interfaces = @(
@{
type = $InterfaceType
main = $InterfaceMain
useip = $ByDNSName
ip = $IP
dns = $DNSName
port = $Port
}
)
groups = @(
@{
groupid = $GroupID
}
)
templates = @(
@{
templateid = $TemplateID
}
)
}
auth = $ZabbixSession.Session
id = $ZabbixSession.id
}
$BodyJSON = ConvertTo-Json $Body -Depth 3
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result | Select-Object @{Name="hostids";Expression={$_.hostids[0]}}
}
else {
#Command error
$Res.error
}
}
<#
.Synopsis
Get all zabbix proxy
.Description
Get all zabbix proxy
.Parameter HostName
To filter by name of the proxy
.Parameter ProxyId
To filter by id of the proxy
.Parameter WithHosts
Switch to show hosts supervised by the proxy
.Example
# Get all hosts managed by zabbix server
Get-ZabbixProxy
.Example
# Get info about Server1 host
Get-ZabbixProxy -HostName ZabbixProxy1
#>
Function Get-ZabbixProxy {
Param (
$HostName
,
$ProxyId
,
[Switch]$WithHosts
)
Switch ($WithHosts.IsPresent) {
$False {$SelectHosts = $null} # = Without hosts
$True {$SelectHosts = "extend"} # = With hosts
}
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "proxy.get"
params = @{
output = "extend"
selectInterface = "extend"
proxyids = $ProxyId
filter = @{
host = $HostName
}
selectHosts = $SelectHosts
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result
}
else {
#Command error
$Res.error
}
}
<#
.Synopsis
Update the Zabbix proxy of a host
.Description
Update the Zabbix proxy of a host
.Parameter HostID
ID of the host you want to update
.Parameter ProxyId
ID of the Zabbix proxy which will supervise the host
.Example
The host with the ID 10266 will be supervised by Zabbix Server himself
Set-ZabbixHostProxy -HostID 10266 -ProxyId 0
.Example
The host with the ID 10266 will be supervised by the Zabbix proxy with the ID 10267
Set-ZabbixHostProxy -HostID 10266 -ProxyId 10267
#>
Function Set-ZabbixHostProxy {
Param (
[Parameter(Mandatory=$True)]
[int]$HostID
,
[Parameter(Mandatory=$True)]
[int]$ProxyId
)
if ($HostID -eq 0) {
Write-Error "Please enter a Host ID"
break
}
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "host.update"
params = @{
hostid = $HostID
proxy_hostid = $ProxyId
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result
}
else {
#Command error
$Res.error
}
}
Function Get-ZabbixItem {
Param (
[int]$HostID
,
[int]$ItemID
,
[string]$ItemName
,
[Switch]$Debug
)
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "item.get"
params = @{
output = "extend"
hostids = $HostID
itemids = $ItemID
search = @{
#name = $ItemName
#key_ = "system"
}
sortfield = "name"
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
Switch ($Debug.IsPresent) {
$True {Write-Host $BodyJSON -ForegroundColor Yellow}
}
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
Switch ($Debug.IsPresent) {
$True {Write-Host $Res -ForegroundColor Yellow}
}
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result
}
else {
#Command error
$Res.error
}
}
Function Get-ZabbixHostInterface {
Param (
$HostID
)
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "hostinterface.get"
params = @{
output = "extend"
hostids = $HostID
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result |
Select-Object *,@{Name="type_name";Expression={
switch ($_.type) {
"1" {"agent"; break}
"2" {"snmp"; break}
"3" {"ipmi"; break}
"4" {"jmx"; break}
}
}}
}
else {
#Command error
$Res.error
}
}
### Fonction non fonctionnelles ###
<#
Function Add-ZabbixHostInterface {
Param (
[string]$HostID,
[ValidateRange(1,4)]
[int]$InterfaceType = 1,
[ValidateSet("agent","snmp","ipmi","jmx")]
[string]$InterfaceTypeName,
[string]$IP,
[string]$DNSName,
[switch]$MonitorByDNSName,
[int]$InterfaceMain = 0
)
Switch ($MonitorByDNSName.IsPresent) {
$False {$ByDNSName = 1} # = ByIP
$True {$ByDNSName = 0} # = ByDomainName
}
Switch ($InterfaceTypeName) {
"agent" {$InterfaceType = 1; break}
"snmp" {$InterfaceType = 2; break}
"ipmi" {$InterfaceType = 3; break}
"jmx" {$InterfaceType = 4; break}
}
Switch ($InterfaceType) {
"1" {$Port = "10050"; break}
"2" {$Port = "161"; break}
"3" {$Port = "623"; break}
"4" {$Port = "11162"; break}
}
$Body = @{
jsonrpc = $ZabbixSession.jsonrpc
method = "hostinterface.create"
params = @{
hostids = $HostID
dns = $DNSName
ip = $IP
main = $InterfaceMain
port = $Port
type = $InterfaceType
useip = $ByDNSName
}
id = $ZabbixSession.id
auth = $ZabbixSession.Session
}
$BodyJSON = ConvertTo-Json $Body
Write-Host $BodyJSON
$Res = Invoke-RestMethod ($ZabbixSession.URL + "/api_jsonrpc.php") -ContentType "application/json" -Body $BodyJSON -Method Post
if (($Res | Get-Member | Select-Object -ExpandProperty Name) -contains "result") {
#Command successful
$Res.result
}
else {
#Command error
$Res.error
}
}
Add-ZabbixHostInterface -HostID (Get-ZabbixHost -HostName hv1).hostid -InterfaceTypeName snmp -DNSName hv1-2.maison.lan -MonitorByDNSName -IP 127.0.0.1
Get-ZabbixHostInterface -HostID (Get-ZabbixHost -HostName hv1).hostid
#>

12
API/Zabbix-api.txt Normal file
View file

@ -0,0 +1,12 @@
Import-Module .\Zabbix-api.psm1
$Cred = Get-Credential
Connect-Zabbix -PSCredential $Cred -IPAdress 192.168.1.1
Connect-Zabbix -PSCredential $Cred -IPAdress zabbix.domain.ru -UseSSL
(Get-Module Zabbix).ExportedCommands
Get-ZabbixHostInterface | ft
Get-ZabbixHost | ft
Get-ZabbixGroup | ft
Get-ZabbixTemplate | ft

192
posh.txt
View file

@ -13,13 +13,16 @@ PowerShell Commands
- ActiveDirectory
- ServerManager
- PackageManagement
- SQLite
- PowerCLI
- EMShell
- VBR
- REST-API
- Console-API
- Convert-Language
- TrueNAS
- Veeam
- REST API
- IE
- Console API
- XML
- Excel
- SQLite
- Git
### Help
@ -35,6 +38,15 @@ $PSVersionTable
# Object
### History
Get-History # история команд текущей сессии
(Get-PSReadLineOption).HistorySavePath # путь к сохраненному файлу с 4096 последних команд (из модуля PSReadLine)
Get-Content (Get-PSReadlineOption).HistorySavePath | Select-String Get # поиск по содержимому файла (GREP)
Set-PSReadlineOption -MaximumHistoryCount 10000 # изменить количество сохраняемых команд в файл
Get-PSReadLineOption | select MaximumHistoryCount
Set-PSReadlineOption -HistorySaveStyle SaveNothing # отключить ведение журнала
F2 # переключиться с InlineView на ListView
### Array
$srv = @("server-01", "server-02") # создать массив
$srv += @("server-03") # добавить в массив новый элемент
@ -409,10 +421,19 @@ Get-EventLog -List # отобразить все корневые журналы
Clear-EventLog Application # очистить логи указанного журнала
Get-EventLog -LogName Security -InstanceId 4624 # найти логи по ID в журнале Security
function Get-Log ($count=30,$hour=-3) { # указать значения параметров по умолчанию
Get-EventLog -LogName Application -Newest $count | where-Object TimeWritten -ge (Get-Date).AddHours($hour) # отобразить 30 новых событий за последние 3 часа
function Get-Log {
Param(
[Parameter(Mandatory = $true, ValueFromPipeline = $true)][int]$Count,
$Hour
)
if ($Hour -ne $null) {
Get-EventLog -LogName Application -Newest $Count | ? TimeWritten -ge (Get-Date).AddHours($Hour)
} else {
Get-EventLog -LogName Application -Newest $Count
}
Get-Log 10 -1 # передача параметров функции (если значения идут по порядку, то можно не указывать названия переменных)
}
10 | Get-Log
Get-Log 100 -2
### WinEvent
Get-WinEvent -ListLog * | where logname -match SMB | sort -Descending RecordCount # отобразить все доступные журналы логов
@ -525,14 +546,20 @@ Get-NetAdapter
Get-NetAdapterAdvancedProperty
Get-NetAdapterStatistics
### DNSClientServerAddress
Get-DNSClientServerAddress
Set-DNSClientServerAddress -InterfaceIndex (Get-NetIPConfiguration).InterfaceIndex -ServerAddresses 8.8.8.8
### nslookup
nslookup ya.ru 8.8.8.8
nslookup -type=any ya.ru
Resolve-DnsName ya.ru -Type MX # ALL,ANY,A,NS,SRV,CNAME,PTR,TXT(spf)
### route
Get-NetRoute
### netstat
Get-NetTCPConnection -State Established,Listen | where LocalAddress -match "192.168"
Get-NetTCPConnection -State Established,Listen | ? LocalAddress -match "192.168"
# WinRM
@ -1177,31 +1204,6 @@ break # остановить цикл
Get-Job | Receive-Job -Keep # отобразить и не удалять вывод (-Keep)
(Get-Job).Information # отобразить результат всех заданий
# SQLite
Install-Module -name MySQLite -Repository PSGallery
$path = "$home\desktop\Get-Service.db"
Get-Service | select Name,DisplayName,Status | ConvertTo-MySQLiteDB -Path $path -TableName Service -force
(Get-MySQLiteDB $path).Tables
New-MySQLiteDB -Path $path # создать базу
Invoke-MySQLiteQuery -Path $path -Query "SELECT name FROM sqlite_master WHERE type='table';" # список всех таблиц в базе
Invoke-MySQLiteQuery -Path $path -Query "CREATE TABLE Service (Name TEXT NOT NULL, DisplayName TEXT NOT NULL, Status TEXT NOT NULL);" # создать таблицу
Invoke-MySQLiteQuery -Path $path -Query "INSERT INTO Service (Name, DisplayName, Status) VALUES ('Test', 'Full-Test', 'Active');" # добавить данные в таблицу
Invoke-MySQLiteQuery -Path $path -Query "SELECT * FROM Service" # содержимое таблицы
Invoke-MySQLiteQuery -Path $path -Query "DROP TABLE Service;" # удалить таблицу
$Service = Get-Service | select Name,DisplayName,Status
foreach ($S in $Service) {
$1 = $S.Name; $2 = $S.DisplayName; $3 = $S.Status;
Invoke-MySQLiteQuery -Path $path -Query "INSERT INTO Service (Name, DisplayName, Status) VALUES ('$1', '$2', '$3');"
}
Install-Module PSSQLite
$Connection = New-SQLiteConnection -DataSource $path
$Connection.ChangePassword("password")
$Connection.Close()
Invoke-SqliteQuery -Query "SELECT * FROM Service" -DataSource "$path;Password=password"
# PowerCLI
Install-Module -Name VMware.PowerCLI # -AllowClobber # установить модуль (PackageProvider: nuget)
@ -1632,7 +1634,33 @@ cd %PROGRAMFILES%\Microsoft\Exchange Server\V14\Scripts # или v15 для Exch
Get-MailboxDatabaseCopyStatus * | where {$_.ContentIndexState -eq "Failed" -or $_.ContentIndexState -eq "FailedAndSuspended"} # отобразить у какой БД произошел сбой работы (FailedAndSuspended) или индекса (ContentIndexState)
# VBR
# TrueNAS
import-Module TrueNas
(Get-Module TrueNas).ExportedCommands
Connect-TrueNasServer -Server tnas-01 -SkipCertificateCheck
Get-TrueNasCertificate # настройки сертификата
Get-TrueNasSetting # настройки языка, time zone, syslog level и server, https port
Get-TrueNasUser # список пользователей
Get-TrueNasSystemVersion # характеристики (Physical Memory, Model, Cores) и Uptime
Get-TrueNasSystemAlert # snmp для оповещений
Get-TrueNasSystemNTP # список используемых NTP серверов
Get-TrueNasDisk # список разделов физического диска
Get-TrueNasInterface # сетевые интерфейсы
Get-TrueNasGlobalConfig # сетевые настройки
Get-TrueNasDnsServer # настроенные DNS-сервера
Get-TrueNasIscsiTarget # отобразить ID группы инициаторов использующих таргет, используемый portal, authentification и authen-method
Get-TrueNasIscsiInitiator # отобразить группы инициаторов
Get-TrueNasIscsiPortal # слушатель (Listen) и порт
Get-TrueNasIscsiExtent # список ISCSi Target (статус работы, путь)
Get-TrueNasPool # список pool (Id, Path, Status, Healthy)
Get-TrueNasVolume -Type FILESYSTEM # список pool файловых систем
Get-TrueNasVolume -Type VOLUME # список разделов в pool и их размер
Get-TrueNasService | ft # список служб и их статус
Start-TrueNasService ssh # запустить службу
Stop-TrueNasService ssh # остановить службу
# Veeam
Set-ExecutionPolicy AllSigned # or Set-ExecutionPolicy Bypass -Scope Process
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
@ -1650,7 +1678,7 @@ Get-VBRBackupServerCertificate
Get-VBRRestorePoint
Get-VBRViProxy
# REST-API
# REST API
$pars = Invoke-WebRequest -Uri $url
$pars | Get-Member
@ -1703,7 +1731,27 @@ $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
# Console-API
# IE
$ie.document.IHTMLDocument3_getElementsByTagName("input") | select name # получить имена всех Input Box
$ie.document.IHTMLDocument3_getElementsByTagName("button") | select innerText # получить имена всех Button
$ie.Document.documentElement.innerHTML # прочитать сырой Web Content (<input name="login" tabindex="100" class="input__control input__input" id="uniq32005644019429136" spellcheck="false" placeholder="Логин")
$All_Elements = $ie.document.IHTMLDocument3_getElementsByTagName("*") # забрать все элементы
$Go_Button = $All_Elements | ? innerText -like "go" # поиск элемента по имени
$Go_Button | select ie9_tagName # получить TagName (SPAN) для быстрого дальнейшего поиска
$SPAN_Elements = $ie.document.IHTMLDocument3_getElementsByTagName("SPAN")
$ie = New-Object -ComObject InternetExplorer.Application
$ie.navigate("https://yandex.ru")
$ie.visible = $true
$ie.document.IHTMLDocument3_getElementByID("login").value = "Login"
$ie.document.IHTMLDocument3_getElementByID("passwd").value = "Password"
$Button_Auth = ($ie.document.IHTMLDocument3_getElementsByTagName("button")) | ? innerText -match "Войти"
$Button_Auth.Click()
$Result = $ie.Document.documentElement.innerHTML
$ie.Quit()
# Console API
[Console] | Get-Member -Static
[Console]::BackgroundColor = "Blue"
@ -1742,7 +1790,7 @@ if ($pressed) {break}
sleep 1
} while ($true)
### Windows-API
### Windows API
Add-Type -AssemblyName System.Windows.Forms
[int][System.Windows.Forms.Keys]::F1
@ -1903,27 +1951,9 @@ Remove-Job -Name SrvListClick # удаляет задание
-SourceIdentifier # название регистрируемого события
-Action # действие при возникновении события
# Convert-Language
# XML
### HTML (HyperText Markup Language)
Get-Process | select Name, CPU | ConvertTo-HTML -As Table > "$home\desktop\proc-table.html" # вывод в формате List (Format-List) или Table (Format-Table)
Import-Module PSWriteHTML
(Get-Module PSWriteHTML).ExportedCommands
Get-Service | Out-GridHtml -FilePath ~\Desktop\Get-Service-Out-GridHtml.html
Import-Module HtmlReport
$topVM = ps | Sort PrivateMemorySize -Descending | Select -First 10 | %{,@(($_.ProcessName + " " + $_.Id), $_.PrivateMemorySize)}
$topCPU = ps | Sort CPU -Descending | Select -First 10 | %{,@(($_.ProcessName + " " + $_.Id), $_.CPU)}
New-Report -Title "Piggy Processes" -Input {
New-Chart Bar "Top VM Users" -input $topVm
New-Chart Column "Top CPU Overall" -input $topCPU
ps | Select ProcessName, Id, CPU, WorkingSet, *MemorySize | New-Table "All Processes"
} > ~\Desktop\Get-Process-HtmlReport.html
### XML (Extensible Markup Language)
$xml = [xml](Get-Content ~\desktop\home.rdg) # прочитать содержимое xml-файла
$xml = [xml](Get-Content ~\desktop\home.rdg) # прочитать содержимое XML-файла
$xml = New-Object System.Xml.XmlDocument # создать пустой xml объект
$file = Resolve-Path("~\desktop\home.rdg") # забрать путь к файлу
$xml.load($file) # открыть файл
@ -1950,7 +1980,7 @@ return
}
}
### XPath
### XPath (Query Language for Extensible Markup Language)
$FilterXPath = '<QueryList><Query Id="0"><Select>*[System[EventID=21]]</Select></Query></QueryList>'
$RDPAuths = Get-WinEvent -ComputerName $srv -LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" -FilterXPath $FilterXPath
@ -2004,6 +2034,22 @@ network:
$Result = ConvertFrom-Yaml $network
$Result.Values.ethernets.ens160.nameservers
### HTML (HyperText Markup Language)
Get-Process | select Name, CPU | ConvertTo-HTML -As Table > "$home\desktop\proc-table.html" # вывод в формате List (Format-List) или Table (Format-Table)
Import-Module PSWriteHTML
(Get-Module PSWriteHTML).ExportedCommands
Get-Service | Out-GridHtml -FilePath ~\Desktop\Get-Service-Out-GridHtml.html
Import-Module HtmlReport
$topVM = ps | Sort PrivateMemorySize -Descending | Select -First 10 | %{,@(($_.ProcessName + " " + $_.Id), $_.PrivateMemorySize)}
$topCPU = ps | Sort CPU -Descending | Select -First 10 | %{,@(($_.ProcessName + " " + $_.Id), $_.CPU)}
New-Report -Title "Piggy Processes" -Input {
New-Chart Bar "Top VM Users" -input $topVm
New-Chart Column "Top CPU Overall" -input $topCPU
ps | Select ProcessName, Id, CPU, WorkingSet, *MemorySize | New-Table "All Processes"
} > ~\Desktop\Get-Process-HtmlReport.html
### CSV (Comma-Separated Values)
Get-Service | Select Name,DisplayName,Status,StartType | Export-Csv -path "$home\Desktop\Get-Service.csv" -Append -Encoding Default # экспортировать в csv (-Encoding UTF8)
Import-Csv "$home\Desktop\Get-Service.csv" -Delimiter "," # импортировать массив
@ -2014,7 +2060,7 @@ West,Texas,927,923.71
$null,Tennessee,466,770.67
"@
### Excel.Application.Creat
# Excel
$path = "$home\Desktop\Services-to-Excel.xlsx"
$Excel = New-Object -ComObject Excel.Application
@ -2085,6 +2131,32 @@ $data = ps
$Chart = New-ExcelChartDefinition -XRange CPU -YRange WS -Title "Process" -NoLegend
$data | Export-Excel .\ps.xlsx -AutoNameRange -ExcelChartDefinition $Chart -Show
# SQLite
Install-Module MySQLite -Repository PSGallery
$path = "$home\desktop\Get-Service.db"
Get-Service | select Name,DisplayName,Status | ConvertTo-MySQLiteDB -Path $path -TableName Service -force
(Get-MySQLiteDB $path).Tables
New-MySQLiteDB -Path $path # создать базу
Invoke-MySQLiteQuery -Path $path -Query "SELECT name FROM sqlite_master WHERE type='table';" # список всех таблиц в базе
Invoke-MySQLiteQuery -Path $path -Query "CREATE TABLE Service (Name TEXT NOT NULL, DisplayName TEXT NOT NULL, Status TEXT NOT NULL);" # создать таблицу
Invoke-MySQLiteQuery -Path $path -Query "INSERT INTO Service (Name, DisplayName, Status) VALUES ('Test', 'Full-Test', 'Active');" # добавить данные в таблицу
Invoke-MySQLiteQuery -Path $path -Query "SELECT * FROM Service" # содержимое таблицы
Invoke-MySQLiteQuery -Path $path -Query "DROP TABLE Service;" # удалить таблицу
$Service = Get-Service | select Name,DisplayName,Status
foreach ($S in $Service) {
$1 = $S.Name; $2 = $S.DisplayName; $3 = $S.Status;
Invoke-MySQLiteQuery -Path $path -Query "INSERT INTO Service (Name, DisplayName, Status) VALUES ('$1', '$2', '$3');"
}
### Creat password database
$Connection = New-SQLiteConnection -DataSource $path
$Connection.ChangePassword("password")
$Connection.Close()
Invoke-SqliteQuery -Query "SELECT * FROM Service" -DataSource "$path;Password=password"
# Git
git --version