====================================================================================
=== Получение доступа к содержимому файла с его последующим выводом в консоль: ===
====================================================================================
#
write-host ${%file%}
====================================================================================
=== Открытие текущего каталога в explorer'e: ===
====================================================================================
#
ii .
====================================================================================
=== Проверка текущей установленной политики, отвечающей за запуск скриптов: ===
====================================================================================
#
get-executionpolicy
====================================================================================
=== Получение списка com-объектов: ===
====================================================================================
#
gci HKLM:SoftwareClasses -ea 0| ? {$_.PSChildName -match ‘^w+.w+$' -and (gp "$($_.PSPath)CLSID" -ea 0)} | ft PSChildName
====================================================================================
=== Запуск com-объекта. Создание переменной для сохранения нового com-объекта: ===
====================================================================================
#
$ie = New-Object -ComObject InternetExplorer.Application; $ie.visible=$true
====================================================================================
=== Чтобы назначить псевдоним команде с параметрами нужно создать функцию: ===
====================================================================================
#
function my_func {set-location c:windowssystem32}
set-alias go my_func
go
====================================================================================
=== В общем случае в псевдониме ForEach может указываться не один блок команд, а три. Начальный и конечный выполняются единожды:
====================================================================================
#
ls *.txt | foreach {$l = 0} {$l += $_.length} {write-host $l}
====================================================================================
=== Если при использовании switch нужно ограничиться только одним совпадением, то следует применить инструкцию break: ===
====================================================================================
#
$a = 3
switch ($a) {
1 ("One")
2 ("Two")
3 ("Three"; Break}
4 {"Four"}
3 {"Once more three"}
}
Three
====================================================================================
=== Вставка даты в имя файла: ===
====================================================================================
#
$file = "c:$(Get-Date -format ‘d-MM-yyyy').txt"
gps > $file
====================================================================================
=== Проверка данных, введенных в качестве стандартных ($args) параметров функции: ===
====================================================================================
#
function My_func ([switch] $recurse)
{
if ($args -eq "test")
}
====================================================================================
=== Первая конструкция выполняется в 3.074 раза быстрее второй. Это справедливо как минимум для больших чисел: ===
====================================================================================
#
function sum {$n = 0 foreach ($i in $input) {$n += $i} $n} vs function sum2 {$n = 0 while ($input.movenext()) {$n += $input.current} $n}
====================================================================================
=== Обращение к исключению, которое вызвало ошибку (выбор элемента из массива ошибок и обращение к одному из свойств): ===
====================================================================================
#
$error[0].exception
== Не удается найти путь "C:\fail", так как он не существует. ==
====================================================================================
=== Создание документа в Word и вывод текста на экран: ===
====================================================================================
#
$word = New-Object -ComObject word.application
$word_window = $word.documents.add()
$word.visible = $true
$sel = $word.selection
$sel.font.size = 14
$sel.font.bold = $true
$sel.typetext("Hey, how you doing?")
$word_window.saveas(".test.doc")
$word.Quit()
====================================================================================
=== Выбор нужных строк из результата выполнения командлета: ===
====================================================================================
#
get-wmiobject win32_service | gm | ? {$_.membertype -eq "scriptmethod"}
====================================================================================
=== Создание формы, запускающей Word: ===
====================================================================================
#
[void][system.reflection.assembly]::loadwithpartialname("system.windows.forms")
$form.text = "First form"
$button = new-object windows.forms.button
$button.text = "Press it!"
$button.dock = "fill"
$button.add_click({$word = new-object -comobject word.application; $word.visible = $true})
$form.controls.add($button)
$form.add_shown({$form.activate()})
$form.showdialog()
====================================================================================
=== Отображение каталогов, находящихся в текущей директории: ===
====================================================================================
#
ls | ? {$_.psiscontainer}
====================================================================================
=== Определение размера текущего каталога: ===
====================================================================================
#
ls -recurse | measure-object -property length -sum
====================================================================================
=== Создание каталога/файла, в качестве названия которого используется текущая дата: ===
====================================================================================
#
new-item -path c:ps_test -name "$(get-date -uformat ‘%d.%m.%Y')" -type "directory"
new-item -name "$(get-date -uformat ‘%d.%m.%Y').txt" -type "file" -value "newtext"
====================================================================================
=== Переименование группы файлов: ===
====================================================================================
#
ls *.tmp | foreach-object{
$arr = $_.name.split(".");
$newname = $arr[0] + ".new";
ren $_.fullname $newname -passthru;
}
====================================================================================
=== Определение библиотек, используемых процессом powershell.exe: ===
====================================================================================
#
ps powershell | select -expandproperty modules | ft
====================================================================================
=== Запуск нового процесса с подтверждением: ===
====================================================================================
#
ii C:WINDOWSsystem32calc.exe -confirm
$a = ([wmiclass] "win32_process").create("calc.exe")
====================================================================================
=== Работа с реестром: ===
====================================================================================
== Большинство операций выполняются с помощью командлетов *-item и *-itemproperty. ==
====================================================================================
=== Фильтр событий, занесенных в журнал: ===
====================================================================================
#
get-eventlog -logname application | ? {$_.timegenerated.date -eq (get-date -year 2011 -month 2 -day 2).date}
====================================================================================
=== Отправка e-mail: ===
====================================================================================
#
$sender = "test@example.com"
$recipient = "test1@example.com"
$subject = "Some header1"
$body = "Some body1"
$smtp = New-Object System.Net.Mail.SmtpClient("smtp.example.com");
$smtp.Credentials = New-Object System.Net.NetworkCredential("login", "pass");
$smtp.Send($sender, $recipient, $subject, $body)
====================================================================================
=== SendKeys на примере калькулятора: ===
====================================================================================
#
$shell = New-Object -ComObject wscript.shell
$calc = $shell.Exec("calc")
Start-Sleep 1
if ($shell.AppActivate($calc.ProcessID))
{
$shell.SendKeys("2{+}")
Start-Sleep 1
$shell.SendKeys("3")
Start-Sleep 1
$shell.SendKeys("~")
Start-Sleep 1
$shell.SendKeys("^c");
}
[Void]$shell.Popup("Closing", 1, "Ok.", 0)
if ($shell.AppActivate($calc.ProcessID))
{
Start-Sleep 1
$shell.SendKeys("%{F4}")
}
$n = $shell.Exec("notepad")
Start-Sleep 1
if ($shell.AppActivate($n.ProcessID))
{
$shell.SendKeys("2 {+} 3 = ")
$shell.SendKeys("^v")
$shell.SendKeys(" {(}c{)} Calculator")
}
====================================================================================
=== Новые процессы: ===
====================================================================================
#
Get-Process | Where-Object { try { (New-Timespan $_.StartTime).TotalMinutes -le 10} catch { $false } }
====================================================================================
=== Список устройств: ===
====================================================================================
#
[System.ServiceProcess.ServiceController]::GetDevices()
====================================================================================
=== Поиск по каталогу файлов, удовлетворяющим заданный шаблон: ===
====================================================================================
#
Get-ChildItem -Path C:Windows -Include *.dll -Recurse -Exclude [a-y]*.dll
====================================================================================
=== Пути в массив можно подставлять беспроблемно: ===
====================================================================================
#
$a = "c:\Clips"
$b = "c:\Tempps_test_old"
$c = "c:\Tempmusic"
$address_arrays = $a, $b, $c
ls $address_arrays[2] -Recurse
====================================================================================
=== Автоматический запуск .ps1-файлов (но это лучше никогда не делать, а то я тебе нос сломаю): ===
====================================================================================
#
FType microsoft.powershellscript.1=%windir%system32windowspowershellv1.0powershell.exe "&'%1'%*"
====================================================================================
=== Вызов функции вместо повторной записи кода: ===
====================================================================================
#
function syslog {get-eventlog -logname system}
====================================================================================
=== Особенности инкремента: ===
====================================================================================
#
$a = 0
$b = 1,2
$c = -1,-2
$b[$a] = $c[$a++]
$b
1
-1
== В этом примере выражение $a++ вычисляется до выражения $c[$a++]. При вычислении $a++ значение переменной $a изменяется. Переменная $a в выражении $b[$a] равняет 1, а не 0, поэтому оператор назначает значение $b[1], а не $b[0]. ==
====================================================================================
=== Работа с массивами: ===
====================================================================================
Отрицательные величины обозначают отсчет с конца массива. Например, индекс "-1" относится к последнему элементу массива. Чтобы отобразить три последние элемента массива, нужно ввести:
#
$a[-3..-1]
====================================================================================
=== Logoff с удаленного ПК: ===
====================================================================================
#
(gwmi Win32_OperatingSystem).Win32Shutdown(0)
====================================================================================
=== Добавление данных в файл. Нужно писать -path, иначе какая-то херня с кодировкой: ===
====================================================================================
#
Add-content -path "e:\1.txt" -value (get-content "e:\2.txt")
====================================================================================
=== Просмотр свойств WMI-классов на удаленном компьютере: ===
====================================================================================
#
(gwmi Win32_ComputerSystem -computername 192.168.53.3).username
====================================================================================
=== Смена каталога по умолчанию при запуске cmd: ===
====================================================================================
#
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand Processor Autorun->cd /d "whatever_path"
====================================================================================
=== Перенаправление ошибок в стандартный вывод (здесь &1, судя по всему, файл, который выбран в качестве стандартного вывода, а 2 – идентификатор ошибок): ===
====================================================================================
#
chkdsk /r > diskerrors.txt 2>&1
Если нужно перенаправление в другой файл, то:
#
chkdsk /r 2 > diskerrors.txt
====================================================================================
=== Для добавления скрипта в планировщик нужно указать следующую строку: ===
====================================================================================
#
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -command &{"E:temp\psdate.ps1"}
====================================================================================
=== Переименование элементов для их отображения в нужном формате: ===
====================================================================================
#
Import-CSV c:new-users.csv | Select @{Name="Surname";Expression={$_."Last Name"}}
====================================================================================
=== Работа с хэш-коллекциями: ===
====================================================================================
== формат записи: @{…}, например $hash = @{"server1" = "testserver1"; "server2" = "testserver2"} ==
== вывод значения, созданного с помощью хэш-коллекции: ls $env:SystemRoot | Select-Object Name,Lastwritetime,@{Name='Day';Expression={$_.LastWriteTime.DayOfWeek}}) ==
====================================================================================
=== Пример с округлением дробных значений до сотых: ===
====================================================================================
#
$OS=Get-WmiObject -class win32_operatingsystem -property Caption,CSDVersion
$Drives=Get-WmiObject -class win32_logicaldisk -filter "DriveType = 3"
Write-Host "Operating System:" $OS.Caption $OS.CSDVersion
Write-Host "Drive Summary:"
Write-Host "Drive"`t"Size (MB)"`t"FreeSpace (MB)"
foreach ($d in $Drives) {
$free="{0:N2}" -f ($d.FreeSpace/1MB -as [int])
$size="{0:N0}" -f ($d.size/1MB -as [int])
Write-Host $d.deviceID `t $size `t $free
}
====================================================================================
=== Изменение ключа реестра в данном кусте: ===
====================================================================================
#
Set-ItemProperty -Path . -PSProperty DontPrettyPath -Value 1
====================================================================================
=== Передать в pssession значение инициализированной переменной: ===
====================================================================================
== Использовать директиву "$using:". Например: ==
#
$testvar = "test"
echo "$using:testvar"
====================================================================================
=== Создать задачу в планировщике, используя xml-шаблон: ===
====================================================================================
#
Register-ScheduledTask -Xml (Get-Content job1.xml | out-string) -TaskName job1 -User username
====================================================================================
=== Скачать набор инструментов или chrome_latest: ===
====================================================================================
#
Invoke-WebRequest "https://github.com/Sergey1000/tools/raw/master/tools.zip" -OutFile "$env:HOMEPATH\Desktop\tools.zip"
#
Invoke-WebRequest "https://dl.google.com/chrome/install/latest/chrome_installer.exe" -OutFile "$env:HOMEPATH\desktop\chrome.exe"
====================================================================================
=== Распаковать архив: ===
====================================================================================
#
Expand-Archive -LiteralPath "$env:HOMEPATH\Desktop\test.zip" -DestinationPath "$env:HOMEPATH\Desktop\"
====================================================================================
=== Получить данные Azure Webapp Publishing Profile: ===
====================================================================================
#
$publishing_profile = [xml](Get-AzWebAppPublishingProfile -ResourceGroupName $rg_name -Name "$webapp_name")
$username = (Select-Xml -Xml $publishing_profile -XPath "//publishData/publishProfile[contains(@profileName,'Web Deploy')]/@userName").Node.Value
$password = (Select-Xml -Xml $publishing_profile -XPath "//publishData/publishProfile[contains(@profileName,'Web Deploy')]/@userPWD").Node.Value
====================================================================================
=== Получить токен для авторизации в Azure (curl-версия): ===
====================================================================================
#
curl -X POST -d 'grant_type=client_credentials&client_id=$APP_ID&client_secret=$APP_ID_SECRET&resource=https%3A%2F%2Fmanagement.azure.com%2F' https://login.microsoftonline.com/$TENANT_ID/oauth2/token
====================================================================================
=== Авторизоваться в Azure токеном (curl-версия): ===
====================================================================================
#
curl -X GET -H "Authorization: Bearer $TOKEN" "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.Consumption/usageDetails?$filter=properties%2FusageStart%20ge%20%272021-04-10%27%20and%20properties%2FusageEnd%20le%20%272021-04-11%27%20and%20properties%2FresourceGroup%20eq%20%27rg1%27&$top=1000&api-version=2021-01-01"
====================================================================================
=== Получить токен для авторизации в Azure (powershell-версия): ===
====================================================================================
#
$body = "grant_type=client_credentials&client_id=$app_id&client_secret=$client_secret&resource=https://management.azure.com/"
$bearer_token = Invoke-RestMethod -Method Post -body $body -Uri https://login.microsoftonline.com/$tenant_id/oauth2/token
====================================================================================
=== Получить информацию из Azure, авторизовавшись токеном (powershell-версия): ===
====================================================================================
#
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $($bearer_token.access_token)")
$headers.Add("Content-Type", "application/json")
Invoke-RestMethod -Method Get -Headers $headers -Uri "https://management.azure.com/subscriptions/$subscription_id/providers/Microsoft.Consumption/usageDetails?$filter=properties%2FusageStart%20ge%20%272021-04-10%27%20and%20properties%2FusageEnd%20le%20%272021-04-11%27%20and%20properties%2FresourceGroup%20eq%20%27rg1%27&$top=1000&api-version=2021-01-01"
====================================================================================
=== Использовать части URL для именования чего-то: ===
====================================================================================
#
foreach ($i in $(Get-Content urls.txt)) {
$name = $i.Split("://")
$first_part = $name[1].Split(".")[0]
$last_part = $name[1].Split(".")[-1]
}
====================================================================================
=== Как работать с индексами элементов из Get-Content: ===
====================================================================================
#
[string[]]$arrayFromFile = Get-Content "1.txt"
foreach ($i in $arrayFromFile){
echo $arrayFromFile.IndexOf($i)
}
====================================================================================
=== Выполнить команду на удаленном сервере через invoke-command: ===
====================================================================================
#
$username = "user"
$passwd = ConvertTo-SecureString "password" -AsPlainText -Force
$pscredential = New-Object System.Management.Automation.PSCredential($username, $passwd)
$s = New-PSSession -ComputerName "1.1.1.1" -Credential $pscredential
Invoke-Command -Session $s -ScriptBlock { start-ScheduledTask -TaskName "task1"}
====================================================================================
=== Как создать файл с рандомным содержимым (аналог перенаправления из /dev/random): ===
====================================================================================
#
fsutil.exe file createnew 39.bin 39000000
== Это создаст файл 39.bin размером в 39000000 байт. ==
====================================================================================
=== Как скопировать ssh-ключ на удаленную машину (аналог ssh-copy-id) и создать алиас для подключения по ssh: ===
====================================================================================
#
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@1.1.1.1 "cat >> ~/.ssh/authorized_keys"
== Добавить алиас для подключения: ==
#
notepad $PROFILE
function sshaliasrandomname {ssh user@1.1.1.1}
====================================================================================
=== Как получить предыдущий день в формате MM-dd-yyyy ===
====================================================================================
#
(Get-Date).AddDays(-1).ToString('MM-dd-yyyy')
====================================================================================
=== Скачать файлы из Azure Storage с помощью Powershell в GUI: ===
====================================================================================
== Если вдруг появилась необходимость использовать GUI, нарисованное в Powershell, а в нем вдруг нужно скачать файл из Blob Storage, то можно нарваться на бесконечный процесс загрузки, какой доходит до 100% без завершения. Пофиксить это можно, запустив процесс загрузки файла с ключом "AsJob" и проверять, закончилась джоба или нет. Дикость, но вот так: ==
#
Get-AzStorageBlobContent -Context $storage_context -Container $container_name -Blob $blob_name -Destination $path -Force -AsJob
$job1 = Get-Job | Where-Object Command -eq "Get-AzStorageBlobContent"
$is_job_finished = $false
While ($is_job_finished -ne $true) {
[System.Windows.Forms.Application]::DoEvents()
if ($job1.State -ne "Completed") {
Start-Sleep -Seconds 1
}
else {
$is_job_finished = $true
}
}
====================================================================================
=== Создать дефолтный nuget.config и поставить nuget-пакет: ===
====================================================================================
== Создать скелет nuget.config ==
#
== Добавить nuget-источник: ==
#
dotnet nuget add source --name nuget.org https://api.nuget.org/v3/index.json --configfile "C:\Users\user\AppData\Roaming\NuGet\default\nuget.config"
== Добавить пакет: ==
#
dotnet tool install --global package_name --configfile "C:\Users\user\AppData\Roaming\NuGet\default\nuget.config"
====================================================================================
=== Сохранить найденную по паттерну строку в переменную: ===
====================================================================================
#
$var = Get-Content -Path "somefile.txt" | Where-Object {$_ -match "rev-parse.*"} | Foreach {$Matches[0]}
====================================================================================
=== Пинговать сервис через tcp: ===
====================================================================================
#
tcpping sqlserver.database.windows.net:1433
====================================================================================
=== Использовать Invoke-Sqlcmd с переменными: ===
====================================================================================
#
$var1 = 'Test1'
$var2 = 'Test2'
$sql = "Insert into table(col1, col2) values ('$var1', '$var2')"
Invoke-sqlcmd -Query $sql -ServerInstance server -Database db
====================================================================================
=== Переименовать файлы с помощью exiftool: ===
====================================================================================
#
exiftool -d 'VID_%Y%m%d_%H%M%S.%%e' '-filename
====================================================================================
=== Сохранить имя бранча и хэш коммита в переменной для использования в качестве тэга в AWS:
====================================================================================
#
$Env:COMMIT_HASH = git rev-parse --short HEAD
$Env:BRANCH_NAME = git branch --show-current
$Env:BRANCH_AND_COMMIT_TAG = 'branch_=_' + $Env:BRANCH_NAME + '__' + 'commit_hash_=_' + $Env:COMMIT_HASH
# aws cloudformation describe-stacks | grep -e "LastUpdatedTime" -e "StackName" -e "branch_="
aws cloudformation describe-stacks | select-string "LastUpdatedTime", "StackName", "branch_="
====================================================================================
=== Обработать pdf файлы с помощью cpdf: поворот текста, смена ориентации страницы, разбиение базового файла на файлы, объемом по 1 странице:
====================================================================================
#
$basic_path = "dir"
$full_path_to_cpdf = "path\to\cpdf.exe"
$files = Get-ChildItem -Path $basic_path -File
foreach ($file in $files) {
Write-Host "Файл: $($file.Name)"
& $full_path_to_cpdf -rotate 90 $file.Name -o "$file.BaseName-rotated.pdf"
& $full_path_to_cpdf -upright "$file.BaseName-rotated.pdf" -o "$file.BaseName-final.pdf"
& $full_path_to_cpdf -split "$file.BaseName-final.pdf" -o "$file.BaseName-page_%%%.pdf" -chunk 1
}
====================================================================================
=== Объединить все файлы текущего каталога в общий pdf с помощью cpdf:
====================================================================================
#
$full_path_to_cpdf = "path\to\cpdf.exe"
& $full_path_to_cpdf -merge -idir . -o test.pdf
====================================================================================
=== Удалить пустые строки из текстового файла:
====================================================================================
$input_file = "input.txt"
$output_file = "output.txt"
(Get-Content -Path "$input_file") | Where-Object { $_.Trim() -ne "" } | Set-Content -Path "$output_file"
====================================================================================
=== Отсортировать строки в тексте:
====================================================================================
$input_file = "input.txt"
$output_file = "output.txt"
Get-Content -Path "$input_file" | Sort-Object | Set-Content -Path "$output_file"
====================================================================================
=== Найти дубликаты:
====================================================================================
$input_file = "input.txt"
Get-Content -Path "$input_file" | Group-Object | Where-Object { $_.Count -gt 1 } | Select-Object -ExpandProperty Name
====================================================================================
=== Получить уникальные записи из файла:
====================================================================================
$input_file = "input.txt"
$output_file = "output.txt"
Get-Content "$input_file" | Sort-Object | Get-Unique | Out-File "$output_file"
====================================================================================
=== Сравнить контент файлов и вывести результат сравнения в консоль:
====================================================================================
$first_file = "file1.txt"
$second_file = "file2.txt"
Compare-Object -ReferenceObject $(Get-Content -Path "$first_file") -DifferenceObject $(Get-Content -Path "$second_file")
====================================================================================
=== Проверка на наличие пробелов в конце строки:
====================================================================================
$input_file = "input.txt"
Get-Content $input_file | ForEach-Object {
$line = $_
# Проверка на наличие хотя бы одного пробела после последней буквы
if ($line -match '\p{L}( +)$') {
Write-Output "Spaces here: '$line'"
} else {
}
}
====================================================================================
=== Сравнить контент файлов с сохранением результата сравнения в файле:
====================================================================================
$file_needs_to_be_compared = "second.txt"
$ethalon_file = "first.txt"
$not_in_excel_file = "diff.txt"
Compare-Object -ReferenceObject $(Get-Content -Path "$file_needs_to_be_compared") -DifferenceObject $(Get-Content -Path "$ethalon_file") | Where-Object { $_.SideIndicator -eq "<=" } | Set-Content -Path "$not_in_excel_file"
====================================================================================
=== Удалить числа с пробелом, которые находятся в начале строк файла, и за которыми следует произвольное число. Результат парсинга записать в файл:
====================================================================================
$bats_array = 1, 2, 3, 4, 5
foreach ($bat in $bats_array)
{
$input_file = "$bat.txt"
$output_file = "$bat - output.txt"
Get-Content $input_file | ForEach-Object {
$_ -replace '^\d+\s+(?=\d+)', ''
} | Set-Content $output_file
}
====================================================================================
=== Записать список пропущенных чисел, идущих по порядку с инкрементом 1:
====================================================================================
$bats_array = 1, 2, 3, 4, 5
foreach ($bat in $bats_array)
{
$input_file = "$bat - output.txt"
$output_file = "$bat - missed_numbers.txt"
$lines = Get-Content $input_file
$numbers = @()
foreach ($line in $lines) {
if ($line -match "^\s*(\d+)[\.\)\s-]?") {
$numbers += [int]$matches[1]
}
}
# Определение диапазона
$first = $numbers[0]
$last = $numbers[-1]
# Генерация полного диапазона
$expected = $first..$last
# Поиск пропущенных чисел
$missing = $expected | Where-Object { $_ -notin $numbers }
# Запись результата в файл
Set-Content -Path $output_file -Value $missing
# Вывод в консоль
Write-Output "Пропущенные номера: $missing"
Write-Output "Результат записан в файл '$output_file'"
}
====================================================================================
=== Прочитать файл full.txt. Из него три последние слова каждой строки выделить в один файл, все остальные слова (идут перед искомой тройкой) - в другой файл:
====================================================================================
$input_file = "full.txt"
$first_output_file = "first.txt"
$second_output_file = "second.txt"
Clear-Content $first_output_file -ErrorAction SilentlyContinue
Clear-Content $second_output_file -ErrorAction SilentlyContinue
Get-Content $input_file | ForEach-Object {
$words = $_ -split '\s+'
$count = $words.Count
if ($count -ge 4 -and $count -le 6) {
$first_words = $words[0..($count - 4)] -join ' '
$last_three_words = $words[($count - 3)..($count - 1)] -join ' '
# Записываем в соответствующие файлы
Add-Content -Path $first_output_file -Value $first_words
Add-Content -Path $second_output_file -Value $last_three_words
}
}
====================================================================================
=== Прочитать файл full.txt. Извлечь текст между первой точкой и первой запятой в каждой строке, после чего записать извлеченный текст в файл output.txt:
====================================================================================
$input_file = "full.txt"
$output_file = "output.txt"
# Открываем выходной файл для записи
$outputStream = New-Object System.IO.StreamWriter($output_file)
Get-Content $input_file | ForEach-Object {
$line = $_
# Ищем точку и пробел, и затем первую запятую
if ($line -match '\. (.*?)\,') {
$extractedText = $matches[1] # Извлекаем нужный текст
$outputStream.WriteLine($extractedText) # Записываем в выходной файл
}
}
$outputStream.Close()
Write-Host "Done."
====================================================================================
=== Прочитать файл full.txt. Получить список чисел (это должна быть последовательность чисел с увеличением на 1 относительно предыдущего значения), которые находятся в начале каждой строки и после которых идет точка. Сохранить список чисел в массив. Вывести числа, которые были пропущены в полученном списке (то есть, имея последовательность чисел 1 2 3 6 7 9, вывод должен быть 4 5 8):
====================================================================================
$input_file = "input.txt"
$outputArray = @()
[string[]]$file1 = get-content -Path "$input_file"
ForEach($line in $file1) {
#Write-Host $line.split(".")[0]
$outputArray += $line.split(".")[0]
}
for ($i = 1; $i -le $outputArray[-1]; $i++) {
if ($outputArray -notcontains $i) {
Write-Host "Missing number: $i"
}
}
====================================================================================
=== Два текстовых файла A.txt и B.txt с неким контентом. Сравнить содержимое этих двух файлов, после чего создать три файла со следующим контентом:
#1. Файл common.txt, который содержит только одинаковые строки из A.txt и B.txt.
#2. Файл A_unique.txt, который содержит только то, что есть в A.txt, но нет в B.txt.
#3. Файл B_unique.txt, который содержит только то, что есть в B.txt, но нет в A.txt.
====================================================================================
#
$file_a = "input1.txt"
$file_b = "input2.txt"
$file_common = "common.txt"
$aLines = Get-Content -Path "$file_a"
$bLines = Get-Content -Path "$file_b"
$common = $aLines | Where-Object { $bLines -contains $_ } | Sort-Object -Unique
$aUnique = $aLines | Where-Object { $bLines -notcontains $_ } | Sort-Object -Unique
$bUnique = $bLines | Where-Object { $aLines -notcontains $_ } | Sort-Object -Unique
$common | Set-Content -Path "$file_common" -Encoding UTF8
$aUnique | Set-Content -Path "UNIQUE-$file_a" -Encoding UTF8
$bUnique | Set-Content -Path "UNIQUE-$file_b" -Encoding UTF8
====================================================================================
=== Вывести в консоль данные колонки из csv файла:
====================================================================================
#
Import-Csv -Delimiter "," .\test.csv | select -ExpandProperty "Статус"
====================================================================================
=== Парсинг txt-файла. Паттерн "ПОИСКОВЫЙ ПАТТЕРН" должен находиться в строке, которая начинается с произвольного количества пробелов, 1-3 цифр, после которой идет точка или произвольное количество пробелов. Результат парсинга записывается в соответствующий файл:
====================================================================================
$bats_array = 1, 2, 3, 4, 5
foreach ($bat in $bats_array)
{
Select-String -Path "$bat.txt" -Pattern '^\s*\d{1,3}(\.|[\s]+)' | Where-Object { $_.Line -notmatch 'ПОИСКОВЫЙ ПАТТЕРН' } | ForEach-Object { $_.Line } | Set-Content "$bat-unique.txt"
}
====================================================================================
=== ps1 to exe с помощью модуля ps2exe:
====================================================================================
#
Install-Module -Name ps2exe -Scope CurrentUser
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
ps2exe .\name.ps1 .\name.exe -noConsole -iconFile "name.ico"
====================================================================================
=== Забрать весь контент строки до первой запятой по всему файлу:
====================================================================================
#
Get-Content "file.txt" | ForEach-Object { ($_ -split ',')[0] } | Set-Content "file_output.txt"
====================================================================================
=== Убрать первое слово (беспробельная последовательность символов) в каждой строке:
====================================================================================
#
Get-Content "file.txt" ForEach-Object { $_ -replace '^[^\s]+ ' } Set-Content "file_output.txt"
====================================================================================
=== Объединить несколько pdf в один:
====================================================================================
#
cpdf.exe -merge out004.pdf out005.pdf out006.pdf out007.pdf out008.pdf out009.pdf -o 3.pdf
====================================================================================
=== Разбить один pdf постранично:
====================================================================================
#
cpdf -split "name.pdf" -o out%%%.pdf
====================================================================================
=== Перемешать строки в файле:
====================================================================================
#
$content = Get-Content "name.txt"
$content | Get-Random -Count $content.Count | Set-Content "name_shuffled.txt"