БоврСмСнная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ встроСнным языком, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, Π³Π΄Π΅ стандартныС срСдства ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ нСдостаточно Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Часто систСмным администраторам ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, рССстром Windows ΠΈΠ»ΠΈ сСтСвыми настройками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² срСдС PowerShell Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π² ΠΎΠ΄Π½Ρƒ строку ΠΊΠΎΠ΄Π°. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ этих Π΄Π²ΡƒΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… процСссов.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ взаимодСйствия внСшнСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с консолью Windows. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΈ, Ρ‡Ρ‚ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ выполнСния ΠΊΠΎΠ΄Π°. Запуск скрипта PowerShell Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ ΠΏΡ€Π°Π²Π°ΠΌ доступа ΠΈ настройкам бСзопасности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

ΠœΡ‹ рассмотрим нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²: ΠΎΡ‚ простого выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‡Π΅Ρ€Π΅Π· стандартныС срСдства Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ для получСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ контроля Π½Π°Π΄ сСссиСй. ПониманиС этих нюансов ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ инструмСнты администрирования прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° окруТСния ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ бСзопасности

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ опСрационная систСма Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скриптов. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Windows установлСна ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Restricted, которая Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ запуск Π»ΡŽΠ±Ρ‹Ρ… сцСнариСв. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π²Π°ΠΌ потрСбуСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эту настройку Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ систСмы.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² консоли с ΠΏΡ€Π°Π²Π°ΠΌΠΈ администратора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… скриптов Π±Π΅Π· Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи. Π­Ρ‚ΠΎ критичСски Π²Π°ΠΆΠ½Ρ‹ΠΉ шаг, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ запуска ΠΈΠ· 1Π‘ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ ошибкой бСзопасности.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ использованиС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Bypass Π½Π΅ рСкомСндуСтся для ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… срСд, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности. Π Π΅ΠΆΠΈΠΌ RemoteSigned являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ балансом ΠΌΠ΅ΠΆΠ΄Ρƒ удобством Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ врСдоносного ΠΊΠΎΠ΄Π°, скачанного ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ИзмСнСниС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ выполнСния скриптов влияСт Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ всСй Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ станции. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²Π° Π½Π° внСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈΠ½Π°Ρ‡Π΅ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ врСдоносный ΠΊΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· 1Π‘.

Π’Π°ΠΊΠΆΠ΅ стоит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ самого ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° PowerShell Π² систСмС. Π’ соврСмСнных вСрсиях Windows 10 ΠΈ 11 ΠΎΠ½ установлСн ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ Π² сСрвСрных рСдакциях ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся установка ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ‡Π΅Ρ€Π΅Π· «ДиспСтчСр сСрвСров».

πŸ’‘

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ выполнСния Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Get-ExecutionPolicy Π² консоли PowerShell. Если возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Restricted, запуск скриптов Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½.

ΠœΠ΅Ρ‚ΠΎΠ΄ запуска Ρ‡Π΅Ρ€Π΅Π· COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ WScript.Shell

НаиболСС распространСнный способ взаимодСйствия β€” использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° WScript.Shell. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ внСшниС процСссы асинхронно ΠΈΠ»ΠΈ синхронно, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Он Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ тяТСлых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΌ понадобится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚. ПослС создания ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Run, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Ρ‚ΡƒΠ΄Π° строку ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° powershell.exe, Ρ‡Ρ‚ΠΎΠ±Ρ‹ скрипт выполнился ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

  • πŸš€ Асинхронный запуск: ΠŸΡ€ΠΎΡ†Π΅ΡΡ стартуСт, ΠΈ ΠΊΠΎΠ΄ 1Π‘ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½Π΅ доТидаясь окончания скрипта.
  • ⏳ Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ: ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 1Π‘ «зависаСт» Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° PowerShell Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π½Π΅ Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.
  • πŸ“’ Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠΊΠ½Π°: МоТно Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° консоли (ΡΠΊΡ€Ρ‹Ρ‚ΡŒ, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свСрнутым ΠΈΠ»ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° дСмонстрируСт Π±Π°Π·ΠΎΠ²ΡƒΡŽ структуру Π²Ρ‹Π·ΠΎΠ²Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° экранированиС ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΈ ΠΏΡƒΡ‚Π΅ΠΉ, Ссли Π² Π½ΠΈΡ… содСрТатся ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ скрипта β€” самая частая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ошибок Π½Π° этом этапС.


WScript = Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("WScript.Shell");

ΠŸΡƒΡ‚ΡŒΠšΠ‘ΠΊΡ€ΠΈΠΏΡ‚Ρƒ = "C:\Scripts\MyScript.ps1";

Команда = "powershell.exe -File """ + ΠŸΡƒΡ‚ΡŒΠšΠ‘ΠΊΡ€ΠΈΠΏΡ‚Ρƒ + """";

// 0 - ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, 1 - ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, 3 - ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ

ΠšΠΎΠ΄Π’ΠΎΠ·Π²Ρ€Π°Ρ‚Π° = WScript.Run(Команда, 1, Π˜ΡΡ‚ΠΈΠ½Π°);

πŸ“Š Какой способ запуска Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π§Π΅Ρ€Π΅Π· WScript.Shell
Π§Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Shell.Application
Π§Π΅Ρ€Π΅Π· внСшний процСсс
НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ PowerShell

Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Shell.Application

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ стандартному shell являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Shell.Application. Он прСдоставляСт Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ (запуск ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора). Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли скрипт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² систСмныС настройки.

ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π²Ρ‹Π·ΠΎΠ²Π°. ВмСсто Run здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ ShellExecute. Он позволяСт явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, runas для запроса ΠΏΡ€Π°Π² UAC), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ значСния
File Имя исполняСмого Ρ„Π°ΠΉΠ»Π° powershell.exe
Parameters АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки -File "script.ps1"
Directory Рабочая ΠΏΠ°ΠΏΠΊΠ° процСсса C:\Scripts
Operation ДСйствиС (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π°Π΄ΠΌΠΈΠ½) runas
Show Π Π΅ΠΆΠΈΠΌ отобраТСния ΠΎΠΊΠ½Π° 1 (ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ)

ИспользованиС этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ остороТности ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅. Если 1Π‘ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, ΠΎΠΊΠ½ΠΎ запроса ΠΏΡ€Π°Π² администратора появится Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ»ΠΈ Π½Π° сСрвСрС 1Π‘ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ·-Π·Π° отсутствия ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСанса.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ запускС с Ρ„Π»Π°Π³ΠΎΠΌ runas ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ UAC (ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записСй). Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ Β«ΠžΡ‚ΠΌΠ΅Π½Π°Β», скрипт Π½Π΅ выполнится, Π° ΠΊΠΎΠ΄ 1Π‘ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ логичСским ошибкам Π² дальнСйшСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅.

Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° сСрвСрС Π±Π΅Π· участия Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Π½ΠΈΠΉ Windows ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ слуТбу 1Π‘ ΠΏΠΎΠ΄ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записью, ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, избСгая ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… запросов.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ShellExecute Π»ΡƒΡ‡ΡˆΠ΅ для админских ΠΏΡ€Π°Π²?

ΠœΠ΅Ρ‚ΠΎΠ΄ ShellExecute ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ контСкст бСзопасности Windows ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π² Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ UAC, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ WScript.Shell просто пытаСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ процСсс с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρƒ Π² доступС.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹Π²ΠΎΠ΄Π°

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ³ΠΎ запуска скрипта часто нСдостаточно. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹: список Ρ„Π°ΠΉΠ»ΠΎΠ², статус ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ тСкстовый ΠΎΡ‚Ρ‡Π΅Ρ‚. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ PowerShell (STDOUT) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ всСго Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Один ΠΈΠ· эффСктивных способов β€” использованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π‘ΠΊΡ€ΠΈΠΏΡ‚ PowerShell записываСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² тСкстовый Ρ„Π°ΠΉΠ», Π° 1Π‘ считываСт Π΅Π³ΠΎ содСрТимоС послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°Π΄Π΅ΠΆΠ΅Π½ ΠΈ Π½Π΅ зависит ΠΎΡ‚ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ консольного Π²Ρ‹Π²ΠΎΠ΄Π°.


Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠ€Π°ΠΉΠ» = ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ˜ΠΌΡΠ’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎΠ€Π°ΠΉΠ»Π°("txt");

Команда = "powershell.exe -Command ""Get-Process | Out-File -Encoding UTF8 '" + Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠ€Π°ΠΉΠ» + "'""";

WScript.Run(Команда, 0, Π˜ΡΡ‚ΠΈΠ½Π°);

Π’Π΅ΠΊΡΡ‚Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° = "";

Если ЀайлБущСствуСт(Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠ€Π°ΠΉΠ») Π’ΠΎΠ³Π΄Π°

Π§Ρ‚Π΅Π½ΠΈΠ΅ = Новый ЧтСниСВСкста(Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠ€Π°ΠΉΠ», ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8);

Π’Π΅ΠΊΡΡ‚Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° = Π§Ρ‚Π΅Π½ΠΈΠ΅.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ”ΠΎΠšΠΎΠ½Ρ†Π°();

Π§Ρ‚Π΅Π½ΠΈΠ΅.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

Π£Π΄Π°Π»ΠΈΡ‚ΡŒΠ€Π°ΠΉΠ»Ρ‹(Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉΠ€Π°ΠΉΠ»);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠŸΡ€ΠΈ использовании ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ UTF8 Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ PowerShell, ΠΈΠ½Π°Ρ‡Π΅ русскиС символы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ Π·Π½Π°ΠΊΠΈ (кракозябры), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ консоль Windows ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ OEM ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ (866).

  • πŸ“ ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°: ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -Encoding UTF8 ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² Ρ„Π°ΠΉΠ» для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ отобраТСния ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹.
  • πŸ—‘οΈ ΠžΡ‡ΠΈΡΡ‚ΠΊΠ°: НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ послС чтСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°ΡΠΎΡ€ΡΡ‚ΡŒ диск сСрвСра.
  • ⚑ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Π—Π°ΠΏΠΈΡΡŒ Π² диск ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π½ΠΎ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ….
πŸ’‘

ИспользованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с явным ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ UTF-8 β€” самый Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ тСкстовых Π΄Π°Π½Π½Ρ‹Ρ… Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов ΠΌΠ΅ΠΆΠ΄Ρƒ PowerShell ΠΈ 1Π‘.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² скрипт PowerShell

ДинамичСскоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скриптов ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· 1Π‘. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΡƒΡ‚ΠΈ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π°Ρ‚Ρ‹ ΠΎΡ‚Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. PowerShell ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π‘Π°ΠΌΡ‹ΠΉ бСзопасный способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ β€” использованиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ строку запуска, подставляя значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… 1Π‘. Однако здСсь кроСтся риск ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ, Ссли Π΄Π°Π½Π½Ρ‹Π΅ содСрТат ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ строки с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΠΎ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ экранированы Π²Π½ΡƒΡ‚Ρ€ΠΈ строки 1Π‘. Ошибка Π² экранировании ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ PowerShell воспримСт Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.


ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€1 = "ΠžΡ‚Ρ‡Π΅Ρ‚ Π·Π° Π―Π½Π²Π°Ρ€ΡŒ";

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€2 = "C:\Data\Base";

// Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ бСзопасной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Команда = "powershell.exe -File ""C:\Scripts\Report.ps1"" -Name """ + ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€1 + """ -Path """ + ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€2 + """";

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ содСрТат ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы PowerShell (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ $, &, |), ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символом ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ слэша ` ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ здСсь-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Here-String), пСрСдавая скрипт Ρ‡Π΅Ρ€Π΅Π· стандартный Π²Π²ΠΎΠ΄ (STDIN).

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Никогда Π½Π΅ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²ΠΈΠ΄Π° ; Remove-Item C:\* -Recurse, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ катастрофичСским послСдствиям для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

Для слоТных структур Π΄Π°Π½Π½Ρ‹Ρ… (массивы, Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. PowerShell ΠΈΠΌΠ΅Π΅Ρ‚ встроСнныС cmdlet ConvertFrom-Json ΠΈ ConvertTo-Json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»Π΅Π³ΠΊΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

β˜‘οΈ БСзопасная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок выполнСния

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с внСшними процСссами всСгда нСсСт риски сбоСв. Π‘ΠΊΡ€ΠΈΠΏΡ‚ PowerShell ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ с ошибкой ΠΈΠ·-Π·Π° отсутствия ΠΏΡ€Π°Π², нСдоступности сСти ΠΈΠ»ΠΈ синтаксичСской ошибки Π² самом ΠΊΠΎΠ΄Π΅. Π’Π°ΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ эти ситуации Π² ΠΊΠΎΠ΄Π΅ 1Π‘.

Основной ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ успСха β€” ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° процСсса (Exit Code). По соглашСнию, ΠΊΠΎΠ΄ 0 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, Π° любоС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ нуля Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сигнализируСт ΠΎΠ± ошибкС. Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ WScript.Shell этот ΠΊΠΎΠ΄ возвращаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Run ΠΏΡ€ΠΈ синхронном запускС.

Однако, Ссли сам PowerShell Π½Π΅ запустился (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½), ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ рСкомСндуСтся ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ скрипта Π² Π±Π»ΠΎΠΊ try-catch Π²Π½ΡƒΡ‚Ρ€ΠΈ самого PowerShell ΠΈ явно Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ошибки Π² ΠΊΠΎΠ½Ρ†Π΅.


// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² 1Π‘

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ΠšΠΎΠ΄Π—Π°ΠΏΡƒΡΠΊΠ° = WScript.Run(Команда, 0, Π˜ΡΡ‚ΠΈΠ½Π°);

Если ΠšΠΎΠ΄Π—Π°ΠΏΡƒΡΠΊΠ° <> 0 Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка выполнСния скрипта. Код ошибки: " + ΠšΠΎΠ΄Π—Π°ΠΏΡƒΡΠΊΠ°);

// Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ событиС Π² ΠΆΡƒΡ€Π½Π°Π» рСгистрации

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ процСсс: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

Для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ошибок (STDERR) Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ 2> error.log ΠΊ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ PowerShell. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ тСкст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ скриптом, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠΊΠ½ΠΎ консоли скрыто.

  • πŸ” Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ВсСгда Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΆΡƒΡ€Π½Π°Π» Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π²Π½Π΅ΡˆΠ½ΠΈΡ… скриптов с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².
  • πŸ›‘οΈ Π’Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹: ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСрывания, Ссли скрипт зависнСт (хотя WScript.Run ΠΆΠ΄Π΅Ρ‚ бСсконСчно, ΠΌΠΎΠΆΠ½ΠΎ вынСсти Π²Ρ‹Π·ΠΎΠ² Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ).
  • πŸ“‚ ΠŸΡƒΡ‚ΠΈ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΊΠΎ всСм Ρ„Π°ΠΉΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ.
Как ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ скрипт, Ссли ΠΎΠ½ Π½Π΅ запускаСтся ΠΈΠ· 1Π‘?

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° 1Π‘ ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² консоль cmd.exe. Если Ρ‚Π°ΠΌ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Π² 1Π‘ Π½Π΅Ρ‚ β€” ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΏΡ€Π°Π²Π°Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°ΠΏΡƒΡ‰Π΅Π½ процСсс 1Π‘, ΠΈΠ»ΠΈ Π² Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ антивирусом.

МоТно Π»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ PowerShell Π½Π° сСрвСрС Linux с 1Π‘?

Π”Π°, Ссли Π½Π° сСрвСрС установлСн PowerShell Core (pwsh). ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π²Ρ‹Π·ΠΎΠ²Π° Ρ‡Π΅Ρ€Π΅Π· внСшний процСсс остаСтся Ρ‚Π΅ΠΌ ΠΆΠ΅, Π½ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ измСнится Π½Π° /usr/bin/pwsh, ΠΈ синтаксис ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ классичСского Windows PowerShell.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ скрипт Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π½ΠΎ Π½Π΅ ΠΈΠ· ΠΏΠΎΠ΄ 1Π‘?

Π§Π°Ρ‰Π΅ всСго это связано с ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ запускС Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ свой ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ с настроСнной ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ выполнСния. Π‘Π΅Ρ€Π²Π΅Ρ€ 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ систСмной ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записью ΠΈΠ»ΠΈ сСрвисным ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Restricted ΠΈΠ»ΠΈ отсутствуСт доступ ΠΊ сСтСвым рСсурсам.

Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив ΠΈΠ· 1Π‘ Π² PowerShell?

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ β€” ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив 1Π‘ Π² строку JSON, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΊΠ°ΠΊ строковый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π° Π² скриптС PowerShell ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ $data = $args[0] | ConvertFrom-Json. Π­Ρ‚ΠΎ сохранит структуру Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Ρ‚ΠΈΠΏΠΎΠ².

БСзопасно Π»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² скриптах PowerShell?

НСт, Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… скриптов нСбСзопасно. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ строки (SecureString) Π² PowerShell ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ запуском процСсса.