在函数中创建数组,并在另一个函数中使用它

Themackyo

我有一个程序可以获取给定用户的VM信息。它使用菜单系统,该函数REFRESH_LIST创建一个数组,创建一个包含VM信息(ip地址,名称等)的对象,并将其放入该数组中,因此该数组是与VM数量一样大的对象数组用户拥有的。

然后,我使用该数组填充一个表,以将所有信息显示到屏幕上。我还有另一个功能START_INSTANCE,该功能将根据VM的名称启动VM,但为了检查并确保用户仅启动分配给他们的VM,我想返回阵列并检查输入的VM名称是否存在在数组中。

我的问题是数组是在一个函数中构建的,而我在另一个函数中需要它。在阅读中,我发现这是一个范围问题,$script:var我构建了简单的测试函数,并在将相同的变量应用于$script:var数组时得到了在其他函数中可用的变量,但该变量在其他任何地方仍然不可用。

数组有什么特别之处吗?或者不仅仅是范围?

FUNCTION GET_HELP {
    ECHO ""
    ECHO " refresh  : REFRESH VM LIST" 
    ECHO " start    : START INSTANCE    : start <instance-id>"
    ECHO " stop     : STOP INSTANCE     : stop <instance-id>"
    ECHO " q        : QUIT"
    ECHO ""
}

FUNCTION INSTANCE_START {

    $i=0
    $CHECK=""
    $a.Length
    While ($i -le $a.Length) { 
    echo $CHECK
        If ($a[$i].INSTANCEID -contains $INSTANCEID) {
            $CHECK = "TRUE"}
        $i = $i+1
    Echo $CHECK
    }
    echo $CHECK
    IF ($CHECK = "TRUE") {
        #Start-EC2Instance -InstanceId 
        "STARTING " + $INSTANCEID
        ECHO $CHECK}
    ELSE {
    $CHECK=""
    "NO"}
    $INSTANCEID = ""
}

FUNCTION INSTANCE_STOP {
    #Stop-EC2Instance -InstanceId 
}
FUNCTION REFRESH_LIST {
Clear-Host
" LOADING VM LIST FOR "+$USERNAME
$date = get-date -format "MM/dd/yyyy HH:mm:ss"
$Global:a = @()
(Get-EC2Instance).instances | ? {$_.Tags.Key -eq "NAME" -and $_.Tags.Value -eq $TEST_USER} | ForEach-Object {
        $instobj = New-Object System.Object
        $instobj | Add-Member -Type NoteProperty -Name STATE -value $_.state.name
        $instobj | Add-Member -type NoteProperty -name INSTANCEID -value $_.InstanceID
        $instobj | Add-Member -type NoteProperty -name IPADDRESS -value $_.PublicIPAddress
        IF ($_.state.name -eq 'running'){
            $time=New-TimeSpan -Start $_.LaunchTime -End $date
            $val="{0}d {1}h {2}m" -f $time.Days, $time.Hours, $time.Minutes
            $instobj | Add-Member -Type NoteProperty -Name TIME -value $val}
        else{$instobj | Add-Member -Type NoteProperty -Name TIME -value ""}
        $a += $instobj}
For ($i=0; $i -le $a.Length-1; $i++){
    $instanceTags = Get-EC2Tag -Filter @{ Name="resource-id"; Values=$a[$i].INSTANCEID } 
    $a[$i] | Add-Member -type NoteProperty -name PROJECT -value $instanceTags.Where({$_.Key -eq "Project"}).Value
    $a[$i] | Add-Member -type NoteProperty -name NAME -value $instanceTags.Where({$_.Key -eq "Name"}).Value
    $a[$i] | Add-Member -type NoteProperty -name SOFTWARE -value $instanceTags.Where({$_.Key -eq "Oracle SW"}).Value
}
Clear-Host
echo $date
$a | sort STATE, PROJECT, NAME |Format-Table STATE, INSTANCEID, IPADDRESS, PROJECT, NAME, SOFTWARE, TIME -AutoSize
}

#REGION MAIN

REFRESH_LIST
DO {
$SELECTION = Read-Host ">"
$COMMAND,$INSTANCEID = $SELECTION.split(' ',2)
    SWITCH ($COMMAND) {
        '-h' {GET_HELP}
        'refresh' {REFRESH_LIST}
        'start' {INSTANCE_START}
        'stop' {'STOPPING INTANCE'}
        'q' {BREAK}
        DEFAULT {'ENTER -h FOR HELP'}
     }}
 until ($COMMAND -eq 'q')

 #ENDREGION
巴西

解决此问题的一种方法是在$Global:范围内分配数组

$Global:arr

一些示例代码:

function one {
    $Global:arr = @(1, 2, 3)
}

function two {
    one
    $arr
}

two

输出:

1
2
3

请参阅ss64或运行help about_Scopes以获取更多详细信息。


在您发布的代码中,您可以尝试:

$Global:a = @()REFRESH_LIST

这个小例子更能反映您的代码:

function one {
    $Global:a = @(1,2,3)
}

function two {
    echo $a.Length
}

one
two

输出在哪里 3


如评论中所述,这也适用于$Script,在您的情况下更可取。但是,为了确保每次调用数组的相同实例,每次使用时都需要在决定将其声明为($Global:$Script:)的作用域之前添加前缀

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

将数组保存在一个电话中,并在邮递员的另一个电话中使用它

来自分类Dev

在一个jsp文件中创建Java函数,然后从另一个jsp文件中调用它

来自分类Dev

在一个函数调用中创建线程池,并在另一个函数调用中使用它

来自分类Dev

在另一个函数中使用C函数

来自分类Dev

将一个函数的输出另存为变量,并在另一个函数中使用它

来自分类Dev

如何在另一个函数中的一个函数中使用值

来自分类Dev

我想将查询返回的结果保存在变量中,并在另一个函数中使用它

来自分类Dev

将数组保存在一个电话中,并在邮递员的另一个电话中使用它

来自分类Dev

反应本机调用异步函数并在另一个异步函数中使用return

来自分类Dev

如何在一个函数中创建setTimeOut并在另一个函数中销毁它?

来自分类Dev

如何在r环境中调用多个向量以在另一个函数中使用它们

来自分类Dev

覆盖函数中的PHP变量并在另一个文件中使用它

来自分类Dev

存储参数和函数并在另一个函数中使用它们

来自分类Dev

存储参数和函数并在另一个函数中使用它们

来自分类Dev

如何从一个块中获取对象并在另一个类或方法中使用它?

来自分类Dev

在一个jsp文件中创建Java函数,然后从另一个jsp文件中调用它

来自分类Dev

如何从另一个函数内部使用一个函数中的数组

来自分类Dev

如何存储在模板帮助器函数中计算的值并在另一个模板函数中使用它们?

来自分类Dev

如何在python中的另一个函数中使用一个函数

来自分类Dev

如何创建方法并在另一个类中使用它?

来自分类Dev

如何使用一个mysql查询的结果并在php中的另一个查询中使用它?

来自分类Dev

在一个事件中设置一个“ int”,并在另一个事件中使用它

来自分类Dev

使用Python在另一个函数中使用一个函数中的变量

来自分类Dev

为变量赋值并在python中的另一个变量中使用它

来自分类Dev

尝试在服务中创建一个 observable,在一个组件中使用它并在另一个组件 angular 4 中订阅它

来自分类Dev

从一个函数返回所有可能的输出,然后在另一个函数中使用它

来自分类Dev

在构造函数中创建一个字符串数组并在主函数中使用它

来自分类Dev

Python 测试:模拟导入并在另一个函数中使用的函数

来自分类Dev

从查询中过滤出 id 并在另一个查询中使用它

Related 相关文章

  1. 1

    将数组保存在一个电话中,并在邮递员的另一个电话中使用它

  2. 2

    在一个jsp文件中创建Java函数,然后从另一个jsp文件中调用它

  3. 3

    在一个函数调用中创建线程池,并在另一个函数调用中使用它

  4. 4

    在另一个函数中使用C函数

  5. 5

    将一个函数的输出另存为变量,并在另一个函数中使用它

  6. 6

    如何在另一个函数中的一个函数中使用值

  7. 7

    我想将查询返回的结果保存在变量中,并在另一个函数中使用它

  8. 8

    将数组保存在一个电话中,并在邮递员的另一个电话中使用它

  9. 9

    反应本机调用异步函数并在另一个异步函数中使用return

  10. 10

    如何在一个函数中创建setTimeOut并在另一个函数中销毁它?

  11. 11

    如何在r环境中调用多个向量以在另一个函数中使用它们

  12. 12

    覆盖函数中的PHP变量并在另一个文件中使用它

  13. 13

    存储参数和函数并在另一个函数中使用它们

  14. 14

    存储参数和函数并在另一个函数中使用它们

  15. 15

    如何从一个块中获取对象并在另一个类或方法中使用它?

  16. 16

    在一个jsp文件中创建Java函数,然后从另一个jsp文件中调用它

  17. 17

    如何从另一个函数内部使用一个函数中的数组

  18. 18

    如何存储在模板帮助器函数中计算的值并在另一个模板函数中使用它们?

  19. 19

    如何在python中的另一个函数中使用一个函数

  20. 20

    如何创建方法并在另一个类中使用它?

  21. 21

    如何使用一个mysql查询的结果并在php中的另一个查询中使用它?

  22. 22

    在一个事件中设置一个“ int”,并在另一个事件中使用它

  23. 23

    使用Python在另一个函数中使用一个函数中的变量

  24. 24

    为变量赋值并在python中的另一个变量中使用它

  25. 25

    尝试在服务中创建一个 observable,在一个组件中使用它并在另一个组件 angular 4 中订阅它

  26. 26

    从一个函数返回所有可能的输出,然后在另一个函数中使用它

  27. 27

    在构造函数中创建一个字符串数组并在主函数中使用它

  28. 28

    Python 测试:模拟导入并在另一个函数中使用的函数

  29. 29

    从查询中过滤出 id 并在另一个查询中使用它

热门标签

归档