diff --git a/README.md b/README.md index 518d39f..d05d69f 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,16 @@ - [ActiveDirectory](#ActiveDirectory) - [ServerManager](#ServerManager) - [PackageManagement](#PackageManagement) -- [SQLite](#SQLite) - [PowerCLI](#PowerCLI) - [EMShell](#EMShell) -- [VBR](#VBR) +- [TrueNAS](#TrueNAS) +- [Veeam](#Veeam) - [REST API](#REST-API) +- [IE](#IE) - [Console API](#Console-API) -- [Convert Language](#Convert-Language) +- [XML](#XML) +- [Excel](#Excel) +- [SQLite](#SQLite) - [Git](#Git) ### Help @@ -35,6 +38,15 @@ # 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")` добавить в массив новый элемент \ @@ -408,12 +420,21 @@ `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 часа \ -`}` \ -`Get-Log 10 -1` # передача параметров функции (если значения идут по порядку, то можно не указывать названия переменных) - +``` +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 +} +} +10 | Get-Log +Get-Log 100 -2 +``` ### WinEvent `Get-WinEvent -ListLog * | where logname -match SMB | sort -Descending RecordCount` отобразить все доступные журналы логов \ `Get-WinEvent -LogName "Microsoft-Windows-SmbClient/Connectivity" | where` \ @@ -525,14 +546,20 @@ `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 @@ Error: 1722 - сервер rpc недоступен (ошибка отката `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 @@ CopyQueue Length - длина репликационной очереди коп `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 @@ CopyQueue Length - длина репликационной очереди коп `Get-VBRRestorePoint` \ `Get-VBRViProxy` -# REST-API +# REST API `$pars = Invoke-WebRequest -Uri $url` \ `$pars | Get-Member` \ @@ -1703,7 +1731,27 @@ DELETE - Remove `$vjob = Invoke-RestMethod "https://veeam-11:9419/api/v1/jobs" -Method GET -Headers $Header -SkipCertificateCheck` \ `$vjob.data.virtualMachines.includes.inventoryObject` -# Console-API +# IE +``` +$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() +``` +`$ie.document.IHTMLDocument3_getElementsByTagName("input") | select name` получить имена всех Input Box \ +`$ie.document.IHTMLDocument3_getElementsByTagName("button") | select innerText` получить имена всех Button \ +`$ie.Document.documentElement.innerHTML` прочитать сырой Web Content ( "$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 = '' $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 @@ $Result.Values.ethernets.ens160.nameservers `$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 @@ $Excel.Quit() `$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`