diff --git a/NET/Dll-Import.txt b/NET/Dll-Import.txt
index f8522a7..306f1fb 100644
--- a/NET/Dll-Import.txt
+++ b/NET/Dll-Import.txt
@@ -148,4 +148,21 @@ set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }
 "@
 
 [Audio]::Volume = 0.50
-[Audio]::Mute = $true
\ No newline at end of file
+[Audio]::Mute = $true
+
+### IWR 5.1 -SkipCertificateCheck
+
+add-type @"
+using System.Net;
+using System.Security.Cryptography.X509Certificates;
+public class TrustAllCertsPolicy : ICertificatePolicy {
+public bool CheckValidationResult(
+ServicePoint srvPoint, X509Certificate certificate,
+WebRequest request, int certificateProblem) {
+return true;
+}
+}
+"@
+$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
+[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
+[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
\ No newline at end of file
diff --git a/README.md b/README.md
index 14c6538..484e305 100644
--- a/README.md
+++ b/README.md
@@ -15,17 +15,20 @@
 - [SQLite](#SQLite)
 - [PowerCLI](#PowerCLI)
 - [Veeam](#Veeam)
+- [REST](#REST)
 - [XML](#XML)
 - [Git](#Git)
 
 ### Help
 `Get-Command *Service*` поиск команды по имени \
 `Get-Help Get-Service` синтаксис \
+`Get-Help Stop-Process -Parameter *` описание всех параметров \
 `Get-Service | Get-Member` отобразить Method (действия: Start, Stop), Property (объекты вывода: Status, DisplayName), Event (события объектов: Click) и Alias \
 `Get-Alias ps` \
 `Get-Verb` действия, утвержденные для использования в командах \
 `Set-ExecutionPolicy Unrestricted` \
-`Get-ExecutionPolicy`
+`Get-ExecutionPolicy` \
+`$PSVersionTable`
 
 # Object
 
@@ -59,27 +62,42 @@
 `$Collections = New-Object System.Collections.Generic.List[System.Object]` \
 `$Collections.Add([PSCustomObject]@{User = $env:username; Server = $env:computername})`
 
-`$object = New-Object –TypeName PSCustomObject -Property @{User = $env:username; Server = $env:computername}` предназначен для хранения объектов с произвольной структурой, где порядок их свойств может поменяться. Чтобы этого избежать, необходимо использовать дополнительный атрибут [ordered] \
+`$object = New-Object –TypeName PSCustomObject -Property @{User = $env:username; Server = $env:computername}` \
 `$object | Get-Member` \
-`$object | Add-Member –MemberType NoteProperty –Name IP –Value "192.168.1.1"` добавить свойство или -MemberType ScriptMethod \
+`$object | Add-Member –MemberType NoteProperty –Name IP –Value "192.168.1.1"` имеет возможость добавить свойство или -MemberType ScriptMethod \
 `$object.PsObject.Properties.Remove('User')` удалить свойство (столбец)
 
 `$arr = @()` \
 `$arr += [PSCustomObject]@{User = $env:username; Server = $env:computername}` медленный метод добавления, в каждой интерации перезаписывается массив и коллекция становится фиксированного размера (без возможности удаления) \
-`$arr.Remove(0)` Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size."
+`$arr.Remove(0)` Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size"
 
 `Class CustomClass {` \
 `[string]$User` \
 `[string]$Server` \
 `}` \
 `$Class = New-Object -TypeName CustomClass` \
-`$Class.User = "support"` \
-`$Class.Server = "srv-01"`
+`$Class.User = $env:username` \
+`$Class.Server = $env:computername`
 
 ### CSV
 `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 ","` импортировать массив
 
+`$data = ConvertFrom-Csv @"` \
+`Region,State,Units,Price` \
+`West,Texas,927,923.71` \
+`$null,Tennessee,466,770.67` \
+`"@`
+
+### ImportExcel
+`Install-Module -Name ImportExcel` \
+`$data | Export-Excel .\Data.xlsx` \
+`$data = Import-Excel .\Data.xlsx`
+
+`$data = ps` \
+`$Chart = New-ExcelChartDefinition -XRange CPU -YRange WS -Title "Process" -NoLegend` \
+`$data | Export-Excel .\ps.xlsx -AutoNameRange -ExcelChartDefinition $Chart -Show`
+
 ### Pipeline
 `$obj | Add-Member -MemberType NoteProperty -Name "Type" -Value "user" -Force` добавление объкта вывода NoteProperty \
 `$obj | Add-Member -MemberType NoteProperty -Name "User" -Value "admin" -Force` изменеие содержимого для сущности объекта User \
@@ -158,6 +176,9 @@
 `Get-Process | Sort-Object -Descending CPU | select -First 10` вывести первых 10 объектов \
 `Get-Process | Sort-Object -Descending CPU | select -Last 10` вывести последних 10 объектов
 
+### ConvertTo-HTML
+`Get-Process | select Name, CPU | ConvertTo-HTML -As Table > "$home\desktop\proc-table.html"` вывод в формате List (Format-List) или Table (Format-Table)
+
 # Regex
 
 `-replace "1","2"` замена элементов в индексах массива (везде где присутствует 1, заменить на 2), для удаления используется только первое значение \
@@ -422,16 +443,6 @@
 `Get-WinEvent -LogName Security -MaxEvents 100` отобразить последние 100 событий \
 `Get-WinEvent -FilterHashtable @{LogName="Security";ID=4624}` найти логи по ID в журнале Security
 
-`$RDPAuths = Get-WinEvent -ComputerName $srv -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" -FilterXPath ''` \
-`[xml[]]$xml = $RDPAuths | Foreach {$_.ToXml()}` \
-`$EventData = Foreach ($event in $xml.Event) {` \
-`New-Object PSObject -Property @{` \
-`"Время подключения" = (Get-Date ($event.System.TimeCreated.SystemTime) -Format 'yyyy-MM-dd hh:mm K')` \
-`"Имя пользователя" = $event.UserData.EventXML.Param1` \
-`"Адрес клиента" = $event.UserData.EventXML.Param3` \
-`}}` \
-`$EventData | Out-Gridview -Title "История RDP подключений на сервере $srv"`
-
 `$obj = @() \
 `$fw = Get-WinEvent 'Microsoft-Windows-Windows Firewall With Advanced Security/Firewall'` \
 `foreach ($temp_fw in $fw) {` \
@@ -554,19 +565,6 @@
 ### netstat
 `Get-NetTCPConnection -State Established,Listen | where LocalAddress -match "192.168"`
 
-### Invoke-WebRequest
-`$pars = iwr -Uri "https://losst.pro/"` \
-`$pars | Get-Member` отобразить все методы \
-`$pars.Content` содержимое страницы (Out-File url.html) \
-`$pars.statuscode -eq 200` код ответа, запрос выполнен успешно \
-`$pars.Headers` информация о сервере \
-`$pars.Links | fl innerText, href` ссылки \
-`$pars.Images.src` ссылки на изображения \
-`iwr $url -OutFile $path` скачать файл
-
-### ConvertTo-HTML
-`Get-Process | select Name, CPU | ConvertTo-HTML -As Table > "$home\desktop\proc-table.html"` вывод в формате List (Format-List) или Table (Format-Table)
-
 # WinRM
 
 `Enter-PSSession -ComputerName $srv` подключиться к PowerShell сессии через PSRemoting. Подключение возможно только по FQDN-имени \
@@ -1040,7 +1038,7 @@
 `-requireAdmin` при запуске запросить права администратора \
 `-credentialGUI` вывод диалогового окна для ввода учетных данных \
 `C:\Install\RDSA.exe -extract:"C:\Install\RDSA.ps1"` \
-`Invoke-ps2exe -inputFile "$env:USERPROFILE\Desktop\WinEvent-Viewer-1.1.ps1" -outputFile "$env:USERPROFILE\Desktop\WEV-1.1.exe" -iconFile "$env:USERPROFILE\Desktop\log_48px.ico" -title "WinEvent-Viewer" -noConsole -noOutput -noError`
+`Invoke-ps2exe -inputFile "$home\Desktop\WinEvent-Viewer-1.1.ps1" -outputFile "$home\Desktop\WEV-1.1.exe" -iconFile "$home\Desktop\log_48px.ico" -title "WinEvent-Viewer" -noConsole -noOutput -noError`
 
 ### NSSM
 `$powershell_Path = (Get-Command powershell).Source` \
@@ -1176,7 +1174,7 @@
 `choco install veeam-backup-and-replication-console` \
 `Get-Module Veeam.Backup.PowerShell` \
 `Get-Command -Module Veeam.Backup.PowerShell` or Get-VBRCommand \
-`Connect-VBRServer -Server $srv -Credential $cred` or -user and -password \
+`Connect-VBRServer -Server $srv -Credential $cred` # or -User and -Password # - Port 9392 # default \
 `Get-VBRJob` \
 `Get-VBRCommand *get*backup*` \
 `Get-VBRComputerBackupJob` \
@@ -1185,21 +1183,72 @@
 `Get-VBRBackupSession` \
 `Get-VBRBackupServerCertificate` \
 `Get-VBRRestorePoint` \
-`Get-VBRViProxy` \
-`https://veeam-11:9419/swagger/ui/index.html` API
+`Get-VBRViProxy`
+
+# IWR
+
+`$pars = Invoke-WebRequest -Uri $url` \
+`$pars | Get-Member` \
+`$pars.Content` \
+`$pars.StatusCode -eq 200` \
+`$pars.Headers` \
+`$pars.ParsedHtml | Select lastModified` \
+`$pars.Links | fl title,innerText,href` \
+`$pars.Images.src` links on images \
+`iwr $url -OutFile $path` download
+
+`$pars = wget -Uri $url` \
+`$pars.Images.src | %{` \
+`$name = $_ -replace ".+(?<=/)"` \
+`wget $_ -OutFile "$home\Pictures\$name"` \
+`}` \
+`$count_all = $pars.Images.src.Count` \
+`$count_down = (Get-Item $path\*).count` \
+`"Downloaded $count_down of $count_all files to $path"`
+
+`Methods:`
+`GET - Read` \
+`POST - Create` \
+`PATCH - Partial update/modify` \
+`PUT - Update/replace` \
+`DELETE - Remove`
+
+`https://veeam-11:9419/swagger/ui/index.html` \
+`$Header = @{` \
+`"x-api-version" = "1.0-rev1"` \
+`}` \
+`$Body = @{` \
+`"grant_type" = "password"` \
+`"username" = "$login"` \
+`"password" = "$password"` \
+`}` \
+`$vpost = iwr "https://veeam-11:9419/api/oauth2/token" -Method POST -Headers $Header -Body $Body -SkipCertificateCheck` \
+`$vtoken = (($vpost.Content) -split '"')[3]`
+
+`$token = $vtoken | ConvertTo-SecureString -AsPlainText –Force \
+`$vjob = iwr "https://veeam-11:9419/api/v1/jobs" -Method GET -Headers $Header -Authentication Bearer -Token $token -SkipCertificateCheck
+
+`$Header = @{` \
+`"x-api-version" = "1.0-rev1"` \
+`"Authorization" = "Bearer $vtoken"` \
+`}`
+`$vjob = iwr "https://veeam-11:9419/api/v1/jobs" -Method GET -Headers $Header -SkipCertificateCheck` \
+`$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`
 
 # XML
 
-`$CredFile = ".\cred.xml"` \
-`try {` \
-`$Cred = Import-Clixml -path $credFile` \
-`}` \
-`catch {` \
+`if (Test-Path $CredFile) {` \
+`$Cred = Import-Clixml -path $CredFile` \
+`} elseif (!(Test-Path $CredFile)) {` \
 `$Cred = Get-Credential -Message "Enter credential"` \
 `if ($Cred -ne $null) {` \
-`$Cred | Export-CliXml -Path $credFile` \
+`$Cred | Export-CliXml -Path $CredFile` \
+`} else {` \
+`return` \
 `}` \
-`else {return}` \
 `}`
 
 `$FilterXPath = ''` \
@@ -1217,10 +1266,9 @@
 
 # Git
 
-`git --version`
+`git --version` \
 `git config --global user.name "Lifailon"` \
-`ls ~\.ssh -force` \
-`ssh-keygen -t rsa -b 4096` \
+`ssh-keygen -t rsa -b 4096 -с "lifailon@gmail.com"` \
 `Get-Service | where name -match "ssh-agent" | Set-Service -StartupType Automatic` \
 `Get-Service | where name -match "ssh-agent" | Start-Service` \
 `ssh-agent` \
@@ -1229,7 +1277,11 @@
 `cd C:\git` \
 `git clone git@github.com:Lifailon/PowerShell-Commands` \
 `cd PowerShell-Commands` \
+`git checkout rsa` \
 `git status` \
+`git diff` \
 `git add -A` \
-`git commit -m "test git"` \
-`git push`
+`git commit -m "v1"` \
+`git push` \
+`git log` \
+`git show 38cc9210c6cf1399188d0acaa367dde80d77b888`
\ No newline at end of file
diff --git a/posh.txt b/posh.txt
index 7f5d401..0a86683 100644
--- a/posh.txt
+++ b/posh.txt
@@ -15,17 +15,20 @@ PowerShell Commands
 - SQLite
 - PowerCLI
 - Veeam
+- REST
 - XML
 - Git
 
 ### Help
 Get-Command *Service* # поиск команды по имени
 Get-Help Get-Service # синтаксис
+Get-Help Stop-Process -Parameter * # описание всех параметров
 Get-Service | Get-Member # отобразить Method (действия: Start, Stop), Property (объекты вывода: Status, DisplayName), Event (события объектов: Click) и Alias
 Get-Alias ps
 Get-Verb # действия, утвержденные для использования в командах
 Set-ExecutionPolicy Unrestricted
 Get-ExecutionPolicy
+$PSVersionTable
 
 # Object
 
@@ -59,27 +62,42 @@ $hashtable["User"] # получить значение (Values) по ключу
 $Collections = New-Object System.Collections.Generic.List[System.Object]
 $Collections.Add([PSCustomObject]@{User = $env:username; Server = $env:computername})
 
-$object = New-Object –TypeName PSCustomObject -Property @{User = $env:username; Server = $env:computername} # предназначен для хранения объектов с произвольной структурой, где порядок их свойств может поменяться. Чтобы этого избежать, необходимо использовать дополнительный атрибут [ordered]
+$object = New-Object –TypeName PSCustomObject -Property @{User = $env:username; Server = $env:computername}
 $object | Get-Member
-$object | Add-Member –MemberType NoteProperty –Name IP –Value "192.168.1.1" # добавить свойство или -MemberType ScriptMethod
+$object | Add-Member –MemberType NoteProperty –Name IP –Value "192.168.1.1" # имеет возможость добавить свойство или -MemberType ScriptMethod
 $object.PsObject.Properties.Remove('User') # удалить свойство (столбец)
 
 $arr = @()
 $arr += [PSCustomObject]@{User = $env:username; Server = $env:computername} # медленный метод добавления, в каждой интерации перезаписывается массив и коллекция становится фиксированного размера (без возможности удаления)
-$arr.Remove(0) # Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size."
+$arr.Remove(0) # Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size"
 
 Class CustomClass {
 [string]$User
 [string]$Server
 }
 $Class = New-Object -TypeName CustomClass
-$Class.User = "support"
-$Class.Server = "srv-01"
+$Class.User = $env:username
+$Class.Server = $env:computername
 
 ### CSV
 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 "," # импортировать массив
 
+$data = ConvertFrom-Csv @"
+Region,State,Units,Price
+West,Texas,927,923.71
+$null,Tennessee,466,770.67
+"@
+
+### ImportExcel
+Install-Module -Name ImportExcel
+$data | Export-Excel .\Data.xlsx
+$data = Import-Excel .\Data.xlsx
+
+$data = ps
+$Chart = New-ExcelChartDefinition -XRange CPU -YRange WS -Title "Process" -NoLegend
+$data | Export-Excel .\ps.xlsx -AutoNameRange -ExcelChartDefinition $Chart -Show
+
 ### Pipeline
 $obj | Add-Member -MemberType NoteProperty -Name "Type" -Value "user" -Force # добавление объкта вывода NoteProperty
 $obj | Add-Member -MemberType NoteProperty -Name "User" -Value "admin" -Force # изменеие содержимого для сущности объекта User
@@ -158,6 +176,9 @@ $path[-1..-10] # обратная сборка массива без сорти
 Get-Process | Sort-Object -Descending CPU | select -First 10 # вывести первых 10 объектов
 Get-Process | Sort-Object -Descending CPU | select -Last 10 # вывести последних 10 объектов
 
+### ConvertTo-HTML
+Get-Process | select Name, CPU | ConvertTo-HTML -As Table > "$home\desktop\proc-table.html" # вывод в формате List (Format-List) или Table (Format-Table)
+
 # Regex
 
 -replace "1","2" # замена элементов в индексах массива (везде где присутствует 1, заменить на 2), для удаления используется только первое значение
@@ -422,16 +443,6 @@ Get-WinEvent -LogName "Microsoft-Windows-SmbClient/Connectivity" | where
 Get-WinEvent -LogName Security -MaxEvents 100 # отобразить последние 100 событий
 Get-WinEvent -FilterHashtable @{LogName="Security";ID=4624} # найти логи по ID в журнале Security
 
-$RDPAuths = Get-WinEvent -ComputerName $srv -LogName "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational" -FilterXPath ''
-[xml[]]$xml = $RDPAuths | Foreach {$_.ToXml()}
-$EventData = Foreach ($event in $xml.Event) {
-New-Object PSObject -Property @{
-"Время подключения" = (Get-Date ($event.System.TimeCreated.SystemTime) -Format 'yyyy-MM-dd hh:mm K')
-"Имя пользователя" = $event.UserData.EventXML.Param1
-"Адрес клиента" = $event.UserData.EventXML.Param3
-}}
-$EventData | Out-Gridview -Title "История RDP подключений на сервере $srv"
-
 $obj = @()
 $fw = Get-WinEvent 'Microsoft-Windows-Windows Firewall With Advanced Security/Firewall'
 foreach ($temp_fw in $fw) {
@@ -554,19 +565,6 @@ Get-NetRoute
 ### netstat
 Get-NetTCPConnection -State Established,Listen | where LocalAddress -match "192.168"
 
-### Invoke-WebRequest
-$pars = iwr -Uri "https://losst.pro/"
-$pars | Get-Member # отобразить все методы
-$pars.Content # содержимое страницы (Out-File url.html)
-$pars.statuscode -eq 200 # код ответа, запрос выполнен успешно
-$pars.Headers # информация о сервере
-$pars.Links | fl innerText, href # ссылки
-$pars.Images.src # ссылки на изображения
-iwr $url -OutFile $path # скачать файл
-
-### ConvertTo-HTML
-Get-Process | select Name, CPU | ConvertTo-HTML -As Table > "$home\desktop\proc-table.html" # вывод в формате List (Format-List) или Table (Format-Table)
-
 # WinRM
 
 Enter-PSSession -ComputerName $srv # подключиться к PowerShell сессии через PSRemoting. Подключение возможно только по FQDN-имени
@@ -1040,7 +1038,7 @@ Get-Module -ListAvailable # список всех модулей
 -requireAdmin # при запуске запросить права администратора
 -credentialGUI # вывод диалогового окна для ввода учетных данных
 C:\Install\RDSA.exe -extract:"C:\Install\RDSA.ps1"
-Invoke-ps2exe -inputFile "$env:USERPROFILE\Desktop\WinEvent-Viewer-1.1.ps1" -outputFile "$env:USERPROFILE\Desktop\WEV-1.1.exe" -iconFile "$env:USERPROFILE\Desktop\log_48px.ico" -title "WinEvent-Viewer" -noConsole -noOutput -noError
+Invoke-ps2exe -inputFile "$home\Desktop\WinEvent-Viewer-1.1.ps1" -outputFile "$home\Desktop\WEV-1.1.exe" -iconFile "$home\Desktop\log_48px.ico" -title "WinEvent-Viewer" -noConsole -noOutput -noError
 
 ### NSSM
 $powershell_Path = (Get-Command powershell).Source
@@ -1176,7 +1174,7 @@ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManage
 choco install veeam-backup-and-replication-console
 Get-Module Veeam.Backup.PowerShell
 Get-Command -Module Veeam.Backup.PowerShell # or Get-VBRCommand
-Connect-VBRServer -Server $srv -Credential $cred # or -user and -password
+Connect-VBRServer -Server $srv -Credential $cred # or -User and -Password # - Port 9392 # default
 Get-VBRJob
 Get-VBRCommand *get*backup*
 Get-VBRComputerBackupJob
@@ -1186,20 +1184,71 @@ Get-VBRBackupSession
 Get-VBRBackupServerCertificate
 Get-VBRRestorePoint
 Get-VBRViProxy
-https://veeam-11:9419/swagger/ui/index.html # RAST API
+
+# REST
+
+$pars = Invoke-WebRequest -Uri $url
+$pars | Get-Member
+$pars.Content
+$pars.StatusCode -eq 200
+$pars.Headers
+$pars.ParsedHtml | Select lastModified
+$pars.Links | fl title,innerText,href
+$pars.Images.src # links on images
+iwr $url -OutFile $path # download
+
+$pars = wget -Uri $url
+$pars.Images.src | %{
+$name = $_ -replace ".+(?<=/)"
+wget $_ -OutFile "$home\Pictures\$name"
+}
+$count_all = $pars.Images.src.Count
+$count_down = (Get-Item $path\*).count
+"Downloaded $count_down of $count_all files to $path"
+
+Methods:
+GET - Read
+POST - Create
+PATCH - Partial update/modify
+PUT - Update/replace
+DELETE - Remove
+
+https://veeam-11:9419/swagger/ui/index.html
+$Header = @{
+"x-api-version" = "1.0-rev1"
+}
+$Body = @{
+"grant_type" = "password"
+"username" = "$login"
+"password" = "$password"
+}
+$vpost = iwr "https://veeam-11:9419/api/oauth2/token" -Method POST -Headers $Header -Body $Body -SkipCertificateCheck
+$vtoken = (($vpost.Content) -split '"')[3]
+
+$token = $vtoken | ConvertTo-SecureString -AsPlainText –Force
+$vjob = iwr "https://veeam-11:9419/api/v1/jobs" -Method GET -Headers $Header -Authentication Bearer -Token $token -SkipCertificateCheck
+
+$Header = @{
+"x-api-version" = "1.0-rev1"
+"Authorization" = "Bearer $vtoken"
+}
+$vjob = iwr "https://veeam-11:9419/api/v1/jobs" -Method GET -Headers $Header -SkipCertificateCheck
+$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
 
 # XML
 
-$CredFile = ".\cred.xml"
-try {
-$Cred = Import-Clixml -path $credFile
-}
-catch {
+if (Test-Path $CredFile) {
+$Cred = Import-Clixml -path $CredFile
+} elseif (!(Test-Path $CredFile)) {
 $Cred = Get-Credential -Message "Enter credential"
 if ($Cred -ne $null) {
-$Cred | Export-CliXml -Path $credFile
+$Cred | Export-CliXml -Path $CredFile
+} else {
+return
 }
-else {return}
 }
 
 $FilterXPath = ''
@@ -1218,18 +1267,24 @@ $EventData
 # Git
 
 git --version
-git config --global user.name "Lifailon"
-ls ~\.ssh -force
-ssh-keygen -t rsa -b 4096
-Get-Service | where name -match "ssh-agent" | Set-Service -StartupType Automatic
+git config --global user.name "Lifailon" # add name for commit
+ssh-keygen -t rsa -b 4096 -с "lifailon@mail.com"
+Get-Service | where name -match "ssh-agent" | Set-Service -StartupType Automatic # настроить автозапуск службы
 Get-Service | where name -match "ssh-agent" | Start-Service
 ssh-agent
 ssh-add C:\Users\Lifailon\.ssh\id_rsa
-cat ~\.ssh\id_rsa.pub | Set-Clipboard
-cd C:\git
+cat ~\.ssh\id_rsa.pub | Set-Clipboard # copy to https://github.com/settings/keys
+mkdir C:\Git; cd C:\Git
 git clone git@github.com:Lifailon/PowerShell-Commands
 cd PowerShell-Commands
-git status
+git status # branch
+git diff
 git add -A
-git commit -m "test git"
-git push
\ No newline at end of file
+git commit -m "v1"
+git push rsa
+git log
+git show 38cc9210c6cf1399188d0acaa367dde80d77b888
+git checkout 3f25701874aa5a2c16cc6275fa30baa5b6e477a6 file-name # restore
+git branch new_branch
+git checkout -b new_branch
+git branch -d new_branch
\ No newline at end of file