Представляем VMware PowerCLI Core (часть 2)

Опубликовано: 17 Апреля, 2023

Если вы хотите прочитать другие части этой серии статей, перейдите по ссылке:

  • Представляем VMware PowerCLI Core (часть 1)

Как я упоминал в своей предыдущей статье здесь, на VirtualizationAdmin.com, PowerCLI Core был недавно разработан VMware Fling Labs как способ предоставления пользователям Linux, Mac и Docker возможности использовать те же командлеты PowerShell, которые ранее были доступны только в Windows, чтобы системные администраторы могли имеют многоплатформенный язык сценариев, позволяющий им управлять своей инфраструктурой VMware из любой операционной системы без внесения каких-либо изменений в свои сценарии. В этой короткой статье, состоящей из двух частей, нам помогает Люк Декенс, долгое время работавший в VMware vExpert и Microsoft MVP, который кратко знакомит нас с этой захватывающей новой технологией. Продолжая с того места, где мы остановились в предыдущей статье, снова Люк…

PowerCLI Core, первое знакомство

PowerCLI Core в настоящее время публикуется как Fling. Это способ VMware делать предварительные технические обзоры новых продуктов и функций, которые в один прекрасный день превратятся в официальный и поддерживаемый продукт:

Изображение 14603

редактор

Прежде чем мы запустим сценарии, нам понадобится редактор, чтобы отредактировать наши сценарии. И желательно тот, у которого есть такие функции, как PowerShell Intellisense, отладка, интеграция с Git и некоторые другие. Но что еще более важно, редактор, который мы можем использовать на множестве платформ.

Изображение 14604

И с Visual Studio Code и расширением PowerShell у нас есть такой инструмент. Оба являются другими примерами новой, открытой природы Microsoft.

Мультиплатформенное кодирование

Хотя мы все приветствуем разнообразие платформ, которые становятся доступными для запуска наших сценариев PowerShell, это также создает некоторые новые проблемы. Как уже упоминал Алан во время интервью, мы хотим писать «переносимые» сценарии PowerShell, поэтому мы должны придумать новые способы выполнения некоторых стандартных методов, которые мы использовали только на платформах Windows.

Ниже приведен лишь первоначальный список некоторых из них, с которыми я столкнулся, делая первые шаги в PowerShell и PowerCLI Core.

Где я?

Когда мы хотим предоставить сценарии, которые работают на нескольких платформах, мы должны придумать метод, чтобы определить, где работает наш сценарий. Это на платформе Windows, Linux или Mac?

Текущая сборка PowerShell Core, к сожалению, не предоставляет простого способа узнать это. В репозитории PowerShell есть несколько проблем, связанных с этой проблемой. См., например, выпуск №1997.

Я использовал следующую простую функцию с именем Get-CorePlatform, которая возвращает информацию о платформе. На основе свойства OSFamily возвращаемого объекта сценарий может определить, где он выполняется:


функция Get-CorePlatform
{
[привязка команд()]
параметр()

$осдетектед = $ложь
пытаться{

$os = Get-CimInstance -ClassName Win32_OperatingSystem
Write-Verbose -Message «Обнаружена Windows»
$осдетектед = $истина
$osFamily = 'Windows'
$osName = $os.Caption
$osVersion = $os.Версия
$nodeName = $os.CSName
$архитектура = $os.OSArchitecture

}
ловить{
Write-Verbose -Message «Возможно, Linux или Mac»
$унаме = "$(унаме)"
if($uname -match '^Darwin|^Linux'){
$осдетектед = $истина
$osFamily = $унаме
$osName = "$(унаме -v)"
$osVersion = "$(унаме -r)"
$nodeName = "$(унаме -n)"
$архитектура = "$(имя-p)"
}
# Другой
еще
{
Write-Warning-Message "Ядро $($uname) не покрыто"
}
}
[упорядоченный]@{
ОСдетектед = $осдетектед
OSFamily = $ OSFamily
ОС = $osName
Версия = $osVersion
Имя хоста = $nodeName
Архитектура = $архитектура
}
}

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

Сценарии планирования

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

Командлет New-ScheduledTask в настоящее время еще недоступен в PowerShell Core. Видя различные решения для планирования, доступные на всех платформах, на которых вы можете запускать свои сценарии, нам нужна некоторая логика, с помощью которой мы можем запланировать сценарий с помощью опции локального планирования.

Я создал небольшую функцию с именем New-CoreScheduledTask, которая будет использовать crontab в средах Linux и Mac OS и команду schtasks в среде Windows. И он использует функцию Get-CorePlatform, чтобы определить, какое конкретное решение для платформы выбрать:


функция New-CoreScheduledTask
{
[привязка команд()]
параметр(
[дата/время]$Старт,
[скриптблок]$Скрипт
)
переключатель -RegEx ((Get-CorePlatform).OSFamily)
{
'Окна' {
$текст = @()
$text += 'schtasks','/Create','/SC Once'
$text += "/ST $($Start.ToShortTimeString()) /SD $($Start.ToString('дд-мм-гггг'))"
$text += "/TN CoreTools-$(Get-Date -Format 'yyyyMMdd-HHmmss')"
$text += "/TR ""powershell.exe -Command '&{$Script}'"""
Invoke-Expression-Command ($ text -join ' ')
}
"^Линукс|^Дарвин"{
$текст = @()
$text += (crontab -l 2>&1 | где {$_ -notmatch "no crontab"})

$cronLine = "$($Start.Minute) $($Start.Hour) $($Start.Day) $($Start.Month) $([int]$Start.DayOfWeek)"
$cronline += " $(который powershell) -Command ""&{$($Script)}"""
$текст += $cronLine

New-CoreCrontab-Command $text
}
'По умолчанию'{

Write-Error-Message "Неизвестная OSFamiliy $($_)"
}
}
}

Для полноты, PowerShell Core поставляется с модулем crontab в папке demos. Ориентирован на Linux и Mac OS и имеет гораздо больше возможностей, чем моя простая функция выше.

Модуль

Функции из этой статьи можно найти в моем репозитории GitHub под названием CoreTools. Не стесняйтесь раскошелиться и внести свой вклад.

Что я использовал

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

  • Ядро PowerShell: v6.0.0-alpha.13
  • Ядро VMware PowerCLI: 1.0 сборка 0
  • Код Visual Studio: 1.8.0
  • Поддержка языка PowerShell для VSC: 0.8.0

Заключительные мысли

«Открытые» инициативы Microsoft и VMware, на мой взгляд, означают начало новой эры в ИТ.

Ваши «инвестиции» в Windows PowerShell окупаются. Усилия, которые вы вкладываете в изучение и использование PowerShell, теперь окупаются на нескольких платформах. Пожинать плоды!

«Сообщество» становится важным и ценным игроком, и теперь вы как личность можете внести свой вклад во все эти новые инициативы, которые появляются. Github должен стать вашим новым лучшим другом!

Если раньше вы не были убеждены в том, что PowerShell является незаменимым инструментом для любого серьезного ИТ-специалиста, теперь вы должны быть уверены. Только подумайте, как вы сможете управлять всеми этими платформами и автоматизировать их с помощью всего одного языка!

Действительно дивный новый мир! Удачного написания сценариев!