Наконец, новая версия PowerShell была выпущена примерно через три года после выхода PowerShell Core 6. Многие поклонники PowerShell ждали последней версии, в том числе и я. Новый PowerShell 7 сводит к минимуму разрыв между Windows PowerShell 5 и кроссплатформенной версией PowerShell Core 6. Кроме того, в последнюю версию добавлены более мощные функции.

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

о-о-о-о-о

Вдохновленный oh-my-zsh, oh-my-posh привносит мощные индикаторы консоли и функции в ваш сеанс PowerShell.

В PowerShell Core 6 PSReadLine не был встроенным модулем. Поэтому перед установкой oh-my-posh вы должны сначала установить модуль PSReadLine. Этот дополнительный шаг делает несколько громоздким. Но в PowerShell 7 PSReadLine включал дистрибутив по умолчанию, так что вы можете просто настроить oh-my-posh напрямую.

Вы можете запустить эти команды, чтобы настроить oh-my-posh для PowerShell.

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

Затем включите подсказку и измените тему.

Set-Prompt
Set-Theme Paradox

Примечание. Шрифт терминала по умолчанию может некорректно отображать символы Powerline в первый раз. Поищите в репозитории https://github.com/ryanoasis/nerd-fonts и выберите свой любимый исправленный шрифт Powerline. Кроме того, если вы ищете сбалансированный шрифт CJK, рассмотрите возможность использования шрифта D2Coding (https://github.com/naver/d2codingfont) от Naver.

Затем откройте сценарий профиля PowerShell с помощью команды vim $PROFILE и вставьте приведенные ниже коды.

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

Этот код делает вашу оболочку PowerShell по умолчанию более улучшенной. Вы можете изменить тему на то, что хотите.

Модуль PSFzf

Как вы, возможно, знаете, fzf предоставляет мощные функции поиска для многих сценариев. Особенно хорош fzf в сочетании с поиском по истории и привязкой клавиш с комбинацией клавиш Ctrl + R.

PSFzf точно соответствует этому сценарию. Кроме того, fzf написал на Голанге. Таким образом, вы можете использовать fzf в macOS, Linux и даже в Windows.

Чтобы использовать модуль PSFzf, вы должны сначала установить fzf на свой компьютер.

  • В Windows вы можете выбрать между диспетчером пакетов Chocolatey или диспетчером пакетов Scoop.
  • В Linux большинство диспетчеров пакетов предоставляет пакет fzf. (За исключением того, что Ubuntu не предлагает этот пакет. В качестве альтернативы вы можете использовать метод установки Git.)
  • В macOS Homebrew - ваш лучший друг.

После того, как вы установили двоичный файл fzf, просто установите модуль PSFzf в свой PowerShell.

Install-Module PSFzf -Scope CurrentUser

Наконец, позвольте PSFzf переопределить привязку клавиш по умолчанию при запуске. Вставьте приведенные ниже коды.

Remove-PSReadlineKeyHandler 'Ctrl+r'
Remove-PSReadlineKeyHandler 'Ctrl+t'
Import-Module PSFzf

Версия k, kubectx и kubens для PowerShell

Если вы придерживаетесь Kubernetes каждый день, вы можете знать или учитывать сокращенное выражение kubectl.

Я использую псевдонимы K, kubectx и kubens каждый день. Но эти скрипты не предназначены для PowerShell. Поэтому я попытался сделать собственную версию каждого условного обозначения. Естественно, вы можете использовать приведенные ниже фрагменты кода для других ваших сред, включая Windows.

Псевдоним "K"

Set-Alias k kubectl

«Select-KubeContext» (он же kubectx)

function global:Select-KubeContext {
  [CmdletBinding()]
  [Alias('kubectx')]
  param (
    [parameter(Mandatory=$False,Position=0,ValueFromRemainingArguments=$True)]
    [Object[]] $Arguments
  )
  begin {
    if ($Arguments.Length -gt 0) {
      $ctx = & kubectl config get-contexts -o=name | fzf -q @Arguments
    } else {
      $ctx = & kubectl config get-contexts -o=name | fzf
    }
  }
  process {
    if ($ctx -ne '') {
      & kubectl config use-context $ctx
    }
  }
}

«Select-KubeNamespace» (он же кубенс)

function global:Select-KubeNamespace {
  [CmdletBinding()]
  [Alias('kubens')]
  param (
    [parameter(Mandatory=$False,Position=0,ValueFromRemainingArguments=$True)]
    [Object[]] $Arguments
  )
  begin {
    if ($Arguments.Length -gt 0) {
      $ns = & kubectl get namespace -o=name | fzf -q @Arguments
    } else {
      $ns = & kubectl get namespace -o=name | fzf
    }
  }
  process {
    if ($ns -ne '') {
      $ns = $ns -replace '^namespace/'
      & kubectl config set-context --current --namespace=$ns
    }
  }
}

Вставьте эти коды в свой $PROFILE код скрипта, и вы получите более удобное рабочее пространство PowerShell для DevOps.

Заключение

Я думаю, что настоящая сила PowerShell в том, что вы можете написать код автоматизации оболочки, более читаемый, управляемый и многоразовый для любой операционной системы, включая Windows. Это означает, что больше не нужно рассматривать крайний случай. Вы можете просто написать свой фрагмент PowerShell один раз и поделиться кодом повсюду.

В следующей версии PowerShell появится все больше и больше функций. Я не могу этого дождаться!