Создание и сохранение функции в powershell для глобального использования

#amazon-web-services #powershell

Вопрос:

Я хотел бы создать глобальную (если это правильный термин) функцию, которую легко ввести, которая вызовет сервер для запуска. Команда выглядит так:

 aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxx
 

Это мой результат:

 function aws_start {aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxx}
 

Я сохраняю его в C:Program ФайлыWindowsPowerShellМодулиAWS_start как AWS_start.ps1, но ничего не произошло, и я не могу его вызвать.

Кстати, я пытался использовать псевдоним, предоставленный https://docs.aws.amazon.com/cli/latest/userguide/aws-cli.pdf (стр. 147) но результат таков:

 Unable to parse config file: C:Usersuser.awsclialias
 

Мне больше любопытно, как это решить с точки зрения powershell! Это может быть полезно для других целей!

Заранее благодарю вас!

Обновление 1:

Проблема с модулем AWS все та же:

 Unable to parse config file: C:Usersuser.awsclialias
 

Моя alias внешность выглядит так:

 #AliasName   #CommandToReplace
startstuff = ec2 start-instances --instance-ids i-xxxxxxxxxxxx
stopstartstuff  = ec2 stop-instances --instance-ids i-xxxxxxxxxxx  
 

Ответ №1:

Если вы хотите просто иметь функцию, доступную для вас, вы можете добавить ее в свой профиль, скопировав и вставив свою функцию в файл, который возвращается при вводе $PROFILE в PowerShell. Вы можете работать notepad $PROFILE в Windows, open $PROFILE на macOS или использовать свой любимый редактор в Linux. Ваш профиль загружается каждый раз, когда вы открываете PowerShell

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

 . .pathtomyFile.ps1
 

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

 md %USERPROFILE%.awscli
echo [toplevel] > %USERPROFILE%/.aws/cli/alias
 

Затем вы устанавливаете параметры, которые вы хотели бы использовать с именем псевдонима в файле. Что-то вроде:

 #AliasName   #CommandToReplace
startstuff = ec2 start-instances --instance-ids i-xxxxxxxxxxxxx
 

Который, я полагаю, вы сможете вызвать, если файл правильно отформатирован.

 aws startstuff
 

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

Если вы хотите создать аналогичный эффект с помощью PowerShell, используя инструмент командной строки. Вы можете создать пару вспомогательных функций в своем профиле или .ps1 файл, сохраненный для нескольких пользователей, как описано выше. Хотя, как я уже сказал, существует существующий модуль AWS для PowerShell.

Возможно, вам понадобится функция, которая может вызывать команды EC2 для вас. Вот непроверенный пример, так как у меня не установлен интерфейс командной строки aws.

 function Invoke-Ec2Cli {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true)]
        [System.String]
        $Command,

        [Parameter(Mandatory = $true)]
        [System.String]
        $Arguments
    )
    Process {
        # Create an array for the arguments
        $AWSArgs = @()

        # Add command and arguments
        $AWSArgs = $AWSArgs   "ec2"
        $AWSArgs = $AWSArgs   $Command
        $AWSArgs = $AWSArgs   $Arguments -split "s "

        # Run the command
        amp; aws $AWSArgs
    }
}
 

Который послужит основой для других вещей, которые вы хотите сделать с EC2. Тогда вам может понадобиться функция, которая вызывает базу и позволяет вам просто указать, чтобы запустить некоторые экземпляры.

 function Start-Ec2Instance {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true)]
        [System.String]
        $InstanceIDs
    )
    Process {
        # Invoke Ec2 Cli
        Invoke-Ec2Cli -Command start-instances -Arguments "--instance-ids $InstanceIDs"
    }
}
 

Затем вы сможете запускать свои экземпляры таким образом.

 Start-Ec2Instances -InstanceIDs "i-xxxxxxxxxxxxx"
 

Комментарии:

1. Мой файл псевдонима в C:Usersuser.awscli есть такие строки: #AliasName #CommandToReplace startstuff = ec2 start-instances --instance-ids i-042c721df345b562b stopstartstuff = ec2 stop-instances --instance-ids i-042c721df345b562b

2. Обычно лучше обновить свой вопрос любым кодом и просто оставить комментарий, чтобы сказать, что вы обновили свой вопрос. Трудно увидеть форматирование любого кода/конфигурации в комментариях. Пожалуйста, обновите свой вопрос, если вам все еще нужна помощь, и я уверен, что некоторые специалисты с большим опытом работы с AWS могут помочь вам, если приведенные выше решения PowerShell не подходят.

3. Кстати, модуль работает, но!!! Формат должен быть psm1 , а не ps1

4. Для файла модуля да, но вы также можете указать исходные функции в файле .ps1, как я описал в своем посте.

5. Ааа, да. Спасибо! 🙂 Все еще немного неуклюж с точки зрения powershell. 🙂