Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение: 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