Главная > Powershell > Использование хэш-таблиц в качестве условного репозитория кода

Использование хэш-таблиц в качестве условного репозитория кода

На днях обнаружил довольно необычный способ использования хэш-таблиц, которым захотелось поделиться.

Обычно, при написании скриптов, когда нужно что-то проверить (и в зависимости от результатов проверки выполнить какие-то действия) применяется оператор if.

Например, нам нужно проверить существует-ли определённый каталог, и если нет – создать его (если каталог существует – просто будем выводить сообщение об этом). При классическом подходе это можно реализовать так:

$Path = 'C:\test'
if (Test-Path $Path)
{
    Write-Warning "Каталог $Path существует"
}
else
{
    $null = New-Item -Path $Path -ItemType Directory
    Write-Warning "Каталог $Path только что был создан"
}

Но есть и другой способ сделать то же самое:

$Creator =
@{
    $true =
    {
        Write-Warning "Каталог $Path существует"
    }
    
    $false =
    {
        $null = New-Item -Path $Path -ItemType Directory
        Write-Warning "Каталог $Path только что был создан"
    }
}

$Path = 'C:\test'
& $Creator[(Test-Path $Path)]

Здесь $Creator – хэш-таблица, ключами которой являются – системные переменные $true и $false, а значениями – блоки кода:

PS C:\> $Creator | Format-List

Name  : True
Value : 
                Write-Warning "Каталог $Path существует"
            
Name  : False
Value : 
                $null = New-Item -Path $Path -ItemType Directory
                Write-Warning "Каталог $Path только что был создан"

В зависимости от того существует каталог, или нет (Test-Path возвращает $true или $false) выполняется соответствующий код, который вызывается при помощи оператора вызова – &.

На всякий случай напомню:

Оператор вызова & выполняет команду, скрипт или блок скрипта… Оператор вызова указывает, что следующее за ним значение является командой. Это

позволяет выполнять команды, сохраненные в переменных и представленные

в виде строк.

Т.е. если выполнить последнюю команду строку без оператора & – мы просто получим вывод команды:

PS C:\> $Creator[(Test-Path $Path)]
        Write-Warning "Каталог $Path существует"

Реклама
Рубрики:Powershell Метки:
  1. Комментариев нет.
  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: