Встраиваемые типы часть II

На снимке экрана я выбрал фильтр языка C#, поэтому для этого класса я вижу только синтаксис и пример кода на C#. К сожалению, для PowerShell пока нет фильтра, но при подготовке этой статьи и других работ я бродил по библиотекам классов и создал более 70 примеров блоков, каждый из которых содержит небольшой скрипт, демонстрирующий, как можно использовать тот или иной компонент .NET из PowerShell. Я также включил несколько примеров блоков, иллюстрирующих использование WMI и PowerShell. Чтобы просмотреть блоки, которые я создал на данный момент, перейдите по адресу www.pcpro.co.uk/links/154dotnet2.

Встраиваемые типы часть II

Чтобы получить доступ к классам .NET из PowerShell, достаточно простого перевода. Если вы посмотрите на определение класса FileInfo, вы увидите фрагмент кода C#, который выглядит следующим образом:

// Создаем новый объект FileInfo.

String FileName = «c: config.sys»;

FileInfo fInfo = новая информация о файле (имя файла);

если (!fInfo. Существует)

{

//Создаем файл.

фИнфо. Создавать();

}

// Добавляем шифрование.

фИнфо. Шифровать();

Этот фрагмент кода сначала создает экземпляр нового объекта FileInfo и присваивает его переменной fInfo. Этот объект FileInfo представляет файл, имя которого содержится в переменной FileName. Преобразовать это в PowerShell и использовать результат для создания красиво отформатированного списка очень просто:

PS C: WINDOWS> $filename="c: config.sys"

PS C: WINDOWS> $fInfo = новый объект System. Ио. FileInfo $filename

Класс FileInfo, как и в версии C#, используется для создания объекта, после чего вы можете получить доступ к методам и свойствам объекта. Читатели с хорошей памятью помнят, что для обнаружения методов, реализуемых объектом, достаточно передать объект в командлет Get-Member. Итак, чтобы перечислить методы в объекте FileInfo, я передаю переменную $finfo в Get-Member и добавляю параметр, указывающий, что я просто хочу вернуть методы, как показано на снимке экрана напротив.

Как видите, создание экземпляров объектов .NET — в данном случае с использованием класса FileInfo в файле System. Пространство имен IO – прямо из PowerShell. Получить полное имя файла можно с помощью метода get_FullName:

PS C: WINDOWS> $finfo.get_fullname()

с: config.sys

При написании сценариев PowerShell имена классов необходимо указывать полностью, поскольку в PowerShell нет эквивалента инструкции «Using» C# для указания текущего пространства имен. Это означает, что придется печатать гораздо больше, но я к этому уже привык, и вы можете возразить, что, поскольку каждое имя класса указано полностью, подход PowerShell позволяет избежать любых двусмысленностей.

Статические и динамические методы

В примерах до сих пор я демонстрировал методы, использующие классы динамических объектов, но .NET Framework также включает ряд статических классов. Как и классы, которые я использовал выше, эти статические классы содержат методы, которые вы можете использовать в своем коде или из сценариев PowerShell. Статические методы — это методы, которые не требуют предварительного создания экземпляра объекта; вместо этого вы вызываете их с параметрами, и они возвращают результат. Эти статические классы и методы полезны, например, для получения информации о конкретном объекте или для выполнить некоторые полезные вычисления или преобразования, например, вычислить абсолютное значение числа или синус некоторого числа. угол.

Чтобы проиллюстрировать статические классы и статические методы, давайте посмотрим на класс DNS в System. Сеть. Этот класс обеспечивает простую функциональность разрешения доменных имен и описан по адресу www.pcpro.co.uk/links/154dotnet3. Класс содержит несколько методов, которые можно использовать для разрешения DNS-имен, включая метод System. Сеть. Днс. GetHostEntry — статический метод, который преобразует имя хоста или IP-адрес в IPHostEntryInstance, как показано здесь: