首页 > 解决方案 > 在 powershell 中创建和保存函数以供全球使用

问题描述

我想创建一个易于键入的全局(如果它是正确的术语)函数,它将调用服务器启动。命令是这样的:

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

这是我的结果:

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

我将它保存在C:\Program Files\WindowsPowerShell\Modules\AWS_start作为 AWS_start.ps1 但什么也没发生,我无法调用它。

顺便说一句,我正在尝试https://docs.aws.amazon.com/cli/latest/userguide/aws-cli.pdf(第 147 页)提供的别名,但输出为:

Unable to parse config file: C:\Users\user\.aws\cli\alias

我更好奇如何从powershell的角度解决它!它可能对其他目的有所帮助!

先感谢您!

更新1:

AWS 模块的问题仍然相同:

Unable to parse config file: C:\Users\user\.aws\cli\alias

我的alias样子是这样的:

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

标签: amazon-web-servicespowershell

解决方案


如果您只想拥有一个可供自己使用的函数,您可以通过将函数复制并粘贴到通过$PROFILE在 PowerShell 中键入返回的文件中来将其添加到您的配置文件中。您可以notepad $PROFILE在 Windows、open $PROFILEMacOS 上运行或在 Linux 上使用您最喜欢的编辑器。每次打开 PowerShell 时都会加载您的配置文件

如果您希望该功能可供更多人使用,那么您可以将其设为模块,但已经有一个Amazon PowerShell 模块如果您只有几个功能,通过点源将它们导入您的会话会更容易。

. .\path\to\myFile.ps1

在此之后,我不太清楚你遇到的问题是什么。由于您似乎在 Windows 上工作,我假设您已按照链接文档中的这些步骤操作:

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

然后在文件中设置要使用别名的选项。就像是:

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

只要文件格式正确,我认为您应该可以调用它。

aws startstuff

您收到上面的解析错误,因为我假设别名文件配置不正确。如果您需要帮助,请发布在您的用户配置文件中创建的文件的内容。

如果您想使用 cli 工具使用 PowerShell 创建类似的效果。您可以在您的配置文件或为多个用户保存的文件中创建几个帮助函数,.ps1如上所述。虽然,正如我所说,PowerShell 有一个现有的 AWS 模块。

您可能需要一个可以为您调用 EC2 命令的函数。这是一个未经测试的示例,因为我没有安装 aws cli。

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
        & 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"

推荐阅读