Як запустити powershell .ps1 скрипт
Невеликий скрипт powershell для власних потреб, але може згодиться комусь як частина проекту.
А тут мій скрипт на Bash з описом
Запуск script .ps1
Для початку нагадаю як взагалі запускаються скрипти powershell, варіантів декілька, я вкажу свій метод. Для початку запустим саму програму powershell. Це можно зробити через меню пуск, або через команду Run, за допомогою сполучення клавиш win + R. коли відкриється вікно run в ньому написати powershell або pwsh.exe ось так:
Потім потрібно перейти до папки (теки) в які і знаходиться ваш скрипт.
Наприклад так:
А потім і написати назву вашого скрипту в форматі: .\vash_script.ps1 десь от так як на скріншоті
Після цього вже починається “магія” 🙂 Наприклад з першого разу буде помилка виконання, тому що за замовчуванням Windows блокує виконання скриптів. Лікується таким чином:
Дозвіл на виконання непідписаних скриптів.
варіант 1 (швидкий): Запустити powershell від імені адміністратора (через меню пуск, правой клавішей вибрати “запуск від імені адміністратора” та в вікні powershell виконати команду
set-executionpolicy remotesigned
варіант 2 (повільний)
Для дозволу виконання скриптів в Windows необхідно виконати наступні кроки:
- Запустіть Політику безпеки локального комп’ютера. Щоб цього досягти, введіть gpedit.msc в рядок пошуку меню «Пуск» та натисніть клавішу «Enter».
- У лівій частині вікна відкрийте розділ «Конфігурація комп’ютера», «Налаштування Windows», «Налаштування безпеки» та оберіть «Політики об’єкту». У правій частині вікна знайдіть пункт «Обмеження виконання скриптів» та двічі клацніть на ньому.
- У вікні налаштувань політики виберіть «Вимкнути» та натисніть «OK».
- Перезапустіть комп’ютер.
Після виконання цих кроків скрипти будуть виконуватися без будь-яких обмежень. Проте, зауважте, що це може підвищити ризик безпеки вашої системи, тому виконуйте ці дії тільки у випадках, коли вам дійсно необхідно виконувати скрипти.
простий COPY скрипт, для копіювання з однієї папки в іншу.
$sourceFolder = "C:\Users\user\pwsh" # шлях до директорії, з якої копіювати файли
$destinationFolder = "D:\pwsh" # шлях до директорії, куди копіювати файли
# Створити призначену папку, якщо вона ще не існує
if (!(Test-Path -Path $destinationFolder)) {
New-Item -ItemType Directory -Path $destinationFolder
}
# Копіювати файли з джерела в призначення
Get-ChildItem $sourceFolder | ForEach-Object {
if (!(Test-Path -Path "$destinationFolder\$($_.Name)")) {
Copy-Item $_.FullName -Destination $destinationFolder
}
}
Це простий скрипт який просто копіює з папки в папку вміст і все.
Цей скрипт спочатку перевіряє, чи існує папка призначення, і якщо вона не існує, то вона створюється за допомогою команди New-Item -ItemType Directory -Path $destinationFolder
.
Потім скрипт використовує команду Get-ChildItem
, щоб отримати список файлів у джерелі, і для кожного файлу він перевіряє, чи існує файл з таким же ім’ям у призначенній папці. Якщо файл не існує, то він копіюється за допомогою команди Copy-Item
. Якщо файл уже існує, то він пропускається.
Ви можете змінити шляхи до джерела та призначення, якщо вони відрізняються від шляхів у прикладі.
Копіювання якщо це мережева папка та потребує авторизації
Ось приклад PowerShell-скрипта, який копіює файли з однієї папки в іншу папку, з урахуванням мережевої папки, яка вимагає авторизації:
$sourceFolder = "C:\path\to\source\folder"
$destinationFolder = "C:\path\to\destination\folder"
$networkPath = "\\server\share\folder"
$username = "username"
$password = "password"
$credentials = New-Object System.Management.Automation.PSCredential ($username, (ConvertTo-SecureString $password -AsPlainText -Force))
if (!(Test-Path $destinationFolder)) { New-Item -ItemType Directory -Path $destinationFolder }
Get-ChildItem -Path $sourceFolder -Recurse | ForEach-Object {
$destinationFile = Join-Path $destinationFolder $_.Name
$networkFile = Join-Path $networkPath $_.Name
if (Test-Path $destinationFile) {
Write-Host "File $($destinationFile) already exists. Skipping."
} else {
try {
Copy-Item -Path $networkFile -Destination $destinationFolder -Credential $credentials -ErrorAction Stop
Write-Host "Copied file $($networkFile) to $($destinationFile)."
} catch {
Write-Host "Error copying file $($networkFile): $($_.Exception.Message)"
}
}
}
У цьому скрипті ви можете замінити $sourceFolder
та $destinationFolder
на потрібні шляхи до відповідних папок на вашому комп’ютері. $networkPath
– це шлях до мережевої папки, яку ви хочете скопіювати. Замість $username
та $password
вкажіть свої облікові дані для авторизації на мережевій папці.
Скрипт перевіряє, чи існує файл у папці призначення перед копіюванням. Якщо файл вже існує, він буде пропущений. Якщо файл не існує, він буде скопійований з мережевої папки у папку призначення з допомогою Copy-Item
. Якщо виникає помилка під час копіювання, скрипт виводить повідомлення про помилку.
Потрібно зашифрувати параметри $password
Так, можна зашифрувати параметри $password, щоб уникнути їх витоку при використанні скрипту на неповідомих пристроях. Для цього можна використовувати функції шифрування в PowerShell, наприклад, ConvertTo-SecureString та ConvertFrom-SecureString.
Ось приклад використання:
# Запит пароля від користувача та його шифрування
$password = Read-Host "Enter password" -AsSecureString
$securePassword = ConvertFrom-SecureString $password
# Розшифрування пароля та підключення до мережевої папки
$plainPassword = ConvertTo-SecureString $securePassword
$credentials = New-Object System.Management.Automation.PSCredential ($username, $plainPassword)
New-PSDrive -Name "X" -PSProvider FileSystem -Root $path -Credential $credentials
# Копіювання файлів з папки в іншу, пропускаючи вже існуючі файли
Copy-Item -Path $source -Destination $destination -Recurse -Force -Exclude (Get-ChildItem $destination | Select-Object -ExpandProperty Name)
У цьому прикладі пароль введений користувачем зчитується та шифрується функцією ConvertTo-SecureString. Потім зашифрований пароль зберігається у змінну $securePassword. Після цього пароль можна передати як параметр скрипту, при цьому він буде зашифрований. Для розшифрування пароля використовується функція ConvertTo-SecureString, і потім з отриманого значення створюється об’єкт PSCredential, який потім використовується для підключення до мережевої папки.
Ще один приклад цього скрипту:
# запит пароля з командного рядка і збереження його в зашифрованому вигляді
$securedPassword = Read-Host "Enter the password" -AsSecureString | ConvertFrom-SecureString
# розшифровка пароля для використання у скрипті
$password = [System.Net.NetworkCredential]::new("", (ConvertTo-SecureString $securedPassword)) | Select-Object -ExpandProperty Password
# авторизація на мережевій папці
$credential = New-Object System.Management.Automation.PSCredential ($username, $securedPassword)
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive($driveLetter, $networkPath, $false, $credential.UserName, $password)
# копіювання файлів
Copy-Item $sourcePath\* $destinationPath -Recurse -Force
# відключення мережевої папки
$net.RemoveNetworkDrive($driveLetter)
У цьому скрипті ми спочатку запитуємо пароль з командного рядка і зберігаємо його у зашифрованому вигляді. Потім розшифровуємо пароль для використання у скрипті. Далі ми авторизуємось на мережевій папці з використанням імені користувача та розшифрованого пароля. Після цього копіюємо файли і відключаємо мережеву папку.
Таким чином, ви можете запустити цей скрипт один раз, і він автоматично авторизується на мережевій папці, копіює файли і відключається, все це у безпечному режимі.
Основні правила написання скриптів в PowerShell Script
- Використовуйте правильну синтаксичну структуру: скрипти повинні починатися з блоку коментарів, який пояснює, що робить скрипт, включаючи назву, версію та автора. Потім слід імпортувати будь-які модулі або бібліотеки, які можуть бути потрібні для виконання скрипту.
- Використовуйте змінні: змінні допомагають зробити ваш код більш зрозумілим та зручним для редагування та налагодження. Використовуйте описові імена для змінних, щоб зрозуміти, яку інформацію вони зберігають.
- Використовуйте функції: функції дозволяють розділити код на більш маленькі частини, що полегшує редагування та налагодження. Використовуйте описові імена для функцій, щоб зрозуміти, що вони роблять.
- Використовуйте коментарі: коментарі дозволяють описати, що робить код та як він працює. Використовуйте коментарі, щоб пояснити складні частини коду та документувати вхідні параметри та вихідні дані.
- Використовуйте обробку помилок: обробка помилок дозволяє попередити виникнення помилок в коді та повідомляти про них користувачеві. Використовуйте оператор try/catch, щоб перехоплювати помилки та обробляти їх.
- Використовуйте стандарти відступів: відступи допомагають зробити код більш зрозумілим та зручним для читання. Використовуйте стандартні відступи, наприклад, чотири пробіли на кожен рівень вкладеності.
يتضح التزام إيليت بايب Elite Pipe بإرضاء العملاء في جداول التسليم الفوري وخدمة ما بعد البيع الاستثنائية.
Very nice post. I just stumbled upon your weblog and wished to say that I have really enjoyed browsing your blog posts. After all I’ll be subscribing to your feed and I hope you write again soon!
viagra without prescription uk