Π Π°Π·Π½ΠΎΠ΅

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ powershell: PowerShell — ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ | powershell Tutorial

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

Как Π²Ρ‹ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ Π² PowerShell?

Как Π²Ρ‹ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ Π² PowerShell (1.0 ΠΈΠ»ΠΈ 2.0)?

835

Π°Π²Ρ‚ΠΎΡ€: Peter Mortensen

7 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²


Π² PowerShell V1 Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ # Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ тСкст послС Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ.

# This is a comment in Powershell

Π’ PowerShell V2 <# #> ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π±Π»ΠΎΠΊΠ° ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² справки.

#REQUIRES -Version 2.0

<#
.SYNOPSIS
    A brief description of the function or script. This keyword can be used
    only once in each topic.
.DESCRIPTION
    A detailed description of the function or script. This keyword can be
    used only once in each topic.
.NOTES
    File Name      : xxxx.ps1
    Author         : J.P. Blanc ([email protected])
    Prerequisite   : PowerShell V2 over Vista and upper.
    Copyright 2011 - Jean Paul Blanc/Silogix
.LINK
    Script posted over:
    http://silogix.fr
.EXAMPLE
    Example 1
.EXAMPLE
    Example 2
#>
Function blabla
{}

Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС .SYNOPSIS ΠΈ .* ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ about_comment_based_help.

ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: эти ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Get-Help ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ поставлСн ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Function ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ {} Π΄ΠΎ ΠΈΠ»ΠΈ послС самого ΠΊΠΎΠ΄Π°.


94

Π°Π²Ρ‚ΠΎΡ€: adamleerich



однострочныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Ρ…ΡΡˆ-символ, всС справа ΠΎΡ‚ # Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½:

# Comment Here

Π² PowerShell 2.0 ΠΈ Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ многострочныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π±Π»ΠΎΠΊΠΎΠ²:

<# 
  Multi 
  Line 
#> 

Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² для вставки тСкста коммСнтария Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Get-Content -Path <# configuration file #> C:\config.ini

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ PowerShell ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ остороТны с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ вставкой Space + TAB ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.


здСсь

# Single line comment in Powershell

<# 
--------------------------------------
Multi-line comment in PowerShell V2+ 
-------------------------------------- 
#>

Π² PowerShell ISE Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ Ctrl+J ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΠ°Ρ‡Π°Ρ‚ΡŒ ΠžΡ‚ΡΠ΅ΠΊΠ°Ρ‚ΡŒ menΓΌ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π±Π»ΠΎΠΊ:

8

Π°Π²Ρ‚ΠΎΡ€: Martin Brandl


Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

 (Some basic code) # Use "#" after a line and use:

 <#
    for more lines
    ...
    ...
    ...
    ..
    .
 #>

3

Π°Π²Ρ‚ΠΎΡ€: Mister X CT


PowerShell. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ / Π₯Π°Π±Ρ€

ΠŸΡ€ΠΈΠ²Π΅Ρ‚! Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ написанными функциями ΠΈ Ρ‚Π°ΡΠΊΠ°Ρ‚ΡŒ куски ΠΊΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ скриптами. На Π₯Π°Π±Ρ€Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ довольно Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° ΠΎΡ‚ Mroff, Π½ΠΎ Π±Ρ‹Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠΉΡ‚ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ дальшС, Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ свои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как оказалось, поиск Π²Ρ‹Π΄Π°Π²Π°Π» довольно ΡΡƒΡ…ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² основном ΠΏΠΎ ΠΎΠ±Ρ‰Π΅ΠΉ структурС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ. Упорство Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΎ, ΠΈ я Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚, Π³Π΄Π΅ ΠΌΡ‹ научимся Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π² свои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΈ ΠΊΠΎΠ»Π»Π΅Π³.

Π”Π°Π²Π°ΠΉΡ‚Π΅ для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ структуру Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² PowerShell. Выглядит ΠΎΠ½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

Function TestPath ([String]$Path)
        {
                Return(Test-Path $Path)
        }

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного, ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Π·Π°Π΄Π°Π»ΠΈ имя TestPath, Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ скормили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $Path, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия ΠΈ ΠΏΡ€ΠΈ нСобходимости Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Return() Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. А ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколькими ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ? Π’Ρ‹Ρ…ΠΎΠ΄ΠΎΠ² всСгда большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ – постоянно Π΄Π°Π²Π°Ρ‚ΡŒ мнСмоничСскиС ΠΊΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ описаниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ это дСлаСтся:

Function TestPath
        {
                PARAM (
                [PARAMETER(Mandatory=$True,Position=0,HelpMessage = "ΠŸΡƒΡ‚ΡŒ Π΄ΠΎ провСряСмого рСсурса",ParameterSetName='Path')]$Path
                )
                Return(Test-Path $Path)
        }

БлоТности Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π΅Ρ‚, Π½ΠΎ появились Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Тизнь:

Mandatory – ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° значСния True ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ для заполнСния ΠΈ False Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ;

HelpMessage – Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;

ParameterSetName – Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ относятся Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹;

Position – ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

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

((Get-Command TestPath).ParameterSets.Parameters | Where-Object Name -eq Path).HelpMessage

PowerShell ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ Π½Π°ΠΌ ΠΎΠ΄Π½ΠΎΠΉ строкой Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ написано: ΠŸΡƒΡ‚ΡŒ Π΄ΠΎ провСряСмого рСсурса.

Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ стСпСни ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Ссли ΠΌΡ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с PowerShell, Ρ‚ΠΎ Π·Π½Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Get-Help которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π΅Π΅ использования ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ.

НСмного услоТним Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ информация ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎ запросу Get-Help Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ объСмС:

Function WriteToLog {
    <#
    .SYNOPSIS
        Π’Ρ‹Π²ΠΎΠ΄ сообщСния Π² консоль ΠΈ Π² Ρ„Π°ΠΉΠ» Π»ΠΎΠ³Π°.
    .DESCRIPTION
        Данная функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ строку Π² Π»ΠΎΠ³ Ρ„Π°ΠΉΠ» ΠΈ Π² консоль PowerShell
    .EXAMPLE
        #WriteToLog -Str "Π”Π°Π½Π½ΠΎΠ΅ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² консоль красным Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈ Π² Ρ„Π°ΠΉΠ» C:\Log\log.txt" -FileName 'C:\Log\log.txt' -Color Red
    .EXAMPLE
        #WriteToLog -Str "Π”Π°Π½Π½ΠΎΠ΅ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² консоль Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (White) ΠΈ Π² Ρ„Π°ΠΉΠ» C:\Log\log.txt" -FileName 'C:\Log\log.txt'
    .PARAMETER Str
        Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ вывСсти (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€)
    .PARAMETER FileName
        Имя Ρ„Π°ΠΉΠ»Π° Π»ΠΎΠ³Π° (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€)
    .PARAMETER Color
        Π¦Π²Π΅Ρ‚ тСкста сообщСния Π² консоли PowerShell (По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ†Π²Π΅Ρ‚ тСкста Π±Π΅Π»Ρ‹ΠΉ (White))
    #>
    param (
        [PARAMETER(Mandatory=$True,Position=0)][String]$Str,
        [PARAMETER(Mandatory=$True,Position=1)][String]$FileName,
        [PARAMETER(Mandatory=$False,Position=2)][String]$Color='White'
        )
        Write-Host $Str -ForegroundColor $Color
        If ((Test-Path $FileName) -eq $True)
            {
                Add-Content -Path $FileName -Value $Str
            }
        Else
            {
                Set-Content -Path $FileName -Value $Str
            }
    }

ПослС выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Get-Help ‘WriteToLog’ -ShowWindow Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ.
Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ написали:

<##> – Π’ Π΄Π°Π½Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ написаны ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для справки PowerShell.

.SYNOPSIS – Π±Π»ΠΎΠΊ для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

.DESCRIPTION – Π±Π»ΠΎΠΊ для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

.EXAMPLE – Π±Π»ΠΎΠΊ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько

.PARAMETR Имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° – Π±Π»ΠΎΠΊ для описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ свой Π±Π»ΠΎΠΊ.

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ тСкстовый ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ начинаСтся со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ названия Ρ€Π°Π·Π΄Π΅Π»Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ многострочным. ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ΠΌ коммСнтария считаСтся Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³ #> ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ.

param () – Π±Π»ΠΎΠΊ для описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΈΡ… порядок ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $Color ΠΌΡ‹ присвоили Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ’White’.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ ΠΈ Π²Π°ΠΌ Π½Π΅ придСтся Π²ΡΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π° Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π° ΠΈΠ»ΠΈ иная пСрСмСнная.

Бпасибо Ρ‡Ρ‚ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°.

Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, собствСнныС классы / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ RUVDS.com / Π₯Π°Π±Ρ€

ВСкстовый Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΎΠΊΠ½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° PowerShell β€” всСго лишь способ отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠΌ для чСловСчСского восприятия Π²ΠΈΠ΄Π΅. На самом Π΄Π΅Π»Π΅ срСда ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ: ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΡ… Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅, Π° доступныС Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π² сцСнариях Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° классах .NET. Π’ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ.

ОглавлСниС:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² PowerShell
ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΡ… частСй
ForEach-Object, Group-Object ΠΈ Measure-Object
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² .NET ΠΈ COM (New-Object)
Π’Ρ‹Π·ΠΎΠ² статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
Π’ΠΈΠΏ PSCustomObject
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнных классов

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² PowerShell

Напомним, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… (свойств, событий ΠΈ Ρ‚.Π΄.) ΠΈ способов ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²). Π•Π³ΠΎ структура задаСтся Ρ‚ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ базируСтся Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π² ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET Core классах. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ COM, CIM (WMI) ΠΈ ADSI. Бвойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дСйствий Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π² PowerShell ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΈΠ»ΠΈ pipeline). КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ свой Π²Ρ‹Π²ΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ скомпилированныС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ манипуляции с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅: Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ, сортировку, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΡ… структуры. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ прСимущСство: ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ синтаксичСским Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π±Π°ΠΉΡ‚ΠΎΠ² (тСкста), вся нуТная информация Π»Π΅Π³ΠΊΠΎ извлСкаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ обращСния ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° запустим ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Get-Process, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² систСмС процСссах:

Он Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран Π½Π΅ΠΊΠΈΠ΅ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ тСкстовыС Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ Π΄Π°ΡŽΡ‰ΠΈΠ΅ прСдставлСния ΠΎ свойствах Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…. Для Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ прСпарирования Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π² этом Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Get-Member:

Get-Process | Get-Member

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΈΠΏ ΠΈ структуру, Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вывСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свойства попавшСго Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

Get-Process | Get-Member -MemberType Property

Π­Ρ‚ΠΈ знания понадобятся для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ администрирования Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ»ΠΈ для написания собствСнных скриптов: скаТСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свСдСния ΠΎ Π·Π°Π²ΠΈΡΡˆΠΈΡ… процСссах ΠΏΠΎ свойству Responding.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

PowerShell позволяСт ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ:

Where-Object { Π±Π»ΠΎΠΊ сцСнария }

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния Π±Π»ΠΎΠΊΠ° сцСнария Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… скобках Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ логичСскиС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΎΠ½ΠΎ истинно ($true) попавший Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρƒ Where-Object ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ дальшС, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $false) ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ список остановлСнных слуТб Windows Server, Ρ‚.Π΅. Ρ‚Π°ΠΊΠΈΡ…, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свойство Status ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«StoppedΒ»:

Get-Service | Where-Object {$_.Status -eq "Stopped"}

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ снова Π²ΠΈΠ΄ΠΈΠΌ тСкстовоС прСдставлСниС, Π½ΠΎ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство проходящих Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ:

Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΡ€ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΡ… сортировки. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Sort-Object ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° свойств (ΠΊΠ»ΡŽΡ‡Π΅ΠΉ сортировки), Π° ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ упорядочСнныС ΠΏΠΎ ΠΈΡ… значСниям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’Ρ‹Π²ΠΎΠ΄ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… процСссов нСслоТно ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ процСссорному Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (свойство cpu):

Get-Process | Sort-Object –Property cpu

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -Property ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Sort-Object ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ β€” ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ сортировки примСняСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -Descending:

Get-Process | Sort-Object cpu -Descending

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΡ… частСй

ΠšΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Select-Object позволяСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² -First ΠΈΠ»ΠΈ -Last. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ свойства, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° ΠΈΡ… основС Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Π½Π° простых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ 10 процСссах, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΡ… ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ объСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти (свойство WS):

Get-Process | Sort-Object WS -Descending | Select-Object -First 10

МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ свойства проходящих Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° ΠΈΡ… основС Π½ΠΎΠ²Ρ‹Π΅:

Get-Process | Select-Object ProcessName, Id -First 1

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, структура ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ структуры Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠΌ Get-Process. УбСдимся Π² этом ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Get-Member:

Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Select-Object Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (-First 1), Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всСго Π΄Π²Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΌΠΈ поля: ΠΈΡ… значСния Π±Ρ‹Π»ΠΈ скопированы ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠΌ Get-Process ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. На использовании Select-Object основан ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² сцСнариях PowerShell:

$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Select-Object ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ вычисляСмыС свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠŸΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° соотвСтствуСт ΠΈΠΌΠ΅Π½ΠΈ свойства, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ свойства для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° структуру проходящих Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member

ForEach-Object, Group-Object ΠΈ Measure-Object

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° расскаТСм ΠΎ Ρ‚Ρ€Π΅Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ…:

ForEach-Object позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° языкС PowerShell для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅:

ForEach-Object { Π±Π»ΠΎΠΊ сцСнария }

Group-Object Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ свойства:

Group-Object PropertyName

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -NoElement, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство элСмСнтов Π² Π³Ρ€ΡƒΠΏΠΏΠ°Ρ….

Measure-Object Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сводныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ значСниям ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π΅ (вычисляСт сумму, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ минимальноС, максимальноС ΠΈΠ»ΠΈ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅):

Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ рассмотрСнныС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π° Π² скриптах Ρ‡Π°Ρ‰Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Begin, Process ΠΈ End.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² .NET ΠΈ COM (New-Object)

Π•ΡΡ‚ΡŒ мноТСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² с интСрфСйсами .NET Core ΠΈ COM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пригодятся систСмным администраторам. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса System.Diagnostics.EventLog ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ систСмными ΠΆΡƒΡ€Π½Π°Π»Π°ΠΌΠΈ нСпосрСдствСнно ΠΈΠ· Windows PowerShell. Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания экзСмпляра этого класса ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° New-Object с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -TypeName:

New-Object -TypeName System.Diagnostics.EventLog

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» событий, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ экзСмпляр класса Π½Π΅ содСрТит Π΄Π°Π½Π½Ρ‹Ρ…. Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎ врСмя Π΅Π³ΠΎ создания Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄-конструктор ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° -ArgumentList. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΆΡƒΡ€Π½Π°Π»Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² конструктор слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ строку Β«ApplicationΒ» Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΡ‹ сохранили Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $AppLog. Π₯отя Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹, написаниС сцСнариСв часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сохранСния ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ основныС классы .NET Core содСрТатся Π² пространствС ΠΈΠΌΠ΅Π½ System: PowerShell ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡ‰Π΅Ρ‚ Π² Π½Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, поэтому написаниС Diagnostics.EventLog вмСсто System.Diagnostics.EventLog Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΆΡƒΡ€Π½Π°Π»ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ:

$AppLog | Get-Member -MemberType Method

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ очищаСтся ΠΎΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Clear() ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€Π°Π² доступа:

$AppLog.Clear()

ΠšΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ New-Object примСняСтся ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с БОМ-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π˜Ρ… довольно ΠΌΠ½ΠΎΠ³ΠΎ β€” ΠΎΡ‚ поставляСмых с сСрвСром сцСнариСв Windows Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π΄ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ActiveX, Ρ‚Π°ΠΊΠΈΡ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Internet Explorer. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ БОМ-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, трСбуСтся Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -ComObject с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ProgId Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ класса:

New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject

Для создания собствСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ структурой использованиС New-Object выглядит слишком Π°Ρ€Ρ…Π°ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ, этот ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с внСшними ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ PowerShell ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… этот вопрос Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Помимо ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² .NET ΠΈ COM ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ CIM (WMI) ΠΈ ADSI.

Π’Ρ‹Π·ΠΎΠ² статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

ЭкзСмпляры Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… классов .NET Core ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ: ΠΊ ΠΈΡ… числу относятся System.Environment ΠΈ System.Math. Они ΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСскими ΠΈ содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статичСскиС свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. По сути это справочныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π±Π΅Π· создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘ΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° статичСский класс ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π»ΠΈΡ‚Π΅Ρ€Π°Π», Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ² имя Ρ‚ΠΈΠΏΠ° Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки. ΠŸΡ€ΠΈ этом Ссли ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Get-Member, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΈΠΏ System.RuntimeType вмСсто System.Environment:

[System.Environment] | Get-Member

Для просмотра Ρ‚ΠΎΠ»ΡŒΠΊΠΎ статичСских элСмСнтов Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Get-Member с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -Static (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°):

[System.Environment] | Get-Member -Static

Для доступа ΠΊ статичСским свойствам ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° ΠΈΠ΄ΡƒΡ‰ΠΈΡ… подряд двоСточия вмСсто Ρ‚ΠΎΡ‡ΠΊΠΈ послС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°:

[System.Environment]::OSVersion

Или

$test=[System.Math]::Sqrt(25) 
$test
$test.GetType()

Π’ΠΈΠΏ PSCustomObject

Π‘Ρ€Π΅Π΄ΠΈ многочислСнных доступных Π² PowerShell Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ PSCustomObject, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ структурой. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° New-Object считаСтся классичСским, Π½ΠΎ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ способом:

$object = New-Object  –TypeName PSCustomObject -Property @{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'}

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

$object | Get-Member

Начиная с PowerShell 3.0 доступСн ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ синтаксис:

$object = [PSCustomObject]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· эквивалСнтных способов:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прСобразования Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ…ΡΡˆΡ‚Π°Π±Π»ΠΈΡ†Ρ‹:

$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()

Один ΠΈΠ· нСдостатков ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого Ρ‚ΠΈΠΏΠ° β€” порядок ΠΈΡ… свойств ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ [ordered]:

$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ рассмотрСли использованиС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Select-Object. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ элСмСнтов. Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° довольно просто:

$object | Add-Member –MemberType NoteProperty –Name Age  –Value 33
$object | Get-Member

ΠšΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Add-Member позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π½Π΅Π΅ созданному ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ $object Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свойства, Π½ΠΎ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ посрСдством использования конструкции «-MemberType ScriptMethod»:

$ScriptBlock = {
    # ΠΊΠΎΠ΄ 
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: для хранСния ΠΊΠΎΠ΄Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΡ‹ использовали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $ScriptBlock Ρ‚ΠΈΠΏΠ° ScriptBlock.

Для удалСния свойств ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

$object.psobject.properties.remove('Name')

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнных классов

Π’ PowerShell 5.0 появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния классов с использованиСм Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования синтаксиса. Для этого ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ слуТСбноС слово Class, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π·Π°Π΄Π°Ρ‚ΡŒ имя класса ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚Π΅Π»ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… скобках:

class MyClass
{
    # Ρ‚Π΅Π»ΠΎ класса
}

Π­Ρ‚ΠΎ настоящий Ρ‚ΠΈΠΏ .NET Core, Π² Ρ‚Π΅Π»Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΅Π³ΠΎ свойства, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ класса:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
}

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (экзСмпляра класса) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ New-Object, Π»ΠΈΠ±ΠΎ Π»ΠΈΡ‚Π΅Ρ€Π°Π» Ρ‚ΠΈΠΏΠ° [MyClass] ΠΈ псСвдостатичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ new (конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ):

$object = New-Object -TypeName MyClass

ΠΈΠ»ΠΈ

$object = [MyClass]::new()

ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

$object | Get-Member

НС стоит Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости: нСльзя ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° имя Ρ‚ΠΈΠΏΠ° Π² Π²ΠΈΠ΄Π΅ строки ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π» Ρ‚ΠΈΠΏΠ° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ скрипта ΠΈΠ»ΠΈ модуля, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ класс. ΠŸΡ€ΠΈ этом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ экзСмпляры класса (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ доступны Π²Π½Π΅ модуля ΠΈΠ»ΠΈ скрипта.

ПослС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Π³ΠΎ свойства:

$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² описании класса Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΡ‹ свойств, Π½ΠΎ ΠΈ ΠΈΡ… значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

class Example
{
     [string]$Name = 'John Doe'
}

ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π±Π΅Π· использования слуТСбного слова function. Как ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ нСобходимости ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
     
     #описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
     Smile([bool]$param1)
     {
         If($param1) {
            Write-Host ':)'
         }
     }
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ нашСго класса ΡƒΠΌΠ΅Π΅Ρ‚ ΡƒΠ»Ρ‹Π±Π°Ρ‚ΡŒΡΡ:

$object = [MyClass]::new()
$object.Smile($true)

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Ρƒ класса Π±Ρ‹Π²Π°ΡŽΡ‚ статичСскиС свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ конструкторы, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ самого класса. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² скриптС ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ PowerShell класс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ β€” Ρ‚Π°ΠΊ рСализуСтся наслСдованиС. ΠŸΡ€ΠΈ этом Π² качСствС Π±Π°Π·ΠΎΠ²Ρ‹Ρ… допускаСтся использованиС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… классов .NET:

class MyClass2 : MyClass
{
      #Ρ‚Π΅Π»ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ класса, Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся MyClass
}
[MyClass2]::new().Smile($true)

НашС описаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² PowerShell Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅ΠΌ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… публикациях ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ Π½Π° практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…: пятая ΡΡ‚Π°Ρ‚ΡŒΡ Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ посвящСна вопросам ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ PowerShell со сторонними ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. ΠŸΡ€ΠΎΡˆΠ»Ρ‹Π΅ части ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкам Π½ΠΈΠΆΠ΅.


Π§Π°ΡΡ‚ΡŒ 1: основныС возмоТности Windows PowerShell
Π§Π°ΡΡ‚ΡŒ 2: Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² язык программирования Windows PowerShell
Π§Π°ΡΡ‚ΡŒ 3: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² скрипты ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, созданиС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ²

Доступ ΠΊ внСшним ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ / Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ RUVDS.com / Π₯Π°Π±Ρ€

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Windows ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ инфраструктуры. Для доступа ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйсы ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ программирования (API), Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ всСгда ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π°. Π’ PowerShell ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ .NET, COM, WMI (CIM) ΠΈ ADSI Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π’ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ части Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ основы с ΡƒΠΏΠΎΡ€ΠΎΠΌ Π½Π° классы .NET Core, Π° сСйчас Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌΡƒ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ особСнности взаимодСйствия PowerShell с внСшними ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ОглавлСниС:

Π Π°Π±ΠΎΡ‚Π° с JSON, XML ΠΈ CSV
Π Π°Π±ΠΎΡ‚Π° с WMI ΠΈ CIM
Π Π°Π±ΠΎΡ‚Π° с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ
Π Π°Π±ΠΎΡ‚Π° со слуТбой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ADSI
Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π°

Π Π°Π±ΠΎΡ‚Π° с JSON, XML ΠΈ CSV

Π’ сцСнариях PowerShell довольно часто приходится Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… JSON, XML ΠΈ CSV. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ такая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-сСрвисами ΠΈΠ»ΠΈ с ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. НСкоторыС администраторы ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΠΈΠ΄Ρ‚ΠΈ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅Ρ€Ρ‚Π²Ρ‹ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ: Π² PowerShell Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΡ‚ΠΎΠΌ Π² ΠΎΠ±Π΅ стороны.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ JSON позволяСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΠΎ сути прСдставляСт собой Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΡƒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. БоотвСтствСнно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ .NET ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ PowerShell нСслоТно. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-сСрвисы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚Π΄Π°ΡŽΡ‚ вмСсто красиво ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ строку, это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ для описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON ΠΌΡ‹ использовали ΠΌΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΡƒΡŽ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

$user = @"
{
   "firstName": "Ivan",
   "lastName": "Danko",
   "address": {
       "streetAddress": "Kremlin",
       "city": "Moscow"
   },
   "phoneNumbers": [
       "+7 495 1234567",
       "+7 499 1234567"
   ]
}
"@ | ConvertFrom-Json

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ сходным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$file = Get-ChildItem C:\Windows\System32\notepad.exe
$file.VersionInfo | ConvertTo-Json

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ строку Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎ сСти. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΈΠΉ RESTful сСрвис. Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°ΠΌΠΈ ConvertFrom-Csv, ConvertTo-Csv ΠΈ ConvertTo-Xml строится ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ читатСлям ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с XML ΠΈ CSV Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти инструмСнты Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сохраняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ свойств, Π½ΠΎ Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, XML ΠΈΠ»ΠΈ CSV Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ .NET с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PowerShell Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ΠΈ Π²Π°Π»ΠΈΠ΄Π½Ρ‹.

Π Π°Π±ΠΎΡ‚Π° с WMI ΠΈ CIM

Windows Management Instrumentation (WMI) β€” это разработанная Π² Microsoft ΠΈ адаптированная ΠΏΠΎΠ΄ Windows рСализация стандарта WBEM (Web-Based Enterprise Management). Π’ Π΅Π³ΠΎ основС Π»Π΅ΠΆΠΈΡ‚ идСя создания ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° распрСдСлСнной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ срСды прСдприятия ΠΈ управлСния Π΅Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… WBEM Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ основана Π½Π° Common Information Model (CIM), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° WMI Π² Windows ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π°, Microsoft Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для управлСния инфраструктурой сходный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ CIM. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΈΠΌΠΈ Π² PowerShell 3.0 появились ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ для WMI. Если Π² ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с WMI, Π΅Π³ΠΎ ΠΏΠΎ возмоТности стоит ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΌΠΎΠ΄Π΅Π»ΠΈ CIM (ΠΎΠ½Π° ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² WMI) Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы прСдставлСны Π² Π²ΠΈΠ΄Π΅ классов со свойствами ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. ΠšΠ»Π°ΡΡΡ‹ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² иСрархичСски упорядочСнныС ΠΈ логичСски связанныС ΠΏΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈΠ»ΠΈ области управлСния пространства ΠΈΠΌΠ΅Π½. БущСствуСт ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ Root, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ подпространства: CIMv2, Default, Secutiry ΠΈ WMI. Для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ экзСмпляра класса (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) ΠΈ описания состояния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ рСсурса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ свойства класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Для управлСния рСсурсом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

К экзСмпляру класса ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

[\\ComputerName\NameSpace][:ClassName][.KeyProperty1=Value1][,KeyProperty2=Value2]…]

Π³Π΄Π΅
ComputerName β€” имя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°;
NameSpace β€” пространство ΠΈΠΌΠ΅Π½;
ClassName β€” имя класса;
KeyProperty1=Value1, KeyProperty2=Value2 β€” свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ значСния, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ идСнтифицируСтся.

Π”ΠΎ появлСния PowerShell простого инструмСнта Ρ€Π°Π±ΠΎΡ‚Ρ‹ с WMI Π½Π΅ сущСствовало. Для доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ довольно слоТныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° высокоуровнСвых языках (C++, Visual Basic, Java Script) Π»ΠΈΠ±ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ WMIC (WMI Command Line, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π°) с собствСнным языком. Π§Π΅Ρ€Π΅Π· PowerShell ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ WMI доступны рядовому ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ Π² сцСнариях. Для Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ ΠΊ подсистСмС WMI ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ список доступных классов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Get-WmiObject (псСвдоним gwmi). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список классов CIM, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Get-CimClass.

Get-CimClass
Get-WmiObject -List

ΠœΡ‹ Π²Ρ‹Π²Π΅Π»ΠΈ список классов Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ:

Get-CimClass -ComputerName IP-адрСс 
Get-CimClass -ComputerName Имя_ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

ΠΈΠ»ΠΈ

Get-WmiObject -ComputerName IP-адрСс -List
Get-WmiObject -ComputerName Имя_ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° -List

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ Get-CimClass ΠΈ Get-WmiObject ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ пространству ΠΈΠΌΠ΅Π½ Root\CIMV2, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится большоС количСство классов для управлСния систСмой. Для смСны пространства ΠΈΠΌΠ΅Π½ примСняСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -Namespace:

Get-CimClass -Namespace Root
Get-WmiObject -Namespace Root -List

Зная имя класса, Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ экзСмпляры. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС экзСмпляры Win32_Service, Ρ‚.Π΅. зарСгистрированныС Π½Π° локальной машинС слуТбы:

Get-WmiObject Win32_Service

Как ΠΈ Π² случаС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², список свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² выводится ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Get-Member. К ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° WMI ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Invoke-WmiMethod. Π’Π°ΠΊΠΆΠ΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ WMI ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ для сортировки, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Ρ‚.Π΄.

Get-WmiObject Win32_Service | Get-Member

Для получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (экзСмпляров классов) CIM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Get-CimInstance. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ WMI, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ CIM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (resultant object ΠΈΠ»ΠΈ экзСмпляры класса) Π½Π΅ содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ нСпосрСдствСнно Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ Invoke-CimMethod. Рассмотрим класс Win32_Service β€” Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π² систСмС слуТбы) ΠΈ Π΅Π³ΠΎ экзСмпляр для слуТбы spooler Π½Π° локальной машинС:

Get-CimInstance Win32_service -filter "Name='spooler'" 

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° структуру Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

Get-CimInstance Win32_service -filter "Name='spooler'" | Get-Member

На этом этапС прСимущСства ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ CIM Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹. Они Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² распрСдСлСнной срСдС ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСны Π² послСднСй ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ†ΠΈΠΊΠ»Π°, посвящСнной Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ практичСских Π·Π°Π΄Π°Ρ‡ администрирования.

Π•ΡΡ‚ΡŒ ΠΈ спСцифичный для WMI инструмСнтарий: язык запросов WMI Query Language (WQL), Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ SQL. WQL-запрос для поиска всСх ΡΡ‚Π°Ρ€Ρ‚ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ запускС систСмы слуТб выглядит Ρ‚Π°ΠΊ:

select * from win32_service where startmode="Auto"

Из PowerShell ΠΎΠ½ΠΈ выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Get-WmiObject -Query 'select * from win32_service where startmode="Auto"'

Π Π°Π±ΠΎΡ‚Π° с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ

Для обСспСчСния взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями Π² Windows Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° тСхнология связывания ΠΈ внСдрСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Object Linking and Embedding ΠΈΠ»ΠΈ OLE). ПозТС появилась тСхнология OLE Automation, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прилоТСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³Π»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ β€” сСрвСров Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. OLE ΠΈ OLE Automation Π±Ρ‹Π»ΠΈ основаны Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Component Object Model (COM), которая ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ стандарт для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΈ зарСгистрированныС Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… прилоТСниях с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ с сСрСдины дСвяностых Π³ΠΎΠ΄ΠΎΠ² вмСсто OLE стал ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ β€” ActiveX. Π”ΠΎ появлСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET тСхнология ActiveX ΡΡ‡ΠΈΡ‚Π°Π»Π°ΡΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ COM Π΄ΠΎ сих ΠΏΠΎΡ€ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Windows β€” ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Microsoft ΠΈ сторонних Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ сСрвСрами Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π½ΠΈΡ… доступ ΠΊ своим сСрвисам. Для обращСния ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ProgID β€” ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ присваиваСтся ΠΈΠΌ ΠΏΡ€ΠΈ рСгистрации Π² рССстрС Windows. Он ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°_Ρ‚ΠΈΠΏΠΎΠ².Класс.ВСрсия

ВСрсия ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ указываСтся:

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°_Ρ‚ΠΈΠΏΠΎΠ².Класс

НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² доступных ProgID: InternetExplorer.Application (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Internet Explorer), Word.Application (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Microsoft Word), WScript.Shell (класс Shell ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ сСрвСра сцСнариСв Windows Script Host ΠΈΠ»ΠΈ WSH).

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рассмотрСнного Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° New-Object, Π° ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ структуру β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Get-Member:

$myshell = New-Object -ComObject WScript.Shell
$myshell | Get-Member

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ярлык, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ CreateShortcut():

$link = $myshell.CreateShortcut("$Home\Desktop\Home.lnk")

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ярлык β€” это Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ COM:

$link | Get-Member

Нам остаСтся Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ свойства ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ:

$link.TargetPath = $Home
$link.Save()

Π’Π°ΠΊΠΈΠΌ способом ΠΌΡ‹ создали ярлык Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с внСшними сСрвисами Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Shell.Application. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия Π² ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠ΅ Windows:

$myshell=New-Object -ComObject Shell.Application

ΠΈΠ»ΠΈ для краткости:

$myshell=New-Object -com Shell.Application
$myshell | Get-Member

Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Shell.Application Π΅ΡΡ‚ΡŒ довольно ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² управлСния ΠΎΠΊΠ½Π°ΠΌΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для отобраТСния содСрТимого Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Explore():

$myshell.Explore("c:\")

Бправочная систСма вызываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Help():

$myshell.Help()

Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π²Ρ‹Π·ΠΎΠ²Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½ поиска: FindFiles(), FindComputer() ΠΈ FindPrinter().

$myshell.FindFiles()
$myshell.FindComputer()
$myshell.FindPrinter()

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° FileRun(), Π° для Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΊΠ½Π° установки Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ SetTime(). Π•ΡΡ‚ΡŒ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΊΠ½Π° настройки ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡, элСмСнтов ΠΏΠ°Π½Π΅Π»ΠΈ управлСния с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· доступных Ρ„Π°ΠΉΠ»ΠΎΠ² cpl, для управлСния ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ:

$myshell.MinimizeAll()
$myshell.UndoMinimizeAll()
$myshell.TileHorizontally()
$myshell.TileVertically()

ΠœΠ΅Ρ‚ΠΎΠ΄ Windows() позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊΠ΅ ΠΈΠ»ΠΈ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Internet Explorer ΠΎΠΊΠΎΠ½. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ доступныС для этой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

$myshell.Windows() | Get-Member

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, количСство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зависит ΠΎΡ‚ установлСнного Π² систСмС ПО. Когда-Ρ‚ΠΎ основным срСдством Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Windows считался сСрвСр сцСнариСв WSH, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹: ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСтСвыми функциями WScript.Network ΠΈ ΡƒΠΆΠ΅ упомянутый Π½Π°ΠΌΠΈ WScript.Shell. ПослСдний Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаСт ярлыки Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ столС, с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΎΠΊΠ½Π° с сообщСниями ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наТатия клавиш.

Π Π°Π±ΠΎΡ‚Π° со слуТбой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ADSI

Под ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС подразумСваСтся источник ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…. Под слуТбой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ Ρ‡Π°ΡΡ‚ΡŒ распрСдСлСнной ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ систСмы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ хранящимся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΈ. Π‘Π»ΡƒΠΆΠ±Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… сСти ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΡŽ ΠΈΠΌΠΈ сСрвисов β€” ΠΎΠ½Π° прСдставляСт собой Π΅Π΄ΠΈΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° для взаимодСйствия с сСтСвыми рСсурсами. Π’ Π³Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ сСти Ρ‚Π°ΠΊΠΈΡ… слуТб ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мноТСство: Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ диспСтчСр SAM (Security Account Manager) для Π½Π΅ входящих Π² Π΄ΠΎΠΌΠ΅Π½ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Active Directory ΠΈ Ρ‚.Π΄.

Для взаимодСйствия с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ слуТбами ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ инструмСнты, Ρ‡Ρ‚ΠΎ создаСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ нСудобства. Начиная с Windows 2000 корпорация Microsoft Π²Π½Π΅Π΄Ρ€ΠΈΠ»Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ ADSI (Active Directory Service Interface) для Π½Π΅ зависящСго ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сСтСвого ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° доступа. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, для ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° опрСдСляСтся пространство ΠΈΠΌΠ΅Π½. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·Π½Ρ‹Π΅ слуТбы ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы имСнования, ADSI опрСдСляСт ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ соглашСниС. Вводится понятиС состоящих ΠΈΠ· Π΄Π²ΡƒΡ… частСй строк связывания (binding string) ΠΈΠ»ΠΈ ADsPath. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ опрСдСляСт слуТбу ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² (ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ADSI), Π° вторая β€” располоТСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ обозначСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² ADSI:

LDAP:// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для основанной Π½Π° LDAP слуТбы ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π² Ρ‚.Ρ‡. для Active Directory;

WinNT:// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ².

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ADSI Π² PowerShell Π½Π΅Ρ‚. ВмСсто Π½ΠΈΡ… примСняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ привСдСния Ρ‚ΠΈΠΏΠΎΠ² [ADSI] послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ указываСтся строка связывания. НапримСр, для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Ivanov ΠΈΠ· Π΄ΠΎΠΌΠ΅Π½Π° test.ru Π½ΡƒΠΆΠ½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ конструкция:

$user = [ADSI]"LDAP://CN=Ivanov,DC=TEST,DC=RU"

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ записями, придСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ (для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ вмСсто ΠΈΠΌΠ΅Π½ΠΈ достаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ):

$computer = [ADSI]"WinNT://."

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим Π½Π° локальной машинС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ivanov:

$user = $computer.Create("user","Ivanov")
$user.Put("Description","Π‘ΠΎΠ·Π΄Π°Π½ ΠΈΠ· PowerShell")
$user.SetInfo()

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ ΠΊ Π½Π΅ΠΌΡƒ:

$user1 = [ADSI]"WinNT://./Ivanov,user"
$user1.Description

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π°

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° экран. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ сами Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π°, Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ функциями ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°ΠΌΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ этого Π΄Π΅Π»Π°Ρ‚ΡŒ. Π’ PowerShell Π²Ρ‹Π²ΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Β«ΡΠΊΠ°Ρ€ΠΌΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡΒ» Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Get-Help:

Format-Table Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, столбцы ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТат значСния свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ вычисляСмыС значСния. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…;

Format-List Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ список свойств, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… отобраТаСтся Π½Π° Π½ΠΎΠ²ΠΎΠΉ строкС. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…;

Format-Custom Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ с использованиСм ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ прСдставлСния;

Format-Wide Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ отобраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ свойство ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Если Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· пСрСчислСнных ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ² Π½Π΅ Π²Ρ‹Π·Π²Π°Π½, примСняСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏΡƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»ΡŒ форматирования. ΠŸΡ€Π°Π²ΠΈΠ»Π° отобраТСния хранятся Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .ps1xml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ $PSHome. Π˜Ρ… список ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

dir $pshome\*format*.ps1xm

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π΅ рСкомСндуСтся, Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнныС ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π² список Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π° Update-FormatData. Если ΠΌΠΎΠ΄ΡƒΠ»ΡŒ форматирования ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, PowerShell ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π° экранС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π²ΠΈΠ΄Π΅ списка.

На этом ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠΌ описаниС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² PowerShell, Π° Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ посвящСна Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ практичСских Π·Π°Π΄Π°Ρ‡ управлСния распрСдСлСнной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ срСдой прСдприятия. Π’ Π½Π΅ΠΉ Π½Π°ΠΌ пригодится вСсь описанный инструмСнтарий. Основной ΡƒΠΏΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ сдСлан Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ CIM ΠΈ сравнСниС ΠΈΡ… с WMI. ΠŸΡ€ΠΎΡˆΠ»Ρ‹Π΅ части ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкам Π½ΠΈΠΆΠ΅.


Π§Π°ΡΡ‚ΡŒ 1: ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности Windows PowerShell
Π§Π°ΡΡ‚ΡŒ 2: Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² язык программирования Windows PowerShell
Π§Π°ΡΡ‚ΡŒ 3: ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² скрипты ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, созданиС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ²
Π§Π°ΡΡ‚ΡŒ 4: Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, собствСнныС классы

Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Π² сцСнарии PowerShell ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ | Windows IT Pro/RE

Один ΠΈΠ· самых эффСктивных инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ PowerShell, β€” Π΅Π΅ справочная систСма, ΠΈ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° Get-Help. Для ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… срСду PowerShell это ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π²Π΅ β€” ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Get-Command ΠΈ Get-Member). Если Π²Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ доводилось Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ PowerShell, Π²Ρ‹, скорСС всСго, использовали ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Get-Help (ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π΅ псСвдонимов β€” help ΠΈ man).

Бправочная систСма загруТаСтся автоматичСски Π² Ρ…ΠΎΠ΄Π΅ установки ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ PowerShell, Π½ΠΎ Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ вСрсиСй этого ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Update-Help ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС PowerShell ΠΈ рСгулярно Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΅Π΅ Π² дальнСйшСм. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Microsoft постоянно добавляСт Π² ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ систСму Π½ΠΎΠ²Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ ΠΈ исправляСт ошибки Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅ΠΌΠ°Ρ…, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ сотрудниками ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Update-Help Π½Π° вашСй систСмС, Microsoft позволяСт Π²Π°ΠΌ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ дискового пространства: вСдь Π½Π° Π²Π°ΡˆΡƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ срСдства ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ лишь Ρ‚ΠΎΠ³ΠΎ языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ для своСй систСмы, Π° Π½Π΅ для всСх языков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΊΠ°Π·Π°Π»Π° систСма.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ PowerShell Get-Help

Однако ΠΏΠΎΠΌΠΎΡ‰ΡŒ, получаСмая Π²Π°ΠΌΠΈ ΠΎΡ‚ PowerShell, β€” это Π΅Ρ‰Π΅ Π½Π΅ всС. Взяв Π·Π° основу ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ вСрсии PowerShell, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ написанных Π²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ сцСнариСв. Π’ этой вСрсии Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² сцСнарии многострочных ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Π’ качСствС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ этих ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Ρ‹ символов ». Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# Π›ΡŽΠ±ΠΎΠΉ однострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ


Бюда ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ любоС число ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π².

#>

Как ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ

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

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π΅Π³Π°ΠΌΠΈ. Π― ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽ Ρ‚Π°ΠΊΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ:. SYNOPSIS,. DESCRIPTION ΠΈ. EXAMPLE. Π’Π΅Π³. SYNOPSIS позволяСт Π΄Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, выполняСмой сцСнариСм ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π’Π΅Π³. DESCRIPTION Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ свСдСния, Π° Ρ‚Π΅Π³. EXAMPLE позволяСт привСсти ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ примСнСния вашСго сцСнария ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ понял, ΠΊΠ°ΠΊ слСдуСт Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ. НиТС помСщаСтся Ρ€Π°Π·Π΄Π΅Π» ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈΠ· сцСнария, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°ΠΌ всСх Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… имя 'sa'.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅Π³ΠΈ, ΠΊΠ°ΠΊ. PARAMETER для описания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² вашСм ΠΊΠΎΠ΄Π΅,. INPUTS для описания Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² ваш ΠΊΠΎΠ΄ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ, ΠΈΠ»ΠΈ. OUTPUTS для описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€,. NOTES для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ,. LINK для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ссылок Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ источники ΠΈ Ρ‚.Π΄.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ PowerShell get-Help Set-Database

Π’ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° справочныС Π΄Π°Π½Π½Ρ‹Π΅ Π² сцСнарии ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚Π΅ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ… Π² дальнСйшСм, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ выполняСт ваш ΠΊΠΎΠ΄ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π― ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΈ ΠΌΠ½Π΅ самому эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сцСнариями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я написал Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π°Π·Π°Π΄.

Π’ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Π² сцСнарии PowerShell ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ

Знакомство с PowerShell / Π₯Π°Π±Ρ€

О Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Microsoft Π² Π½Π΅Π΄Π°Π²Π½Π΅ΠΌ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Ρ€ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ свСТСй ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ PowerShell, я ΡƒΠ·Π½Π°Π» Π΅Ρ‰Π΅ с Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄. А Π²ΠΎΡ‚ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π·Π° Π·Π²Π΅Ρ€ΡŒ Ρ‚Π°ΠΊΠΎΠΉ, Π½ΠΈΠΊΠ°ΠΊ Ρ€ΡƒΠΊΠΈ Π½Π΅ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ. Но Π²ΠΎΡ‚ Π½Π° днях Π½Π° свСТСустановлСнном Window Server 2008 я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» эту ΡˆΡ‚ΡƒΠΊΡƒ Π² составС прСдустановлСнных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΈ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΠΎ всС ΠΆΠ΅ взяло Π²Π΅Ρ€Ρ…. ΠžΡ‚ΠΊΡ€Ρ‹Π», ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π½Π°Π±ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‚ΠΈΠΏΠ° Β«helpΒ», «?» ΠΈ Ρ‚.ΠΏ. β€” Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ список всСх ΠΊΠΎΠΌΠ°Π½Π΄ (Π² ΠΆΠ°Ρ€Π³ΠΎΠ½Π΅ PowerShella, ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ² β€” cmdlets), оказавшийся достаточно ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹ΠΌ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² спискС Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ названия Π²Ρ€ΠΎΠ΄Π΅ ForEach, Where, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π½Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ интСрСса ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ эти конструкции ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ. ПолСз Π·Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π±Ρ‹Π» приятно ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌ ΠΊΠ½ΠΈΠ³-ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠ² ΠΏΠΎ сабТу (Ρ‡ΠΈΡ‚Π°Π» Windows PowerShell RU) β€” ссылки ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° Π±Π»ΠΎΠ³Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… участников ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ:

blogs.technet.com/abeshkov/archive/2008/12/24/3172943.aspx

Π˜Ρ‚Π°ΠΊ, послС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… часов Ρ€Π°Π±ΠΎΡ‚Ρ‹ с PowerShell Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΎΡ‚Π»ΠΎΠΆΠΈΠ»ΠΎΡΡŒ:

β€” PowerShell Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ Ρ…ΡƒΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ cmd.exe

β€” ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ концСпция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚ΠΎΠ²). ΠŸΠΎΡ€Π°Π΄ΠΎΠ²Π°Π»ΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΉΡ‚ΠΈ Π½Π° Π²Π΅Ρ‚ΠΊΡƒ рССстра, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, HKLM, ΠΊΠ°ΠΊ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ диск, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ cd HKLM: ΠΈ ΠΏΠΎΠ±Ρ€ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ всС Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ls ΠΈ cd, читая Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² рССстра способом, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Ρ‚ΠΎΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ.

β€” НС ΠΎΡ‡Π΅Π½ΡŒ понравился процСсс Π²Π²ΠΎΠ΄Π° Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΈΡ… рСдактирования (Π² случаС, Ссли ΠΎΠ½ΠΈ многострочныС). НавСрноС, Π² этом случаС Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, загруТая Ρ„Π°ΠΉΠ»Ρ‹ скриптов, рСдактируя ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

β€” НС ΠΎΡ‡Π΅Π½ΡŒ понравился синтаксис PowerShella с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ нСудобства β€” ΠΌΠ½Π΅ Π½Π΅ нравится Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡ‚ΡŒ имя любой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°ΠΊΠΎΠΌ $ ΠΈΠ»ΠΈ $_ Π² случаС обращСния ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Но, ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΊ этим нСудобствам Π²ΠΏΠΎΠ»Π½Π΅ нСслоТно ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ, Π·Π°Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ сразу Π²ΠΈΠ΄Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ + минимизируСтся число Ρ‚Π΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ.

β€” Π’ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΠΈΠ»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°/экспорта ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ CSV, XML (ΠΊΠ°ΠΊ я понял, происходит это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° сСриализации .NET), Π° Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ взаимодСйствия с COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (Π² ΠΊΠ½ΠΈΠ³Π΅ рассмотрСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄ Π² дСсяток строчСк Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°ΡΠΊΡ€Π°ΡˆΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ сохраняСт Π΅Ρ‘ Π² XSLX-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅).

β€” ОписаниС возмоТностСй ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ CLS-совмСстимого .NET-ΠΊΠΎΠ΄Π° с PowerShell оставило Ρ‚ΡƒΠΌΠ°Π½Π½ΠΎΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большом достиТСнии Π² области создания Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² администрирования. (Π‘ этим я Π΅Ρ‰Π΅ Π½Π΅ разбирался, самому интСрСсно, насколько заявлСнная ΠΌΠΎΡ‰ΡŒ соотвСтствуСт Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Однако Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ .NET-ΠΊΠΎΠ΄, Π² любом случаС Ρ€Π°Π΄ΡƒΠ΅Ρ‚).

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈ ΠΌΠ½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ интСрСсно ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎΡ‚Π·Ρ‹Π²Ρ‹ Ρ‚Π΅Ρ… людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с этим инструмСнтом.

Π‘Π±ΠΎΡ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станциях Ρ‡Π΅Ρ€Π΅Π· Powershell / Π₯Π°Π±Ρ€

Π‘Π±ΠΎΡ€ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станциях Ρ‡Π΅Ρ€Π΅Π· Powershell.

Π­Ρ‚ΠΎΡ‚ пост Π±ΡƒΠ΄Π΅Ρ‚ посвящСн Ρ€Π°Π±ΠΎΡ‚Π΅ написанию скриптов Π½Π° Powershell. Π”Π°Π»Π΅Π΅ я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ сталкивался с написаниСм скриптов Π² windows срСдС. Π˜Ρ‚Π°ΠΊ:

Π‘Ρ‹Π»Π° Ρƒ мСня Π·Π°Π΄Π°Ρ‡Π° ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ станциям Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. ВсС станции Π² AD ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ‚ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ. Π•ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π³Π΄Π΅ находятся всС станции, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСм, взяв ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π Π°Π· Ρ‚Π°ΠΊ, Ρ‚ΠΎ пишСм скрипт. ΠŸΡ€ΠΈ написании, я ΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ скрипт ΠΏΠΎ частям. ИМΠ₯О для мСня Ρ‚Π°ΠΊ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ понятнСС.

1. НуТСн список станций. Π•Π³ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΈΠ· AD Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

Get-ADComputer -filter * -SearchBase Β«OU=Computers,ou=some-OU,dc=some-dc,dc=ruΒ»

Она выдаст всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° со всСми свойствами ΠΈ Ρ‚.ΠΏ. МнС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ всС ΠΈ я Π²Ρ‹Π±Ρ€Π°Π» ΠΈΠ· Π½ΠΈΡ… Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ (Diasabled). Π‘Ρ‚Π°Π²ΠΈΠΌ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚

Where-Object {$_.enabled -eq $true}

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… свойство enable Ρ€Π°Π²Π½ΠΎ true, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. Π”Π°Π»Π΅Π΅, ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ всС свойства ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я Π²Ρ‹Π±Π΅Ρ€Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свойство Имя (Name), поставив Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚

Select-Object -Property Name

Бписок Π΅Ρ‰Π΅ пригодится, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ создадим ΠΈΠ· Π½Π΅Π³ΠΎ массив $enablePCs. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ

$enablePCs = Get-ADComputer -filter * -SearchBase Β«OU=Computers,ou=ru-moscow,ou=cee,dc=alico,dc=corpΒ» | Where-Object {$_.enabled -eq $true} | Select-Object -Property Name

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Π² консоли $enablePCs, Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ список ΠΈΠΌΠ΅Π½ всСх ΠΊΠΎΠΌΠΏΠΎΠ².

Π”Π°Π»Π΅Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ с этим списком ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅Ρ‚. Части этих ΠΊΠΎΠΌΠΏΠΎΠ² Π΄Π°Π²Π½ΠΎ Π½Π΅Ρ‚, Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. Π—Π½Π°Ρ‡ΠΈΡ‚, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список Π΄Π°Π»Π΅Π΅. Π― пошСл ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡƒΡ‚ΠΈ: Если имя Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ станции Π½Π΅ удаСтся Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π² ip адрСс, Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‚Π°ΠΊΠΎΠΉ станции ΡƒΠΆΠ΅ Π½Π΅Ρ‚, Ссли удаСтся, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π΅ ΠΏΠΎΠΏΠΈΠ½Π³ΠΎΠ²Π°Ρ‚ΡŒ. Если Π½Π΅ пингуСтся, Ρ‚ΠΎ скорСС всСго станция Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. Π’Π΅ΠΌ самым ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ список Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ станций, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Ρ‚ΡŒ со стСной ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ хостам. Для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ я использовал ΠΌΠ΅Ρ‚ΠΎΠ΄ resolve для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ [System.net.dns]. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ Π²ΠΎΡ‚ такая строка:

$dnsresult = [System.Net.Dns]::resolve(«$computername»)

ΠŸΡ€ΠΎ $computername Π±ΡƒΠ΄Π΅Ρ‚ написано Π΄Π°Π»Π΅Π΅. ПослС, Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ собствСнно ip адрСс ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°

$ipaddress = $dnsresult.AddressList

Π”Π°Π»Π΅Π΅ провСряСм адрСс Π½Π° Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ [system.net.networkinformation.ping] примСняя ΠΊ Π½Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ send. Команда ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ:

$pingfunc = (New-Object system.net.networkinformation.ping).send(«$ipaddress»)

Команда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ Ссли Π΅Π³ΠΎ статус success, Ρ‚ΠΎ рабочая станция доступна, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊ Π½Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. Π’ΡƒΡ‚ ΡƒΠΆΠ΅ Π½Π° свой вкус, Π»ΡŽΠ±Ρ‹Π΅ доступныС дСйствия Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π²Π°ΡˆΠΈΡ… админских ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ я провСрял, Π½Π° ΠΊΠ°ΠΊΠΈΡ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станциях установлСн Chrome:

$chrome = dir «\\$ipaddress\C$\Program Files (x86)\Google\Chrome\Application\chrome.exe»

if ($chrome -ne $null) {write-host Β«Host $computername is reacheble, use Chrome, and have ip $ipaddressΒ»

$sumchrome++}

else {write-host «$computername is reacheble, do not use Chrome, and have ip $ipaddress»

$pcwithoutchrome++}

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $sumchrome ΠΈ $pcwithoutchrome Π½ΡƒΠΆΠ½Ρ‹ для подсчСта ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… станций. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сначала посмотрим Π»ΠΎΠ³ΠΈΠΊΡƒ всСго скрипта.

<img src=»» alt=Β«imageΒ»/>

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ скрипт с коммСнтариями.

$enablePCs = Get-ADComputer -filter * -SearchBase Β«OU=Computers,ou=someou,dc=somedomain,dc=corpΒ» | Where-Object {$_.enabled -eq $true} | Select-Object -Property Name

$sumunresolvePC = 0

$sumchrome = 0

$sumreacheblePC = 0

$sumunreacheblePC = 0

$pcwithoutchrome = 0

foreach ( $i in $enablePCs ) #Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² массивС $enablePCs

{

$error.Clear() #ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ Π±ΡƒΡ„Π΅Ρ€ ошибок Powershell

$erroractionpreference = Β«silentlycontinueΒ» #подавляСм Π²Ρ‹Π²ΠΎΠ΄ ошибок Π² консоль

$dnsresult = 0

$computername = $i.name #ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ имя станции

$dnsresult = [System.Net.Dns]::resolve(«$computername»)

if (!$error) #условиС, Ссли прСдыдущая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π±Ρ‹Π»Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ошибкой

{

$ipaddress = $dnsresult.AddressList

$pingfunc = (New-Object system.net.networkinformation.ping).send(«$ipaddress») #ping

if ($pingfunc.Status -eq Β«successΒ»)

{

$sumreacheblepc++ #ΠΏΠ»ΡŽΡΡƒΠ΅ΠΌ ΠΎΠ±Ρ‰Π΅ количСство доступных станций

$chrome = dir \\$ipaddress\C$\Program Files (x86)\Google\Chrome\Application\chrome.exe #ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия Chrome

If ($chrome -ne $null) {write-host Β«Host $computername is reachable, use Chrome, and have ip $ipaddressΒ»

$sumchrome++ #ΠΏΠ»ΡŽΡΡƒΠ΅ΠΌ количСство станций с Chrome

}

else {

Write-host «$computername is reachable, do not use Chrome, and have ip $ipaddress»

$pcwithoutchrome++ #ΠΏΠ»ΡŽΡΡƒΠ΅ΠΌ количСство станций Π±Π΅Π· Chrome

}

}

else {

$sumunreacheblePC++ #ΠΏΠ»ΡŽΡΡƒΠ΅ΠΌ количСство нСдоступных станций

Write-Host Β«Host $computername is unreachable now, and have ip $ipaddressΒ»

}

}

else

{$sumunresolvePC++ #ΠΏΠ»ΡŽΡΡƒΠ΅ΠΌ количСство Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… станций

write » I cannot resolve $computername :(«}

}

Write-Host Β«Total enabled PC = Β» $enablePCs.count

Write-Host Β«Total PC with Chrome = $sumchromeΒ»

Write-Host Β«Total reachable PC = $sumreacheblePCΒ»

Write-Host Β«Total Unreachable PC = $sumunreacheblePCΒ»

Write-Host Β«Total PC Without Chrome = $pcwithoutchromeΒ»

write-host Β«Total unresolved PC = $sumunresolvepcΒ»

Ну Π²ΠΎΡ‚ ΠΈ всС. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ наличия Chrome я описал для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π’ΡƒΠ΄Π° ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² logonscript. Π‘Π°ΠΌ powershell я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π» ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ, Ссли Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΈΡˆΠΈΡ‚Π΅, обсудим.

ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Powershell — PowerShell — SS64.com

ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Powershell — PowerShell — SS64.com

Π’ PowerShell однострочныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа Ρ€Π΅ΡˆΠ΅Ρ‚ΠΊΠΈ, всС справа ΠΎΡ‚ # Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ.

# ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’ PowerShell 2.0 ΠΈ Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ многострочныС Π±Π»ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ:

<# ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ
contines
#>

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

Π‘ΠΏΡ€Π°Π²ΠΊΠ° Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ​​в PS 2.0, Ρ‡Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стандартизованныС Ρ‚Π΅Π³ΠΈ ΠΊ коммСнтариям ΠΊ сцСнариям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Get-Help.
Π‘ΠΌ. Π­Ρ‚ΠΎΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ сцСнарий ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Π² справкС about_Comment_Based_Help.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Copy-Item demo.msi C: \ install \ demo.msi # скопируйтС установщик

 <#
   Π­Ρ‚ΠΎΡ‚ скрипт Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ с Π²Π°ΠΌΠΈ Π½Π° французском
   языковая функция Π½Π° основС: www.example.com/powershell.html
   ПослСднСС обновлСниС: 1666-09-02
#>

Get-Content -Path <# Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ #> C: \ install \ app64.ini
 

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ встроСнныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°:

 PS C: \> Get-ChildItem <# ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ элСмСнты #> `
    -Path $ env: windir <# систСмной ΠΏΠ°ΠΏΠΊΠΈ Windows #> `
    -Filter * .dll <# ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ DLL #> `
    -Recurse <# ΠΈ поиск Π²ΠΎ всСх ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ°Ρ… #> 

Π‘ΠΏΡ€Π°Π²ΠΊΠ° Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²

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

 DemoParam1
    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DemoParam1 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния значСния blah, Π° Ρ‚Π°ΠΊΠΆΠ΅ blah.

.PARAMETER  DemoParam2 
    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ DemoParam2 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния значСния blah, Π° Ρ‚Π°ΠΊΠΆΠ΅ blah.

.ΠŸΠ Π˜ΠœΠ•Π 
    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π±Π»Π°
    PS C: \>  ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 

.ΠŸΠ Π˜ΠœΠ•Π 
    Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

.Π—ΠΠœΠ•Π’ΠšΠ˜
    Автор:  НазваниС 
    ПослСднСС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: Π³Π³Π³Π³-ΠΌΠΌ-Π΄Π΄
    ВСрсия 1.0 - Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ выпуск blah
    ВСрсия 1.1 - ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ для Π±Π»Π°

#> 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ этот тСкст справки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Get-Help
Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
get-help ./script.ps1
get-help myfunction (это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ / получСния Ρ‚ΠΎΡ‡ΠΊΠΈ)

Π“Π΄Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ справку Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²:

Π‘ΠΏΡ€Π°Π²ΠΊΠ° Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² для сцСнария Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ сцСнария (Π΅Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π° сцСнария, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли сцСнарий Π½Π΅ подписан.)

Π‘ΠΏΡ€Π°Π²ΠΊΠ° Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… мСст:

  • Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • Π’ ΠΊΠΎΠ½Ρ†Π΅ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Function. ΠœΠ΅ΠΆΠ΄Ρƒ послСднСй строкой справки ΠΏΠΎ функциям ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Function Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ пустой строки.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ всС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎ скрипта / Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Если Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ get-help для сцСнария, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ справки Π½Π° основС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° PARAM (), Ρ‚ΠΎ get-help Π²Π΅Ρ€Π½Π΅Ρ‚ эти свСдСния ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ….

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ тСкста справки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ <# .SYNOPSIS #> Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части скрипта.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π’ справкС about_Comment_Based_Help.

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PowerShell ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ табуляции, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ остороТным ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ вставкС символов ΠΏΡ€ΠΎΠ±Π΅Π»Π° + TAB (особСнно нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ коммСнтария #).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ДСмонстрация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ () {
} # comment

^ Π­Ρ‚Π° строка:} #
ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ / вставкС Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку PowerShell происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

PS C: \ batch> ДСмонстрация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ () {
>>}.\ aaardvaark.cmd # comment
>>
Π’Π΅Ρ€ΠΌΠΈΠ½ ‘. \ Aaardvaark.cmd #’ Π½Π΅ распознаСтся ΠΊΠ°ΠΊ имя ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ„Π°ΠΉΠ»Π° сцСнария …

Π§Ρ‚ΠΎ происходит, Ρ‚Π°ΠΊ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ°-ΠΏΡ€ΠΎΠ±Π΅Π» Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС aaardvaark.cmd. Если ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° <ΠΏΡ€ΠΎΠ±Π΅Π»> <Π²ΠΊΠ»Π°Π΄ΠΊΠ°> <ΠΏΡ€ΠΎΠ±Π΅Π»>, Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±Ρ‹Π» сцСнариСм PowerShell ΠΈΠ»ΠΈ исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ, Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» Π±Ρ‹ Π·Π°ΠΏΡƒΡ‰Π΅Π½.

Если ΠΏΡ€ΠΎΠ±Π΅Π» состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· символов (ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· символов ), этого Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

# Π’Π΅ΠΏΠ΅Ρ€ΡŒ стой Ρ‚Π°ΠΌ, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΡˆΡŒ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π»ΠΈΡ†ΠΎΠΌ ΠΊ Π·Π°ΠΏΠ°Π΄Ρƒ
ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ мСстС, Π³Π΄Π΅ Π²Ρ‹ ΠΆΠΈΠ²Π΅Ρ‚Π΅. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ этого Π½Π΅ сдСлали Ρ€Π°Π½ΡŒΡˆΠ΅ # — REM ‘Stand’

БвязанныС ΠΊΠΎΠΌΠ°Π½Π΄Π»Π΅Ρ‚Ρ‹ PowerShell:

Escape-символы — Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ \\, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡ…


АвторскиС ΠΏΡ€Π°Π²Π° Β© 1999-2020 SS64.com
НСкоторыС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹.

ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π² PowerShell — qaruQaruSite

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

.

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

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