Поделиться через


about_Methods

Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0

РАЗДЕЛ

about_methods

КРАТКОЕ ОПИСАНИЕ

Описание использования методов для выполнения действий с объектами в Windows PowerShell.

ПОДРОБНОЕ ОПИСАНИЕ

Windows PowerShell использует объекты для представления элементов в хранилищах данных или состояния компьютера. Например, объекты FileInfo представляют файлы на дисках файловой системы, а объекты ProcessInfo представляют процессы на компьютере.

Объекты имеют свойства, которые хранят данные об объекте, и методы, которые позволяют изменять объект.

«Метод» — это набор инструкций, указывающих действия, которые можно выполнять с объектом. Например, объект FileInfo содержит метод CopyTo, который копирует файл, представленный объектом FileInfo.

Для получения методов любого объекта используется командлет Get-Member. Используйте его свойство MemberType со значением «Method». Следующая команда возвращает методы объектов процесса.

        PS C:\>Get-Process | Get-Member -MemberType Method
       
           TypeName: System.Diagnostics.Process

         Name                      MemberType Definition
         ----                      ---------- ----------
         BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
         BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
         ...
         Kill                      Method     System.Void Kill()
         Refresh                   Method     System.Void Refresh()
         Start                     Method     bool Start()
         ToString                  Method     string ToString()
         WaitForExit               Method     bool WaitForExit(int milliseconds), System.Void WaitForExit()
         WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds), bool WaitForInputIdle()

Для выполнения или вызова метода объекта введите точку (.), имя метода и круглые скобки «()». Если у метода есть аргументы, поместите значения аргументов в скобках. Скобки являются обязательными для каждого вызова метода, даже в том случае, если аргументы отсутствуют.

Например, следующая команда вызывает метод Kill процессов для завершения процесса «Блокнот» на компьютере. В результате экземпляр программы «Блокнот» закрывается. (Команда Get-Process заключается в круглые скобки, чтобы обеспечить ее выполнение перед вызовом метода Kill.)

        (Get-Process Notepad).Kill()

Другим очень полезным процессом является метод разбиения строк (Split). Метод Split принимает аргумент символа разделителя, который указывает методу место разбиения строки.

        PS C:\>$a = "Try-Catch-Finally"
        PS C:\>$a.Split("-")
        Try
        Catch
        Finally

Как показано в предыдущих примерах, можно вызвать метод в объекте, который можно получить с помощью команды или объекта в переменной.

Начиная с Windows PowerShell4.0. поддерживается вызов метода с помощью имен динамических методов.

СВЕДЕНИЯ О МЕТОДАХ

Определения методов объекта находятся в разделе справки для типа объекта в MSDN на странице методов. Например, на следующей странице описываются методы объектов процесса (System.Diagnostics.Process).

         https://msdn.microsoft.com/library/system.diagnostics.process_methods

Чтобы определить аргументы метода, просмотрите определение метода, которое похоже на схему синтаксиса командлета Windows PowerShell.

Определение метода может иметь одну или несколько сигнатур метода, которые похожи на наборы параметров командлетов Windows PowerShell. Сигнатуры показывают все допустимые форматы команд для вызова метода.

Например, метод CopyTo класса FileInfo содержит две следующие сигнатуры метода.

        1. CopyTo(String destFileName)
        2. CopyTo(String destFileName, Boolean overwrite)

Первая сигнатура метода принимает имя конечного файла (и путь). В следующем примере используется первый метод CopyTo для копирования файла Final.txt в каталог C:\Bin.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

Вторая сигнатура метода принимает имя конечного файла и логическое значение, определяющее необходимость перезаписи конечного файла, если он уже существует.

В следующем примере используется второй метод CopyTo для копирования файла Final.txt в каталог C:\Bin и перезаписи существующих файлов.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

МЕТОДЫ СКАЛЯРНЫХ ОБЪЕКТОВ И КОЛЛЕКЦИЙ

Методы одного («скалярного») объекта определенного типа зачастую отличаются от методов коллекции объектов того же типа.

Например, каждый процесс имеет метод Kill, но у коллекции процессов метод Kill отсутствует.

Начиная с Windows PowerShell 3.0, Windows PowerShell пытается предотвратить ошибки сценариев, возникающие в результате выполнения различающихся методов скалярных объектов и коллекций.

Начиная с Windows PowerShell 4.0, поддерживается фильтрация коллекции с помощью синтаксиса метода.

Если выполняется отправка коллекции и запрашивается метод, который существует только в отдельных («скалярных») объектах, Windows вызывает метод для каждого объекта в коллекции.

Если метод существует в отдельных объектах и в коллекции, Windows PowerShell не изменяет результат.

Эта функция также работает для свойств скалярных объектов и коллекций. Дополнительные сведения см. в разделе about_Properties.

ПРИМЕРЫ

В следующем примере метод Kill отдельных объектов процесса выполняется в коллекции объектов процесса. Этот пример работает только в Windows PowerShell 3.0 и более поздних версиях Windows PowerShell.

Первая команда запускает три экземпляра процесса «Блокнот». Вторая команда использует команду Get-Process для получения всех трех экземпляров процесса «Блокнот» и их сохранения в переменной $p.

        PS C:\>Notepad; Notepad; Notepad
        PS C:\>$p = Get-Process Notepad
        

Третья команда использует свойство Count всех коллекций для проверки наличия всех трех процессов в переменной $p.

        PS C:\>$p.Count
        3

Четвертая команда выполняет метод Kill во всех трех процессах в переменной $p.

Эта команда работает, даже если в коллекции процессов отсутствует метод Kill.

        PS C:\>$p.Kill()

Пятая команда использует команду Get-Process для подтверждения выполнения команды Kill.

        PS C:\>Get-Process Notepad
        Get-Process : Cannot find a process with the name "notepad". Verify the process name and call the cmdlet again.
        At line:1 char:12
        + get-process <<<<  notepad
            + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process], ProcessCommandException
            + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Чтобы выполнить эту задачу в Windows PowerShell 2.0, воспользуйтесь командлетом Foreach-Object для запуска метода в каждом объекте в коллекции.

        PS C:\>$p | Foreach-Object {$_.Kill()}

СМ. ТАКЖЕ

about_Objects

about_Properties

Get-Member