Powershell Π³Π΄Π΅ находится: основныС возмоТности / RUVDS.com corporate blog / Habr – ΠžΡΠ½ΠΎΠ²Ρ‹ Windows PowerShell | Info-Comp.ru

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Windows PowerShell

Windows PowerShellWindows PowerShell

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ Windows PowerShell – ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΌΠΈΠΌΠΎ стандартных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ встроСнныС cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ возмоТности программирования. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ PowerShell Π½Π΅ устанавливаСтся.


Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

  1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ДиспСтчСр сСрвСра (Server Manager) Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ быстрого запуска ΠΈΠ»ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΡƒΡΠΊ (Start) ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ АдминистрированиС (Administrative Tools) ΠΈ ДиспСтчСр сСрвСра (Server Manager).
  2. Π’ диспСтчСрС сСрвСра Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡƒΠ·Π΅Π» ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Features)
    ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ссылку Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Add Features).
  3. ΠŸΡ€ΠΎΠ»ΠΈΡΡ‚Π°ΠΉΡ‚Π΅ список ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Windows PowerShell. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π”Π°Π»Π΅Π΅ (Next) ΠΈ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ (Install).

ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° PowerShell ΠΈΠ· ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π° поставки ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ самой Π½ΠΎΠ²ΠΎΠΉ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ†Π΅Π½Ρ‚Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° сайтС ΠœΠ°ΠΉΠΊΡ€ΠΎΡΠΎΡ„Ρ‚ ΠΏΠ° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ наличия Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии. Установив PowerShell, Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для Π΅Π΅ запуска Π² мСню ΠŸΡƒΡΠΊ (Start).

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ PowerShell ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ исполняСмый Ρ„Π°ΠΉΠ» (powershell.exe) находится Π² ΠΏΠ°ΠΏΠΊΠ΅ %SystemRoot%\System32\WindowsPowerShell\ВСрсия, Π³Π΄Π΅ ВСрсия – Π½ΠΎΠΌΠ΅Ρ€ установлСнной вСрсии PowerShell, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, v.1.0 ΠΈΠ»ΠΈ v.1.1.

Запустив PowerShell, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС имя cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΈ ΠΎΠ½Π° запустится, ΠΊΠ°ΠΊ любая ΠΊΠΎΠΌΠ°Π½Π΄Π°. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ cmdlet ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ· сцСнариСв. Названия cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄ состоят ΠΈΠ· ΠΏΠ°Ρ€ Β«Π³Π»Π°Π³ΠΎΠ»-ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅Β». Π“Π»Π°Π³ΠΎΠ» Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ дСйствии cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого дСйствия. НапримСр, ΠΊΠΎΠΌΠ°Π½Π΄Π° get-variable Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° ΠΈ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды

Windows PowerShell.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΈΠΌΠ΅Π½Π°Ρ… cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π³Π»Π°Π³ΠΎΠ»Ρ‹:

  • Get Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ спСцифичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ подмноТСство Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик ΠΈΠ»ΠΈ всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков.
  • Set ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • Enable Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.
  • Disable Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.
  • New Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика.
  • Remove УдаляСт экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС PowerShell ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ справку ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ help ΠΈ имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

Π£ cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄ Π΅ΡΡ‚ΡŒ настраиваСмыС псСвдонимы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для запуска cmdlet-ΠΊΠΎΠΌΠ°Π½Π΄. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список псСвдонимов, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС PowerShell

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ создадитС псСвдоним для любой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

new-item -path alias: ПсСвдоним -value: ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠŸΡƒΡ‚ΡŒ ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

new-item -path alias: ПсСвдоним -value: ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠŸΡƒΡ‚ΡŒ ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

Π—Π΄Π΅ΡΡŒ ПсСвдоним – имя создаваСмого псСвдонима, Π° ΠŸΠΎΠ»Π½Ρ‹ΠΉΠŸΡƒΡ‚ΡŒΠšΠΎΠΌΠ°Π½Π΄Ρ‹ – ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. НапримСр:

new-item -path alias:sm -value:c:\windows\system32\compmgmtlauncher.exe

new-item -path alias:sm -value:c:\windows\system32\compmgmtlauncher.exe

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся псСвдоним sm для запуска диспСтчСра сСрвСра. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот псСвдоним ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Windows PowerShell, просто Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС sm ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Enter.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка ΠΈ запуск слуТб Powershell Service ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

Для управлСния слуТбами Π²Β Powershell Π΅ΡΡ‚ΡŒ восСмь ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь процСсс Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвисов ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅. Π§Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ вСсь список ΠΊΠΎΠΌΠ°Π½Π΄ созданных Π² PS для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСрвисами Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ:


Get-Command -Noun Service

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹:

  • Get-Service — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка слуТб Π² Powershell.
  • New-Service — созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ сСрвиса.
  • Restart-Service — пСрСзапуск слуТбы.
  • Resume-Service — восстанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ остановлСнного сСрвиса.
  • Set-Service — ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ настроСк.
  • Start-Service — запуск слуТбы Π² Powershell.
  • Stop-Service — остановка.
  • Suspend-Service — приостановка Ρ€Π°Π±ΠΎΡ‚Ρ‹ (ΠΏΠ°ΡƒΠ·Π°).

Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ дСлаСтся Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сСрвисами. НапримСр ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ дСлаСтся Ρ‡Π΅Ρ€Π΅Π· WMI, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅Β Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны.

Β 

Π£Π·Π½Π°Ρ‚ΡŒ статус всСх слуТб ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:


Get-Service

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка слуТб Π² Powershell Get-Service

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π² PS прСдставляСт собою ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит Ρ€Π°Π·Π½Ρ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Бвойства — это Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ имя ΠΈΠ»ΠΈ статус. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π΅ всС свойства. Π§Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Π΅Ρ‰Π΅ свойства Π΅ΡΡ‚ΡŒ Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:


Get-Service | Get-Member -MemberType Properties

Бвойства сСрвисов Π² Powershell

Π§Π°ΡΡ‚ΡŒ свойств Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ вывСсти сразу всС свойства всСх сСрвисов, Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случая Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ слоТно Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ:


Get-Service | SELECT *

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ вывСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π°, статус ΠΈ Ρ‚ΠΈΠΏ запуска:


Get-Service | Ft Name, Status, StartType

Π’ΠΈΠΏ запуска ΠΈ статус слуТб Powershell

Или Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ сСрвису:


Get-Service "WinRM" | Ft Name, Status, StartType

Π£ сСрвисов Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ имя ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅. Π’Π°ΠΊ ΠΌΡ‹ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ ΠΎΠ±Π°:

ИмСна слуТб Powershell

Π’ ΠΈΠΌΠ΅Π½Π°Ρ…Β ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ маски, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊ * Π² Ρ‚ΠΎΠΌ мСстС, Π³Π΄Π΅ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΈΠ»ΠΈ написании:


Get-Service -DisplayName "Win*" | Ft Name, DisplayName, Status, StartType

Powershell использованиС маски Ρƒ сСрвисов

НС ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ имя Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ язык ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΈ Ссли Π²Ρ‹ выполняСтС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ, вСроятно Π±ΡƒΠ΄ΡƒΡ‚Β ΠΎΡˆΠΈΠ±ΠΊΠΈ:

  • Cannot find any service with service name
  • Cannot find any service with display name
  • НС удаСтся Π½Π°ΠΉΡ‚ΠΈ слуТбу с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ

ΠšΡ€ΠΎΠΌΠ΅ этого Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ маски:

  • Include — Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ поиск ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ маскС ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΡŽ.
  • Exclude — ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅.

МоТно ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ с ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ:


Get-Service -Name "Win*" -Include "*RM" -Exclude "*mgmt","*Http*","*Defend" | Ft Name, Status, StartType

Powershell Get-Service Include ExcludeΠ£ сСрвисов нСсколько статусов:

  • Running — Π·Π°ΠΏΡƒΡ‰Π΅Π½.
  • Stopped — остановлСн.
  • Paused — приостановлСн (ΠΏΠ°ΡƒΠ·Π°).

По ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Get-Service | where -Property Status -eq Stopped

Powershell Service Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ статусу

ΠšΡ€ΠΎΠΌΠ΅ ΡΡ‚ΠΎΠ³ΠΎΒ Π΅ΡΡ‚ΡŒ 3 Ρ‚ΠΈΠΏΠ° запуска:

  • Automatic — автоматичСский запуск вмСстС с систСмой.
  • AutomaticDelayedStart — запуск послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы.
  • Manual — Ρ€ΡƒΡ‡Π½ΠΎΠΉ запуск.
  • Disabled — ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ.

Допустим, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ какая-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ОБ. Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько условий, Π³Π΄Π΅ статус Π½Π΅ Ρ€Π°Π²Π΅Π½ Running ΠΈ Ρ‚ΠΈΠΏ запуска Ρ€Π°Π²Π΅Π½ Automatic:


Get-Service | where -FilterScript {$_.Status -ne 'Running' -and $_.StartType -eq 'Automatic'} | ft 'Name','StartType','Status'

Powershell остановлСнныС слуТбы

Π‘Π»ΡƒΠΆΠ±Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ зависимы ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ этих свойств Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

  • DependentServices — ΠΊΡ‚ΠΎ зависит ΠΎΡ‚ этого сСрвиса.
  • RequiredServices — ΠΎΡ‚ ΠΊΠΎΠ³ΠΎ зависит этот сСрвис.

Get-Service -DisplayName 'Windows Remote Management (WS-Management)' -RequiredServices -DependentServices

WINRm зависимыС слуТбы Powershell

Аналогично ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ΡˆΠ΅Β Π΅ΡΡ‚ΡŒ свойства DependentServices ΠΈΒ ServicesDependedOn (RequiredServices). Они выводят ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅.

Π•ΡΡ‚ΡŒ нСсколько свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ — это:

  • CanPauseAndContinue — ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвиса ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ.
  • CanShutdown — ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½.
  • CanStop — ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ остановлСн.

Π­Ρ‚ΠΈ свойства Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² GUI. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π΅ Π½ΠΈΠΆΠ΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ алиас gsv (ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ имя Get-Service):


gsv -ServiceName 'Winrm' | SELECT CanPauseAndContinue,CanShutdown,CanStop | fl

Powershell CanPauseAndContinue слуТбы Powershell

КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° PS, Π³Π΄Π΅ присутствуСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ComuterName, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ. Для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ управлСния Π² PowershellΒ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.Β 

ИмСна всСх ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° сСрвисов, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ:


gsv -ComputerName 'AD1','localhost' | where Status -eq 'Stopped' | Select MachineName,Name,Status,StartType

Powershell ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сСрвисов с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Β 

Β 

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Β PowershellΒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ ΡΠ»ΡƒΠΆΠ±Ρƒ ΠΈΒ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΒ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ имя:


Stop-Service -Name 'WinRM'
Start-Service -DisplayName 'Π‘Π»ΡƒΠΆΠ±Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ управлСния Windows (WS-Management)'

МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅, остановку ΠΈ запуск Π² ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:


gsv 'WinR*' | Stop-Service | Start-Service

Β Π’ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅Β ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°Ρ… PS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ измСнСния,Β ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ — это WhatIf, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°, Π½ΠΎ Π½Π΅ попытаСтся Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ слоТных Π·Π°Π΄Π°Ρ‡ Ρ‚ΠΈΠΏΠ° кластСров. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Confirm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ. ВмСстС эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚:


Stop-Service -DisplayName 'Windows Remote Management (WS-Management)' -Confirm

Π’ запускС ΠΈ остановкС Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ статусов Π²Ρ‹ΡˆΠ΅. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС слуТбы:


Stop-Service 'WinR*' -Include '*M'
Start-Service 'WinR*' -Include '*M'

Powershell запуск слуТб

Если с сСрвисом Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСрвис, Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠΌ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Force:


Stop-Service 'WinRM' -Force

Если ΠΎΠ½ Π½Π΅ стоит ΠΏΠΎΡΠ²ΠΈΡ‚ΡΡΒ ΠΎΡˆΠΈΠ±ΠΊΠ°:

  • Cannot stop service ‘Remote Procedure Call (RPC) (RpcSs)’ because it has dependent services. It can only be stopped if the Force flag is set.
  • НС удаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ зависимым слуТбам «Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ (RPC) (RpcSs)».

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ описано Π²Ρ‹ΡˆΠ΅ сСрвисы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ зависимы ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС запуск ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ получится. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» всС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ сСрвисы (ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависит Spooler) ΠΈ запустил ΠΈΡ…, Π° Π·Π°Ρ‚Π΅ΠΌ запустил Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ:


$sub_services = Get-Service 'Spooler'
$sub_services.RequiredServices | Start-Service
$sub_services.Name | Start-Service

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ сСрвисов Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ со всСми ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:


Restart-Service 'WinRM'

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ запуск ΠΈ остановка ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°ΠΌΠΈ Π½Π΅ прСдусмотрСна, Π½ΠΎ это исправляСтся стандартными ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:


Invoke-Command -ComputerName 'AD1','localhost' -ScriptBlock {Start-Service 'WinRM'}

Β 

НС ΠΊΠ°ΠΆΠ΄ΡƒΡŽ слуТбу ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ (Pause) ΠΈ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Ρ‚ΡŒ. Π§Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС слуТбы, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:


Get-Service | where CanPauseAndContinue | select -Property Name,CanPauseAndContinue,DisplayName

Powershell восстановлСниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ слуТб 

Командой Π½ΠΈΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ, Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΏΠ°ΡƒΠ·Ρƒ ΠΈ восстановим Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвиса Winmgmt:


Get-Service -Name 'Winmgmt' | Suspend-Service | Resume-Service

Ошибки, Ссли ΠΌΡ‹ попытаСмся ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ слуТбу Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ возмоТности:

  • Service ‘Windows Remote Management (WS-Management)’ cannot be suspended because the service does not support beingsuspended or resumed.Β 
  • НС удаСтся ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ слуТбу «Spooler», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этой слуТбой Π½Π΅ поддСрТиваСтся приостановка ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.

Π’ этих ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Include ΠΈ Exclude, с масками.Β 

На скриптС Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° возмоТности приостановки сСрвиса, Ссли Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Если Π΅Π΅ Π½Π΅Ρ‚, Ρ‚ΠΎ сСрвис остановит свою Ρ€Π°Π±ΠΎΡ‚Ρƒ:


# Π—Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΎΡ‚ случайностСй
#$srv = 'Winmgm*'
$srv_suspend_on = (Get-Service $srv).CanPauseAndContinue
if ($srv_suspend_on){Suspend-Service $srv}
else {Stop-Service $srv}

Β 

ΠšΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠΌ Π½ΠΈΠΆΠ΅ я ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Ρ‚ΠΈΠΏ запуска сСрвиса с ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π° автоматичСский:


Set-Service 'WinRM' -StartupType Automatic

Π’ случаС измСнСния сСрвисов Π½Π΅Π»ΡŒΠ·ΡΒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ маски *.Β 

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Microsoft Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ измСнСния Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ названиями:

  1. Automatic
  2. AutomaticDelayedStart
  3. Disabled
  4. Manual

Π’ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° называСтся ΠΈΠ½Π°Ρ‡Π΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ срабатываСт. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ срабатываСт ΠΈΠ·-Π·Π° Π±Π°Π³ΠΎΠ²Β Windows Server 2019,ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·-Π·Π° зависимостСй (Π² GUI всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚), Π½ΠΎ скорСС всСго Π΄Π΅Π»ΠΎ Π² PS. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с WMI всС срабатываСт. Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ запуска Ρ‚Π°ΠΊΠΈΠ΅:

  1. Automatic
  2. Boot
  3. Disabled
  4. Manual
  5. System

Π§Π΅Ρ€Π΅Π· эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запуск ΠΈ остановку:


Set-Service 'WinRM' -Status Stopped

ВсС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния:

МоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ описаниС сСрвиса:


Set-Service 'WinRM' -Description 'Ρ‡Ρ‚ΠΎ Π²Ρ‹ сдСлали с PS'

Powershell учСтная запись сСрвиса ΠΈ описаниС

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ измСнСния ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ:


Set-Service WinRM -ComputerName 'AD1' -StartupType Automatic

Β 

Для создания сСрвиса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° — это имя ΠΈ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:


New-Service -Name 'TestService' -BinaryPathName 'C:\test.exe'

Π’ PS 5.1 Π½Π΅ прСдусмотрСна ΠΊΠΎΠΌΠ°Π½Π΄Π° удалСния, ΠΎΠ½Π° появилась Π² вСрсии 6.1, которая устанавливаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅. Для удалСния сСрвисов, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ частичного измСнСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ WMI. Π£ΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π½Π΅ Π»Π΅Π·Ρ‚ΡŒ Π² WMI.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ нСльзя Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· PS:

  • DisplayName — ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ имя.
  • CredentialΒ  — учСтная запись, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ запуск.
  • DependsOn — ΠΎΡ‚ ΠΊΠΎΠ³ΠΎΒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ.

$credential = Get-Credential
New-Service -Name 'TestService1' -BinaryPathName 'C:\test.exe' -DisplayName 'Testing Services In Powershell' -Credential $credential -DependsOn WinRM

ΠŸΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $credential Ρƒ нас запросятся ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (Π»ΠΎΠ³ΠΈΠ½/ΠΏΠ°Ρ€ΠΎΠ»ΡŒ). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сСрвис Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠΌ.Β Π― создавал сСрвис Π½Π° Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈ ΠΏΠΎΠΊΠ° я Π½Π΅ Π²Π²Π΅Π» FQDN Π²ΠΈΠ΄ [email protected] я ΠΏΠΎΠ»ΡƒΡ‡Π°Π» ΠΎΡˆΠΈΠ±ΠΊΡƒ:

  • Service ‘Testing Services In Powershell (TestService1)’ cannot be created due to the following error: The account name is invalid or does not exist, or the password is invalid for the account name specified

ΠšΡ€ΠΎΠΌΠ΅ этого Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ΡˆΠ΅:

  • Description — описаниС.
  • StartupType — Ρ‚ΠΈΠΏ запуска.

New-Service 'InstallService' -BinaryPathName 'C:\test.exe' -Description 'Descr' -StartupType Automatic

Β 

Π—Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ со слуТбами Π² WMI ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ класс win32_service. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвисов. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ WMI Π² Powershell ΠΌΡ‹ ΡƒΠΆΠ΅ рассматривали.

Π§Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Get-Service Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:


Get-WmiObject -Class 'Win32_Service' | ft

Β ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка слуТб с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ WMI Π² Powershell

Π’ классС WMI ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ большС свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:


Get-WmiObject -Class 'Win32_Service' | Get-Member -MemberType Properties

Powershell свойства слуТб Π² WMI

Одно ΠΈΠ· прСимущСств использования Π² WMI это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвис. Если сСрвис остановлСн, Ρ‚ΠΎ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ 0. Π’Π°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса с ΠΈΠΌΠ΅Π½Π΅ΠΌ WinRM ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ процСссу:


$srv = Get-WmiObject -Class Win32_Service | Where -Property Name -eq 'WinRM'
$srv.ProcessId
Get-Process -Id $srv.ProcessId

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ процСсса сСрвиса Π² Powershell

О Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с процСссами Π² Powershell ΠΌΡ‹ писали Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.Β 

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ WMI ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ имя Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° слуТба ΠΈ Π΅Π΅ описаниС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ComputerName это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ Π½Π° мноТСствС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ²:


Get-WmiObject -ComputerName 'AD1','localhost' -Class Win32_Service | ft Name,StartName,Description -AutoSize

Имя Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° слуТбы Π² Powershell

Β 

Для управлСния Π² WMI ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:


Get-WmiObject -Class 'Win32_Service' | Get-Member -MemberType Method

Powershell ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² WMI слуТбами

Π£Π΄Π°Π»ΠΈΠΌ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создавался Ρ‡Π΅Ρ€Π΅Π· New-Service:


Get-WmiObject -Class 'Win32_Service' | Get-Member -MemberType Method

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ слуТб Π² Powershell

Для измСнСния ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ. ПослС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сСрвис Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:


# Π›ΠΎΠ³ΠΈΠ½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
$user = 'ServiceUser'
# ΠŸΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
$password = 'Pass0000'
# Имя сСрвиса
$srv_name = 'ServiceName'
$srv = Get-WmiObject -Class win32_service | where -Property Name -eq $srv_name
$srv.Change($null,$null,$null,$null,$null,$null,$null,$null,$null,$user,$password)

$null установлСны Ρƒ всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. Π’ нашСм случаС Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈ ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π£Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ с $null ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:


$srv = get-wmiobject win32_service | where Name -eq Winrm
$srv.GetMethodParameters("change")

Π’Π΅Π³ΠΈ: #powershell

Π’ΠΎΠΏ 7 Powershell ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ² для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² / Netwrix corporate blog / Habr

НавСрноС, всС ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎ PowerShell, Π½ΠΎ навСрняка Π½Π΅ всСм довСлось с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ свой ΠΏΡƒΡ‚ΡŒ Π² Π΄Π΅Π±Ρ€ΠΈ PowerShell, ΠΌΡ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ поста, Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ Π½Π° ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ 4sysops.com. Π’ Π½Π΅ΠΌ рассказано ΠΎ 7 ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с PowerShell. Π—Π° подробностями – Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.
GET-HELP
Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ самый Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ PowerShell – Π²Ρ‹Π·ΠΎΠ² справки. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Get-Help ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ синтаксис, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² любого PowerShell ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»Π΅Π½ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ просто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Get-Help Services, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подходят для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со слуТбами.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
PS C:\> Get-Help Service

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ любой ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ ΠΈΠ· списка, Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎ запросу Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ справку ΠΎ Π½Π΅ΠΌ. НапримСр,

PS C:\> Get-Help -Name Get-Service


Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π΅ Get-Service (Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π½ΠΈΠΆΠ΅).
GET-CONTENT

Π§Ρ‚Π΅Π½ΠΈΠ΅ содСрТимого Ρ„Π°ΠΉΠ»ΠΎΠ² – Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частоС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π²Ρ‹ΡƒΡ‡ΠΈΡ‚ΡŒ PowerShell. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° чтСния Ρ„Π°ΠΉΠ»ΠΎΠ² с PowerShell упрощаСтся. Π”Π°ΠΆΠ΅ нСспСциалист ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π°, просто ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Get-Content.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€.
PS C:\> Get-Content C:\scripts\Computers.txt
mytestpc1
techibee.com
dummynotresolvinghost.com
PS C:\>

НСобходимо большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π΅? Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Get-Help:

PS C:\> Get-Help Get-Content -Detailed 
GET-SERVICE

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ пСрСчисляСт всС слуТбы, установлСнныС Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ слуТбС, совокупности слуТб ΠΈΠ»ΠΈ просто ΠΎΠ±ΠΎ всСх слуТбах Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
PS C:\> Get-Service wwansvc, spooler
Status Name DisplayName
------ ---- -----------
Running spooler Print Spooler
Stopped wwansvc WWAN AutoConfig
PS C:\>
 



Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ запросили ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π΄Π²ΡƒΡ… слуТбах wwansvc ΠΈ spooler
Выводится Ρ‚Π°Π±Π»ΠΈΡ†Π° со статусом слуТбы, Π΅Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ слуТба spooler Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°, Π° wwansvc остановлСна
STOP-SERVICE И START-SERVICE

Запуск ΠΈ остановка слуТб – достаточно Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ администратора Windows. Π’ PowerShell ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ встроСнныС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ администратора, Π½Π΅ трСбуя открытия консоли MMC. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ/Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ слуТбы ΠΊΠ°ΠΊ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ….
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:
Запуск/остановка слуТбы Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ слуТбы spooler):
PS C:\> Stop-Service -Name Spooler
PS C:\> Start-Service -Name Spooler

Запуск/остановка слуТбы Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ (spooler):

PS C:\> $ServiceObj = Get-Service -ComputerName MyPC1 -Name spooler
PS C:\> Stop-Service -InputObj $ServiceObj
PS C:\> Start-Service -InputObj $ServiceObj
GET-PROCESS

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ позволяСт Π±Ρ‹Ρ‚ΡŒ Π² курсС, ΠΊΠ°ΠΊΠΈΠ΅ процСссы Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ имя ΠΈ ID процСсса, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡƒΡ‚ΡŒ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ, имя ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, вСрсия исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ процСссом.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ процСссах, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅:
PS C:\> Get-Process

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ для получСния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… процСссах

PS C:\> Get-Process | Format-List * -Force

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ процСссах, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅:

PS C:\> Get-Process -ComputerName MYPC1 | Format-List * -Force

MYPC1 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° имя Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… процСссах.

STOP-PROCESS

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ остановливаСт процСсс Π½Π° локальном ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Он Π±Π΅Ρ€Π΅Ρ‚ имя ΠΈΠ»ΠΈ ID процСсса ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ этот процСсс. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ процСсс с ID 22608 Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅:
PS C:\> Stop-Process -Id 22608

ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС процСссы Excel Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅:
PS C:\> Stop-Process -name excel

Π‘ΠΎΠ²Π΅Ρ‚: Π₯отя Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Stop-Process отсутствуСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -ComputerName, Π’Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… процСссов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ совСт:

PS C:\> $Obj = Get-Process -Name excel -ComputerName MYPC1
PS C:\> Stop-Process -InputObject $Obj

Upd:
Π’ постС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ с ΠΏΠΎΡ€Ρ‚Π°Π»Π° 4sysops.com
Top 7 PowerShell commands for beginners

P.S. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ интСрСсныС посты Π½Π° Π₯Π°Π±Ρ€Π΅, посвящСнныС Ρ€Π°Π±ΠΎΡ‚Π΅ с PowerShell
Аудит доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ
Аудит Active Directory (Π§Π°ΡΡ‚ΡŒ 1 ΠΈ 2)
АктуализируСм ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Active Directory
Аудит создания ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записСй Π² AD

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ PowerShell?

ВсС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ командная строка, ΠΊΠ°ΠΊΠΈΠ΅ возмоТности ΠΎΠ½Π° Π΄Π°Π΅Ρ‚, Π½ΠΎ Π½Π΅ всС Π·Π½Π°ΡŽΡ‚ ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΌ интСрфСйсС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся PowerShell. По сути это ΠΏΠΎΡ‡Ρ‚ΠΈ такая ΠΆΠ΅ командная строка, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ возмоТностями. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ PowerShell, ΠΈ Ρ‡Ρ‚ΠΎ этот инструмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ PowerShell

НачнСм с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°. ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° – это интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ функциями ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, PowerShell это ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° компания Microsoft ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π±ΠΎΠ»Π΅Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ выполнСния Π·Π°Π΄Π°Ρ‡. Π”Π°Π½Π½Ρ‹ΠΉ инструмСнт создан Π½Π° основС .NET ΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π° Ρ‚Π°ΠΊΠΆΠ΅ языка сцСнариСв.

PowerShellPowerShell

Π’Π°ΠΊΠΆΠ΅, сущСствуСт Ρ‚Π°ΠΊΠΎΠ΅ понятиС, ΠΊΠ°ΠΊ PowerShell ISE, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выступаСт Π² качСствС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСды сцСнариСв, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, это графичСский интСрфСйс, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ сцСнарии, ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ для этого всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку.

ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия инструмСнта PowerShell появилась Π΅Ρ‰Π΅ Π² 2006 Π³ΠΎΠ΄Ρƒ для Windows XP, Server 2003 ΠΈ Vista. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ послСдняя вСрсия инструмСнта 4.0. Π’Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° Π² 2013 Π³ΠΎΠ΄Ρƒ вмСстС с Windows 8.1.

КакиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСт PowerShell?

psakePowerShellpsakePowerShellКак я ΡƒΠΆΠ΅ сказал Π²Ρ‹ΡˆΠ΅, Microsoft создала эту ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС. Допустим Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ USB устройства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, Ρ‚Π°ΠΊ Π²ΠΎΡ‚, это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PowerShell. Π•Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ своими Π΄Π΅Π»Π°ΠΌΠΈ. Если Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ лишниС Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ процСссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ систСмы, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PowerShell. Π’Π°ΠΊΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ информация ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… сСтях ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈ быстро Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ сцСнарии ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄.

Π’ Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ администратором сСти, Ρ‚ΠΎ PowerShell смоТСт Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Active Directory. Π’Π°ΠΊΠΆΠ΅, стоит Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° содСрТит Π±ΠΎΠ»Π΅Π΅ 100 ΠΊΠΎΠΌΠ°Π½Π΄. Π­Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Π°ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π·Π°Π΄Π°Ρ‡.

Запуск PowerShell Π½Π° Windows 7

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ PowerShell Π½Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² поискС, Π³Π΄Π΅ ΠŸΡƒΡΠΊ, ввСсти Β«powershellΒ».

Windows-7Windows-7

По-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ инструмСнт ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ, Ссли Π·Π°ΠΉΡ‚ΠΈ Π² мСню ΠŸΡƒΡΠΊ, всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, стандартныС ΠΈ ΠΏΠ°ΠΏΠΊΠ° Windows PowerShell.

How-to-open-PowerShellHow-to-open-PowerShell

Запуск PowerShell Π½Π° Windows 8.1

Для открытия PowerShell Π² Windows 8.1 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² поискС ввСсти ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«powershellΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ поиск, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Win+Q.

12121212

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ открытия – Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΊΠ½ΠΎ Β«Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΒ». НаТимаСм Win+R, открываСтся ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ powershell.

23552355

Запуск PowerShell Π½Π° Windows 10

Π’ΡƒΡ‚ Ρ‚ΠΎΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… вСрсиях Windows. Поиск находится Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡, Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Π½Π° Π½Π΅Π³ΠΎ ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚Π΅ powershell. И способ с интСрфСйсом Β«Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΒ», ΠΊΠ°ΠΊ Π² Windows 8.1.

24252425

ИспользованиС Π² повсСднСвности

Π”Π°Π½Π½Ρ‹ΠΌ инструмСнтом ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ IT-спСциалисты ΠΈ администраторы ΠΈ Π½Π΅ зря, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π΄Π°Π΅Ρ‚ большиС возмоТности ΠΈ сниТаСт врСмя, Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Ρ‡.

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π² своСм пользовании Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΠ΅Ρ‚ΡŒ, которая состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сотСн сСрвСров, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ систСму бСзопасности, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ использовании ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ слуТбы. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, установлСна Π»ΠΈ данная слуТба Π½Π° всСх сСрвСрах. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сСрвСру, Π½ΠΎ руководству это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ понравится, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΡƒΠΉΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ½ΡƒΡ‚, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ PowerShell, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сцСнария собСрСм всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ сохраним Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

Π’Π°ΠΊΠΆΠ΅, ΠΎ Π΄Π°Π½Π½ΠΎΠΌ инструмСнтС написано Π½Π΅ ΠΌΠ°Π»ΠΎ ΠΊΠ½ΠΈΠ³, всС-Ρ‚Π°ΠΊΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ инструмСнт Π΄Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вряд Π»ΠΈ ΠΎΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли вас заинтСрСсовала данная Ρ‚Π΅ΠΌΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

Как Π² скриптС PowerShell ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ мСстополоТСниС

Как Π² скриптС PowerShell ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ мСстополоТСниС

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² скриптС трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ дирСктория, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ скрипт Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, Π½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ всСго Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ автоматичСскими ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся свСдСния ΠΎ состоянии PowerShell.

Π’Π°ΠΊ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $PSScriptRoot хранится тСкущая дирСктория, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ скрипт, Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $PSCommandPath β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ имя Ρ„Π°ΠΉΠ»Π° скрипта. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим скрипт Ρ‚Π°ΠΊΠΎΠ³ΠΎ содСрТания ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ:

β€³PSScriptRoot is $PSScriptRootβ€³
β€³PSCommandPath is $PSCommandPathβ€³

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $PSScriptRoot ΠΈ $PSCommandPath

Β 

Π’Π°ΠΊΠΆΠ΅ для опрСдСлСния мСстополоТСния ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $MyInvocation. Π­Ρ‚Π° пСрСмСнная ΠΈΠΌΠ΅Π΅Ρ‚ свойство MyCommand, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся свСдСния ΠΎ выполняСмой ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π—Π°ΠΌΠ΅Π½ΠΈΠΌ содСрТимоС скрипта ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ:

$MyInvocation.MyCommand | fl *

Бвойство Mycommand ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $MyInvocation

Β 

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Если ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… $PSScriptRoot, $PSCommandPath ΠΈ $MyInvocation ΠΈΠ· консоли, Ρ‚ΠΎ Π²Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для скриптов ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, $MyInvocation.MyCommand.Path содСрТит ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ имя скрипта, $MyInvocation.MyCommand.Name β€” имя Ρ„Π°ΠΉΠ»Π°. Ну Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$MyInvocation.MyCommand.Path | Split-Path -Parent

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² скрипт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ:

Full name is $($MyInvocation.MyCommand.Path)
Name is $($MyInvocation.MyCommand.Name)
Current directory is $($MyInvocation.MyCommand.Path | Split-Path -Parent)

ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ скрипта ΠΈ ΠΏΡƒΡ‚ΠΈ

Β 

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ $MyInvocation ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. Для наглядности создадим Π΄Π²Π° скрипта, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ:

$MyInvocation | fl *
.\script2.ps1

ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ:

$MyInvocation | fl *

Π’.Π΅. Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ скриптС ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ содСрТимоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $MyInvocation, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ скрипт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΒ $MyInvocation. ЗапускаСм ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ скрипт ΠΈ смотрим Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, содСрТимоС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ скрипта отличаСтся. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² $MyInvocation хранятся Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, поэтому для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ скрипта оказались Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΌΠΈ свойства ScriptName, PSScriptRoot ΠΈ PSCommandPath, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π· ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ скрипт, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° тСкущая ΠΊΠΎΠΌΠ°Π½Π΄Π°.

особСнности ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $MyInvocation

Β 

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ about_Automatic_Variables.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Powershell ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π’ΠΎ врСмя написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ скрипта любой Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ программист столкнСтся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π³Π΄Π΅ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π΄Π²Π°ΠΆΠ΄Ρ‹ ΠΈ Π² этот ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Powershell. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ. ΠšΡ€ΠΎΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования ΠΎΠ½ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для выдСлСния ΠΎΠ΄Π½ΠΎΠΉ части скрипта ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Ρ…ΠΎΡ‚ΡŒ ΠΎΠ½Π° ΠΈ выполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ описанныС Π½ΠΈΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΎ мноТСствС языках ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΌΡƒ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡƒΡ‚Ρ€ΠΎ Π²Ρ‹ провСряСтС 50 послСдних Π»ΠΎΠ³ΠΎΠ² Π·Π° 14 часов ΠΆΡƒΡ€Π½Π°Π»Π° Application с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:


Get-EventLog -LogName Application -Newest 50 | where TimeWritten -ge (Get-Date).AddHours(-14)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΠ² Π² PowershellКоманда Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ слоТная, Π½ΠΎ Π² скором Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΅Π΅ надоСст ΠΏΠΈΡΠ°Ρ‚ΡŒ. Для сокращСния этой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:


function Get-DayLog {
    Get-EventLog -LogName Application -Newest 50 | where TimeWritten -ge (Get-Date).AddHours(-14)
}

Π›ΡŽΠ±Π°Ρ функция ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²Π΅Ρ‰Π΅ΠΉ:

  • function — ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Β ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Β Ρ‡Ρ‚ΠΎ послС Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅;
  • имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ. Π’ нашСм случаС имя Get-DayLog;
  • скобки — ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† выраТСния.

ПослС написания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½Π° вызываСтся ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ:


Get-DayLog

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ windows powershell

Учитывая, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π·Π° послСдниС 14 часов ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π·Π° 50 Π΄Π½Π΅ΠΉ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ потрСбуСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Β 

НС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠ»Π°Π½Π°, ΠΊΠ°ΠΊ принято Π² Powershell, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ вмСсто «Get-DayLog» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ «daylog». Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈ являСтся распространСнной практикой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ запуск стороннСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Β 

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Powershell всСгда ΠΈΠΌΠ΅Π½ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ слово это Π³Π»Π°Π³ΠΎΠ»Ρ‹ Ρ‚ΠΈΠΏΠ°:

  • Get — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ;
  • Set — ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ;
  • Install — ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ;
  • New — ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ имя — это ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π² случаС Π²Ρ‹ΡˆΠ΅ DayLog(Π΄Π½Π΅Π²Π½ΠΎΠΉ Π»ΠΎΠ³). Π£ Microsoft Π΅ΡΡ‚ΡŒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ список Π³Π»Π°Π³ΠΎΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ доступСн ΠΏΠΎ ссылкС Π½Π° английском языкС. Если Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этих ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ) Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ†ΠΈΡŽ.

Β 

Π§Π°Ρ‰Π΅ всСго Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ врСмя, ΠΊΠΎΠ³Π΄Π° эти Π»ΠΎΠ³ΠΈ созданы ΠΈ ΠΈΡ… количСство. Π’ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ возмоТности Π½Π΅Ρ‚. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, Π½ΠΎ это Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ программиста. Π§Ρ‚ΠΎ Π±Ρ‹ такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ появилась Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, которая ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ:


function Get-DayLog ($param1,$param2) {
    Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2)
}

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ послС названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄ΠΎ выраТСния.Β 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, трСбуСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:


Get-DayLog -param1 50 -param2 -14

powershell Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΄Π²Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° со значСниями. Π­Ρ‚ΠΈ значСния, Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ доступны ΠΏΠΎΠ΄ названиями $param1 ΠΈ $param2. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ получСния ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΎΠ².

Установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Π’ нашСй Π·Π°Π΄Π°Ρ‡Π΅, Ρ‡Π°Ρ‰Π΅ всСго, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 50 послСдних Π»ΠΎΠ³ΠΎΠ² ΠΈ Π½Π°ΠΌ Π½Π΅ хочСтся ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·. Если ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π§Ρ‚ΠΎ Π±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ я присвоил $param1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 50. Оно Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅:


function Get-DayLog ($param1=50,$param2) {
     Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2)
}
Get-DayLog -param2 -7

powershell ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ param2, Ρ‡Ρ‚ΠΎ добавляСт Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π§Ρ‚ΠΎ Π±Ρ‹ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ достаточно ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… мСстами:


function Get-DayLog ($param2,$param1=50) {
     Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2)
}
Get-DayLog -7 1
Get-DayLog -7

powershell Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Как Π²ΠΈΠ΄Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли ΠΌΡ‹ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ»ΡŽΡ‡ΠΈ param1 ΠΈ param2 Π²Π°ΠΆΠ½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ присвоСны ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Ссли ΠΌΡ‹ присвоим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $result Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Get-DayLog, Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния:


$result = Get-DayLog -7 1

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ Ρ€Π΅ΡˆΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ присвоив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:


function Get-DayLog ($param2,$param1=50) {
     $events = Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2)
}
$result = Get-DayLog -7
$result
$events 

powershell Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $result, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΅Π΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $events. Вызывая $events ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ понятиС «ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…».

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ вся Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΅Π΅ части. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ это ΠΆΠ΅. ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, созданныС Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΠΉ ΠΆΠ΅. Π­Ρ‚Ρƒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ return:


function Get-DayLog ($param2,$param1=50) {
     $events = Get-EventLog -LogName Application -Newest $param1 | where TimeWritten -ge (Get-Date).AddHours($param2)
return $events
}
$result = Get-DayLog -7
$result

Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄ Π² powershell

Π― Π±Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния Ρ‡Π΅Ρ€Π΅Π· return, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚ΠΈΠΏΠ° Write-OutputΒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ИспользованиС return останавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π½Π΅ стоит ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ сСрСдинС Π»ΠΎΠ³ΠΈΠΊΠΈ Ссли Ρ‚Π°ΠΊ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ ΠΈ Π½Π°Π»ΠΎΠ³:


function Get-Salary ($Zarplata) {
$nalog = $Zarplata * 0.13
$zarplata_bez_nds = $Zarplata - $nalog
return $nalog,$zarplata_bez_nds
}
Get-Salary -Zarplata 100000

powershell ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π― Π²Π΅Ρ€Π½ΡƒΠ» ΠΎΠ±Π° значСния Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² ΠΈΡ… запятой. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всСгда возвращаСтся массив. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Powershell это Π½Π°Π±ΠΎΡ€ Π½Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΒ  ΠΎ Π½ΠΈΡ… ΠΌΡ‹ ΡƒΠΆΠ΅ писали.

Π’ случаС с массивами, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ надпись ΠΎ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π΅,Β ΠΈ Π½Π°Π»ΠΎΠ³Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксы:


$result = Get-Salary -Zarplata 100000
# ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…
$result.GetType()
Write-Host "это Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°" $result[1]
Write-Host "это Π½Π°Π»ΠΎΠ³" $result[0]

созданиС скрипта powershell

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠΆΠ΅Ρ‚ любой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Ρ…ΡΡˆ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ массивов ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅:


function Get-Salary ($Zarplata) {
$nalog = $Zarplata * 0.13
$zarplata_bez_nds = $Zarplata - $nalog
return @{"Налог"=$nalog;"Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π°"=$zarplata_bez_nds;}
}
Get-Salary -Zarplata 100000

ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» powershell

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Ρ…ΡΡˆ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π² Powershell Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…. Π”Π°Π»Π΅Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² с Π½ΠΈΠΌΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π² любом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ своё прСимущСство.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ВсС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹:


$Zarplata = 100000
function Get-Salary {
$nalog = $Zarplata * $nalog
$zarplata_bez_nds = $Zarplata - $nalog
return @{"Налог"=$nalog;"Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π°"=$zarplata_bez_nds;}
}
$nalog = 0.20
Get-Salary

powershell Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π°Π² Π΅ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:


$Zarplata = 100000
function Get-Salary {
$Zarplata = 200000
$nalog = $Zarplata * $nalog
$zarplata_bez_nds = $Zarplata - $nalog
return @{"Налог"=$nalog;"Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π°"=$zarplata_bez_nds;}
}
$nalog = 0.20
Get-Salary
$Zarplata

написаниС скрипта powershell

Как ΡƒΠΆΠ΅ писалось Π²Ρ‹ΡˆΠ΅, значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ доступны Π²Π½Π΅ Π½Π΅Π΅ ΠΈ Ρƒ нас Π΅ΡΡ‚ΡŒ всС возмоТности Ρ‡Ρ‚ΠΎ Π±Ρ‹ этого Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ способ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ доступна Π²Π½Π΅ Π½Π΅Π΅.

Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. ΠžΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ приставкой $global:


$Zarplata = 100000
function Get-Salary {
#Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная
$global:Zarplata = 200000
$nalog = $Zarplata * $nalog
$zarplata_bez_nds = $Zarplata - $nalog
return @{"Налог"=$nalog;"Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π°"=$zarplata_bez_nds;}
}
$nalog = 0.20
Get-Salary
$Zarplata

powershell ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, пСрСмСнная $zarplata ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ИспользованиС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… являСтся Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам. Π’Π°Ρˆ скрипт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ΠΈ ΠΎΠ± этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π² области видимости.

Β 

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Powershell автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого выраТСния Π±ΡƒΠ΄Π΅Ρ‚ число 3, Π° Π½Π΅ «111»:


3 * "1"

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это объявляя Ρ‚ΠΈΠΏΡ‹:


function Get-Size ([int]$Num){
    $size = 18 * $Num
    return $size
}
Get-Size 5
Get-Size "str"

powershell ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π’ΠΎ Π΅ΡΡ‚ΡŒ объявляя Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ·Π±Π΅ΠΆΠ°Π² Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ прСобразования. Если Π±Ρ‹ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈ Ρ‚Π°ΠΊΡƒΡŽ строку «1», Ρ‚ΠΎ Ρƒ нас ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΎΡΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² число.

Π’Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Powershell  всСго 13:

  • [string] — строка;
  • [char] — 16-битовая строка Unicode;
  • [byte] — 8 Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ символ;
  • [int] — Ρ†Π΅Π»ΠΎΠ΅ 32 Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ число;
  • [long] — Ρ†Π΅Π»ΠΎΠ΅ 64 Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ число;
  • [bool] — Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True/False;
  • [decimal] — 128 Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ;
  • [single] — 32 Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ;
  • [double] — 64 Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ;
  • [DateTime] — Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ;
  • [xml] — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ xml;
  • [array] — массив;
  • [hashtable] — Ρ…ΡΡˆ Ρ‚Π°Π±Π»ΠΈΡ†Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π°Π»Π΅Π΅.

$args

Π’ языках программирования Π΅ΡΡ‚ΡŒ понятиС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ΠΈΠΌΠ΅Π½:


function Get-Args {
    Write-Host "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с arg: " + $args[0] -BackgroundColor Red -ForegroundColor Black
    Write-Host "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с arg: " + $args[1] -BackgroundColor Black -ForegroundColor Red
}

Get-Args "ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ" "Π’Ρ‚ΠΎΡ€ΠΎΠΉ"

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ windows powershell

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ $args являСтся массивом ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎ индСксу. Π― Π½Π΅ ΡΡ‚Π°Π²Π»ΡŽ Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² этом случаС Ρƒ мСня Π±Ρ‹Π» Π±Ρ‹ массив Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ влоТСнности.

ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Mandatory

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π°Ρ‚Ρƒ измСнСния Ρ„Π°ΠΉΠ»Π°:


function Get-ItemCreationTime ($item){
    Get-Item -Path $item | select LastWriteTime
}

Get-ItemCreationTime "C:\Windows\explorer.exe"
Get-ItemCreationTime

powershell Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΡˆΠ΅Π» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС ΠΌΡ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ значСния, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ пСрСмСнная $item Ρ€Π°Π²Π½Π° $null (Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ/Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΠΌΡƒΒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ). Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках, Π² Ρ‚Π°ΠΊΠΈΡ… случаях, Ρƒ нас появилась Π±Ρ‹ ошибка Π΅Ρ‰Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Get-ItemCreationTime, Π° Π½Π΅ Π²ΠΎ врСмя выполнСния Get-Item.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‡Ρ‚ΠΎ Π΄ΠΎ получСния Π΄Π°Ρ‚Ρ‹ измСнСния Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄ΡƒΡ‚ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ дСйствия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ созданиС Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π§Ρ‚ΠΎ Π±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ:


function Get-ItemCreationTime ([parameter(Mandatory=$true)]$item){
    Get-Item -Path $item | select LastWriteTime
}

Get-ItemCreationTime "C:\Windows\explorer.exe"
Get-ItemCreationTime

powershell ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Атрибут Mandatory обязываСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π΅Ρ‰Π΅ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Param()

Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Param(). Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. На ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ использовалось Π±Ρ‹ Ρ‚Π°ΠΊ:


function Get-ItemCreationTime {

	param (
		[parameter(Mandatory=$true)]$item
		)

    Get-Item -Path $item | select LastWriteTime
	}

Get-ItemCreationTime "C:\Windows\explorer.exe"
Get-ItemCreationTime

Microsoft Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ синтаксис написания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ обязываСт Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΎΠΉ синтаксис Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ это Π½Π΅ просто функция, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ скрипт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π³Π΄Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ нСсколько ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис с Param:


function Get-PlusPlus {
	param (
		[parameter(Mandatory=$true, Position=0)]
		[int]
		$item1,
        [parameter(Position=1)]
        [int]
        $item2,
        [parameter(Position=2)]
        [string]
        $item3
        )

    $summ = $item1 + $item2
    Write-Output $item3 $summ
	}

Get-PlusPlus 2 5 "Summ"

powershell Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Position Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΠΎΠ΄ ΠΊΠ°ΠΊΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ пСрСдаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Одно ΠΈΠ· прСимущСств Ρ€Π°Π±ΠΎΡ‚Ρ‹ с param() Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас становятся доступны ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚ΠΈΠΏΠ° -Confirm ΠΈ -Verbose.Β 

CmdletBinding()

ИспользованиС этого Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° позволяСт Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ созданию ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ². Microsoft ΠΏΠΈΡˆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ использованиС CmdletBinding ΠΈΠ»ΠΈ Parameter Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Powershell, Π½ΠΎ ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ Π½Π΅ всСгда всС срабатываСт ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ я установил ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π»ΠΈΠ½Ρƒ строк с 1 ΠΏΠΎ 13 символов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ValidateLength(1,13). Position=1 Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± индСксС элСмСнта Π² массивС:


function Get-LenStr {
    [CmdletBinding()]
	param (        
		[parameter(Mandatory=$true,
                        Position=1
                        )]        
        [ValidateLength(1,13)]
		[string]
		$len1,
		[parameter(Mandatory=$true, 
                        Position=0
                        )]
		[string]
		$len2
        )
    Write-Host $len2 $len1
	}

Get-LenStr "Π­Ρ‚ΠΎ строка 1" "Π­Ρ‚ΠΎ строка 2"

Π’Π°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для ΠΊΠΎΠΌΠ°Π½Π΄ достаточно ΠΌΠ½ΠΎΠ³ΠΎ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΅Ρ‰Π΅ нСсколько Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π±Π»ΠΎΠΊ parameter:

  • HelpMessage = «Π’Скст»Β  — подсказка ΠΏΠΎ использованию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ пояснСниС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈ запросС справки Ρ‡Π΅Ρ€Π΅Π· Get-Help;
  • ParameterSetName=»Computer» — ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ относятся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹;

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Ρ‚ΠΈΠΏΠ° [ValidateLength]:

  • [Alias(‘t’)] — устанавливаСт алиас для этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² Π²ΠΈΠ΄Π΅ Π±ΡƒΠΊΠ²Ρ‹ t;
  • [PSDefaultValue(Test=’Test’)] — устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Test;
  • [string[]] — Ρ‚Π°ΠΊΠΎΠ΅ использованиС Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив строк
  • [AllowNull()] — позволяСт ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Π±Ρ‹Ρ‚ΡŒ $null
  • [AllowEmptyString()] — позволяСт ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Π±Ρ‹Ρ‚ΡŒ пустой строкой
  • [AllowEmptyCollection()] — ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с пустым массивом
  • [ValidateCount(1,5)] — минимальноС ΠΈ максимальноС количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
  • [ValidatePattern(«[0-9]»)] — ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° шаблон ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ рСгулярного выраТСния

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² на сайтС Microsoft.

Β 

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° массивов Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… Π±Ρ‹Π»ΠΎ мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами ΠΈ Ρ…ΡΡˆ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ. Π˜Ρ… ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Powershell, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡ ComputerName, ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массивы, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ².

Ѐункция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ массив с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ всС остановлСнныС сСрвисы. Π― Ρ‚Π°ΠΊ ΠΆΠ΅ объявлю этот Ρ‚ΠΈΠΏ строгим, для наглядности, хотя ΠΈ Π±Π΅Π· этого Π² любом случаС сработаСт:


function Get-ServiceStopped ([array]$Computers){
    $services = Get-Service -ComputerName $Computers | where Status -eq Stopped
    return $services
}

Get-ServiceStopped '127.0.0.1','localhost'

powershell Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ индСксам, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ большС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Π°ΠΊΠΎΠΉ способ Π½Π΅ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹ΠΉ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ.


function Get-ServiceStopped ([array]$Computers){
    $services = Get-Service -ComputerName $Computers[0,-2] | where Status -eq $Computers[-1]
    return $services
}

Get-ServiceStopped '127.0.0.1','localhost','Stopped'

Π₯эш Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ…ΡΡˆ Ρ‚Π°Π±Π»ΠΈΡ†Β ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ просто Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π° ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ². Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ запуск сСрвиса, Ссли ΠΎΠ½ остановлСн:


function Get-ServiceStopped ([hashtable]$Params){
    $services = Get-Service @Params | where Status -eq Stopped
    $services = Start-Service $services
    return $services
}

Get-ServiceStopped @{Name='WinRM';ComputerName=@('127.0.0.1','localhost')}

Π—Π½Π°ΠΊ @ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Ρ…ΡΡˆ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°  соотвСтствовали настоящим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ.

Β 

НСт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° использования условий. Π­Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ достаточно ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ значСния.

IF

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ Π² зависимости ΠΎΡ‚ скорости Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ основной части сайта Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ Ρ€Π°Π·Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚. Если ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π° мСньшС 76 миллисСкунды Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ, Π² случаС Ссли Π±ΠΎΠ»Π΅Π΅ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° вСрнСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:


function Get-SiteResponse {
    # Начало отсчСта
    $start_time = Get-Date
    # Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса
    $request = Invoke-WebRequest -Uri "https://fixmypc.ru"
    # ЀиксированиС окончания выполнСния
    $end_time = Get-Date
    # ВысчитываСм Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
    $result =  $end_time - $start_time
    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°
    if ($result.Milliseconds -lt 76) {
        return "Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ " + $result.Milliseconds}
    else{
        return "Π‘Π°ΠΉΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π΄ΠΎΠ»Π³ΠΎ " + $result.Milliseconds }
    
}

Get-SiteResponse

Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄ Π² powershell

Switch

ΠœΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ Powershell SwitchΒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…. Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Ρ‚ΠΎ это Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ условия. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎ со Switch, это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


function Get-SiteResponse {
    # Начало отсчСта
    $start_time = Get-Date
    # Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса
    $request = Invoke-WebRequest -Uri "https://fixmypc.ru"
    # ЀиксированиС окончания выполнСния
    $end_time = Get-Date
    # ВысчитываСм Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
    $result =  $end_time - $start_time
    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°
    switch($result.Milliseconds) {
        {$PSItem -le 76} {
            return "Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ " + $result.Milliseconds}
        default {
            return "Π‘Π°ΠΉΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π΄ΠΎΠ»Π³ΠΎ " + $result.Milliseconds }
    }
}

Get-SiteResponse

powershell ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Switch это Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² зависимости ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ я Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится Switch. Π’ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ я ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽ имя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ провСряСтся Π½Π° ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ„Ρ€Π°Π· ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. КаТдая функция, которая устанавливаСт обновлСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Switch, Π° Π·Π°Ρ‚Π΅ΠΌ происходит return Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π΅:


function Install-SQLUpdates {
	# Π΄Π΅Π»Π°Π΅ΠΌ установку
	return "Установка ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π° SQL сСрвСр ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ"
}

function Install-ADUpdates {
	# Π΄Π΅Π»Π°Π΅ΠΌ установку
	return "Установка ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π° сСрвСр AD ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ"
}

function Install-FileServerUpdates {
	# Π΄Π΅Π»Π°Π΅ΠΌ установку
	return "Установка ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ сСрвСр ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ"
}

function Make-Switch ($computer) {
	# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°
	$result = switch($computer){
		{$computer -like "SQL*"} {Install-SqlUpdates}
		{$computer -like "AD*"} {Install-ADUpdates}
		{$computer -like "FileServer*"} {Install-FileServerUpdates}
		default {"Π’Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Π½Π΅Ρ‚"}
	}
	return $result

}

Make-Switch "AD1"

созданиС скрипта powershell

Π‘ΠΎ switch Ρ‚Π°ΠΊ ΠΆΠ΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ булСвы значСния. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ Ссли ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ»ΡŽΡ‡ -On сСрвис Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ, Π° Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ:


function Switch-ServiceTest ([switch]$on) {
    if ($on) {Write-Output "БСрвис Π²ΠΊΠ»ΡŽΡ‡Π΅Π½"}
    else {"БСрвис Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½"}
}


Switch-ServiceTest -On
Switch-ServiceTest

ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» powershell

Β 

Π’Ρ‹ навСрняка Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Powershell, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволяли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


Get-Process -Name *TestProc* | Stop-Process

Если ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΉΒ Π²Ρ‹ΡˆΠ΅, создав Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Π²ΠΈΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ:


function Get-SomeNum {
    # ГСнСрация числа
    $num = Get-Random -Minimum 5 -Maximum 10
    return $num
}

function Plus-SomeNum ($num) {
    Write-Host "ΠŸΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ числа " $num 
    $num += $num
    return $num
}

Get-SomeNum
Plus-SomeNum 5
Get-SomeNum | Plus-SomeNum

powershell Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΌΡ‹ смоТСм ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ:


Get-Help Stop-Process -Parameter Name

powershell Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт

Π’Π°ΠΊΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² всСго Π΄Π²Π°:

  • ValueFromPipelineByPropertyName — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ значСния ΠΈΠ· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ;
  • ValueFromPipeline — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Β Ρ‚ΠΎΠ»ΡŒΠΊΠΎ значСния .

ΠšΡ€ΠΎΠΌΠ΅ этого,Β Π²Π½ΡƒΡ‚Ρ€ΠΈ нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Process. Наш скрипт Π² ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


function Get-SomeNum { 
        $num = Get-Random -Minimum 5 -Maximum 10
        return $num
}

function Plus-SomeNum {
    [cmdletbinding()]
    Param (
            [parameter(ValueFromPipeline=$True)]
            [int]
            $num
        )
    process {  
    Write-Host "ΠŸΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ числа " $num 
    $num += $num
    return $num
    }
}

1..5 | Plus-SomeNum
Get-SomeNum | Plus-SomeNum

написаниС скрипта powershell

[cmdletbinding()] — Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ позволяя ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

Если Π±Ρ‹ ΠΌΡ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π±Π»ΠΎΠΊ Process функция Π±Ρ‹ Π²Π΅Ρ€Π½ΡƒΠ»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднСй Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠ· массива 1..5:

powershell ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Если наши ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ критичСский Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ,Β Ρ‚ΠΎ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Β ValueFromPipelineByPropertyName. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠΌ попадания Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ случайного значСния. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ я ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»


function Get-SomeNum { 
    $num = Get-Random -Minimum 5 -Maximum 10
    $object = [pscustomobject]@{num=$num}
    return $object
}

function Plus-SomeNum {
    [cmdletbinding()]
    Param (
            [parameter(ValueFromPipelineByPropertyName=$True)]
            [int]
            $num
        )
    process {  
    Write-Host "ΠŸΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ числа " $num 
    $num += $num
    return $num
    }
}

Get-SomeNum | Plus-SomeNum
[pscustomobject]@{num=5} | Plus-SomeNum
[pscustomobject]@{bad=5} | Plus-SomeNum

powershell ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Как ΡƒΠΆΠ΅ писалось ValueFromPipelineByPropertyName ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ Π² случаС с ΠΈΠΌΠ΅Π½Π΅ΠΌ «bad» ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

  • НС удаСтся ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Π²ΠΎΠ΄Π° ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°
  • The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Ρ…ΡΡˆ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· pscustomobject.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ сразу Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


[parameter(ValueFromPipelineByPropertyName,ValueFromPipeline)]

Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ссли ΠΎΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π»ΠΈΠ±ΠΎ Π±Π΅Π· Π½Π΅Π³ΠΎ. Π­Ρ‚ΠΎ Π½Π΅ спасСт вас ΠΎΡ‚ ситуации, Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ:

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ windows powershell

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Π³Π΄Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π΄Π²Π° значСния. Если Get-SomeNum Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ массив, Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ число ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ²ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:


function Get-SomeNum { 
    $number1 = Get-Random -Minimum 5 -Maximum 10
    $number2 = Get-Random -Minimum 1 -Maximum 5
    $object = [pscustomobject]@{num1=$number1;num2=$number2}
    return $object
}

function Plus-SomeNum {
    [cmdletbinding()]
    Param (
            [parameter(ValueFromPipelineByPropertyName=$true,
                        ValueFromPipeline=$true,
                        Mandatory=$true)]
            [int]
            $num1,
            [parameter(ValueFromPipelineByPropertyName=$true,
                        ValueFromPipeline=$true,
                        Mandatory=$true)]
            [int]
            $num2
        )
    begin {$num1 += $num1
           $num2 = $num2 * $num2}
    process {  
    return @{"Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ слоТСния"=$num1; "Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ умноТСния"=$num2}
    }
}

Get-SomeNum | Plus-SomeNum

powershell Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Β 

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ справки Π½Π° любой ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

powershell Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ относится ΠΊ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ дСйствиям. Π§Ρ‚ΠΎ Π±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ послС объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ. Π― Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ» этот Π±Π»ΠΎΠΊ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:


function Get-SomeNum { 
  <#
  .SYNOPSIS
  (ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ описаниС) ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ случайного числа
  .DESCRIPTION
  (ΠΏΠΎΠ»Π½ΠΎΠ΅ описаниС) ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ случайного числа ΠΎΡ‚ 1 Π΄ΠΎ 3
  .EXAMPLE
  (ΠΏΡ€ΠΈΠΌΠ΅Ρ€) Get-Random
  .EXAMPLE
  (Π²Ρ‚ΠΎΡ€ΠΎΠΉ)
  .PARAMETER num
  (описаниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°) ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ Π½Π΅ влияСт
  .PARAMETER num2
  (описаниС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ)
  #>
    [CmdletBinding()]
    param (
           [int]
           $num
    )
    $num = Get-Random -min 1 -Max 3
    return $num
}

Get-SomeNum

powershell ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

НСкоторыС Π²ΠΈΠ΄Ρ‹ описаний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Examples, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·.

Β 

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π°Π»Π΅Π΅. Π’ зависимости ΠΎΡ‚ ситуации ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π½Π° мноТСство ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ²

Если это ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° мноТСствС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π²Ρ‹ Π΅Π³ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ врСмя, Ρ‚ΠΎ скрипт ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ «.ps1». Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ:


Import-Module C:\funct.ps1 -Force

ПослС выполнСния этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΡ‹ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ΠœΠΈΠ½ΡƒΡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ способа Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· послС закрытия консоли (сСссии).

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… сцСнариях, ΠΊΠΎΠ³Π΄Π° Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΊΠ°ΠΊ модуля

Если Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, Π½ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ это ΠΏΠ»ΠΎΡ…ΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ окруТСния Powershell:


$env:PSModulePath

Π’Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡƒΡ‚Π΅ΠΉ, Π³Π΄Π΅ Π»Π΅ΠΆΠ°Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:


C:\Users\%username%\Documents\WindowsPowerShell\Modules

Π’ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Modules Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ Ρ„Π°ΠΉΠ» с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π€Π°ΠΉΠ»Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚Π΅Β Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ «.psm1» ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π² Π½Π΅Π³ΠΎ свой скрипт.

Π’ ΠΌΠΎΡ‘ΠΌ случаС ΠΏΡƒΡ‚ΡŒ выглядит Ρ‚Π°ΠΊ:


C:\Users\%username%\Documents\WindowsPowerShell\Modules\Test\Test.psm1

ПослС этого Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС ΠΎΠΊΠ½Π° Powershell ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π·Π°Π½ΠΎΠ²ΠΎ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ автоматичСски. ΠŸΡ€ΠΎΠ²Π΅Ρ€Ρ‚ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:


Get-Module -ListAvailable -Name "*Π§Π°ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ*"

Β 

Π’Π΅Π³ΠΈ: #powershell

Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PowerShell

БущСствуСт довольно ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ. Π•ΡΡ‚ΡŒ Windows Management Instrumentation (WMI), ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² VBScript. Π•ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Ρ‚ΠΈΠΏΠ° PSExec ΠΎΡ‚ Β Sysinternals. Π”Π°ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ PowerShell ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ComputerName для выполнСния Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ….

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

PowerShell Remoting Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΒ ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Он основан Π½Π° Microsoft Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Β Web Services for Management (WS-Management), Π° для связи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ слуТбу  Windows Remote Management (WinRM). Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ осущСствляСтся ΠΏΠΎ HTTPΒ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈΠ»ΠΈ HTTPS.Β Π’Π΅ΡΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ ΡˆΠΈΡ„Ρ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ SSL).Β ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡΒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ NTLM ΠΈ Kerberos.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ интСрфСйсы, PS Remoting Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ Ρ‚Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ пСрСдаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ локально, Π½Π΅Ρ‚ нСобходимости заботится ΠΎ совмСстимости. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ PS RemotingΒ Π½ΡƒΠΆΠ΅Π½ всСго ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ Π½Π° брандмауэрС.

Π•ΡΡ‚ΡŒ нСсколько способов управлСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PowerShell Remoting.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒΒ»

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ управлСния β€” ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ сСссию ΠΈ Π² Π½Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ дСйствия. НапримСр, ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ сСссию Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ SRV4 ΠΈ рСстартуСм Π½Π° Π½Π΅ΠΌ сСрвис ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ:

Enter-PSSession -ComputerName SRV4
Restart-Service -Name spooler

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ состояниС сСрвиса ΠΈ Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ сСссию:

Get-ServiceΒ -Name spooler
Exit-PSSession

интСрактивная сСссия Π² PowerShell

Β 

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ нСслоТных Π·Π°Π΄Π°Ρ‡ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ администрирования. Если ΠΆΠ΅ Π½Π°Π΄ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠΌ Invoke-Command. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС дСйствиС:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName SRV4

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ сСссию Π½Π° SRV4, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π±Π»ΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ -ScriptBlock, ΠΈ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ сСссию. А Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -AsJob.

Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅

Β 

CΠ»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Β Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ PowerShell Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Для Π΅Π³ΠΎ получСния придСтся Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠΌ Receive-Job.

Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅

Β 

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅Β ΠΏΠ°Ρ€Ρƒ-Ρ‚Ρ€ΠΎΠΉΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄, Π° ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ скрипт, ΡƒΒ Invoke-Command Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ –FilePath, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто –ScriptBlock для опрСдСлСния Ρ„Π°ΠΉΠ»Π° сцСнария. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я создал скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список остановлСнных слуТб ΠΈ запустил Π΅Π³ΠΎ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ машинС SRV4:

Invoke-Command -FilePath .\script.ps1 -ComputerName SRV4

запуск скрипта PowerShell Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ»

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. Π­Ρ‚ΠΎ довольно Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Invoke-Command. НапримСр, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ просто ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName SRV4,SRV5

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

$servers = @(β€³SRV1β€³,β€³SRV2β€³,β€³SRV3β€³)
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName $servers

Или Π²Π·ΡΡ‚ΡŒ ΠΈΠ·Β Ρ„Π°ΠΉΠ»Π°:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName`
(Get-Content .\servers.txt)

ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…

Β 

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:Β Ρƒ Invoke-Command Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ThrottleLimit,Β ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ максимальноС количСство ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠŸΠΎΒ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°Π²Π΅Π½ 32.Β ΠŸΡ€ΠΈ нСобходимости Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π½ΠΎ ΡƒΡ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΒ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Β ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ на процСссор ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, поэтому эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΒ Ρ большой ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ.

БСссии

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Invoke-Command создаСтся новая сСссия, Π½Π° созданиС которой тратится врСмя ΠΈ рСсурсы. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ сСссию, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. НапримСр, ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ сСссию с ΠΈΠΌΠ΅Π½Π΅ΠΌ SRV4Β Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ SRV4 ΠΈ помСстим Π΅Π΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $session, Π° Π·Π°Ρ‚Π΅ΠΌ этой сСссии Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π½Π°ΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ (остановим ΠΌΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€Π°Π΄Π°Π»ΡŒΠ½Ρ‹ΠΉ spooler):

$session = New-PSSession -ComputerName SRV4 -Name SRV4
Invoke-Command -ScriptBlock {Get-Service spooler | Stop-Service}`
-Session $session

БСссия Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Π° Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΠΊΠ° ΠΌΡ‹Β  Π½Π΅Β Π²Ρ‹ΠΉΠ΄Π΅ΠΌ ΠΈΠ· консоли PowerShell. ВакТС сСссию ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒΒ β€” Disconnect-PSSession ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΒ β€” Remove-PSSession.

ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ сСссии Π² PowerShell

Β 

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ нСсколько интСрСсных возмоТностСй, ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π² PowerShell 3.0. Если Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· сСссии ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ консоли сСссия ΡƒΠ΄Π°Π»ΡΠ»Π°ΡΡŒ, Ρ‚ΠΎΒ Π² PS 3.0 ΠΏΡ€ΠΈ закрытии сСссия ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС disconnected. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ сСанс Π½Π° этом ΠΆΠ΅ (ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ) ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈΒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ прямо Π² этой ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ сСссии. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° стартуСм Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ SRV4 сСрвис ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, остановлСнный Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·:

Invoke-Command -ScriptBlock {Start-Service spooler}`
-ComputerName SRV4 -Disconnected

Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ€Π°Π·ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠΉ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ сСссии

Β 

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… сСссий β€” запуск Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ Π·Π°Π΄Π°Ρ‡. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ сСссию c ΠΈΠΌΠ΅Π½Π΅ΠΌ LongJob Π½Π° SRV4 ΠΈ запустим Π² Π½Π΅ΠΉ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ список сСрвисов с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ Π² 1 ΠΌΠΈΠ½ΡƒΡ‚Ρƒ:

$session = New-PSSession -ComputerName SRV4 -Name LongJob
Invoke-Command -Session $session -ScriptBlock`
{Get-Service | foreach {$_;sleep 60} } -AsJob

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ выполняСтся Π·Π°Π΄Π°Ρ‡Π° ΠΈ Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ сСссию:

Receive-Job -Name Job2
Disconnect-PSSession $session

запуск задания Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ сСссии

Β 

ИдСм Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ консоль, ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ сСссии LongJob ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Receive-PSSessionΒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния задания:

Connect-PSSession -Name LongJob -ComputerName SRV4
Receive-PSSession -Name LongJob

ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ сСссии

Β 

Или Π΅Ρ‰Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π±Π΅Π· явного ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСссии с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Connect-PSSession:

$session = Get-PSSession -Name LongJob -ComputerName SRV4Β Β 
$job = Receive-PSSession $session -OutTarget Job
Receive-Job $job

ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ сСссии Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Β 

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ остался Π² систСмС, Receive-Job Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -Keep.

НСявноС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½, довольно нСстандартный способ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ управлСния β€” нСявноС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ (Implicit remoting). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ создавая ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ сСссии, локально Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹, находящиСся Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Β Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΡΡ‚Π°Π½Ρ†ΠΈΡŽ, Π±Π΅Π· установлСнных срСдств ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ администрирования. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ сСссию с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π° SRV4 ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π² эту сСссию ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Active Directory:

$session = New-PSSession -ComputerName SRV4
Invoke-Command {Import-Module ActiveDirectory} -Session $session

Π—Π°Ρ‚Π΅ΠΌ экспортируСм ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ сСссии ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ Active Directory ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΈΡ… Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ RemoteAD:

Export-PSSession -Session $session -CommandName *-AD* -OutputModule RemoteAD`
-AllowClobber

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° создаст Π² ΠΏΠ°ΠΏΠΊΠ΅ WindowsPowerShell\Modules\RemoteADΒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ PowerShell. Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚Β Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ *-AD*. ΠŸΡ€ΠΈ этом сами командлСты Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ слуТит своСго Ρ€ΠΎΠ΄Π° ярлыком, а сами ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π΄ΠΎΠΌΠ΅Π½Π°.

ПослС создания модуля ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ сСссию ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ, ΠΎΠ½Π° большС Π½Π΅ понадобится.

ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ модуля PowerShell

Β 

Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сСанс (Π² PS 3.0 ΠΌΠΎΠΆΠ½ΠΎ этот шаг ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ):

Import-Module RemoteAD

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ β€” ΠΌΡ‹ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ сСссию с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π°, Π³Π΄Π΅ располоТСны ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹. НС Π½ΡƒΠΆΠ½ΠΎ явно Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ этот сСанс β€” это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСявно, ΠΏΠΎΠΏΡ‹Ρ‚Π°Π²ΡˆΠΈΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹:

New-ADUser -Name BillGates -Company Microsoft
Get-ADUser BillGates

ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ восстановлСно ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Π΄ΠΎΠΌΠ΅Π½Π°, послС Ρ‡Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π°Β Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ Ρ‚Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π±ΡƒΠ΄Π΅Ρ‚ сСриализован Π² XML ΠΈΒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΏΠΎ сСти Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Π³Π΄Π΅Β Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° дСсСриализация Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ PowerShell.

Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ сСанс Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ консоль ΠΈΠ»ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ RemoteAD.

нСявноС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² PowerShell

Β 

НСявноС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅Β ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚Β Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°ΠΌΠΈ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ практичСски Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈΒ Π±Ρ‹Π»ΠΈ установлСны Π½Π° локальной машинС.Β ΠŸΡ€ΠΈ этом всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ всСгда ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎΒ Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ скаТу, Ρ‡Ρ‚ΠΎΒ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚Β PowerShell Remoting являСтся основным инструмСнтом для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ управлСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами Windows. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π½Π°Ρ‚ΡŒ ΠΎ Π΅Π³ΠΎ возмоТностях ΠΈ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ Windows-администратору.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *