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

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 条评论
登录 后参与评论

相关文章

在函数中返回struct的值,并在另一个包中使用它

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

从一个函数中获取信息并在另一个函数中使用它

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

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

获取回调值并在另一个异步函数中使用它

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

创建一个函数并在 node.js 中的另一个文件上调用它

如果导入该文件,是否可能以某种方式在一个文件中写入def函数并在另一个文件中使用它?

在一个函数中增加计数值,并在另一个函数中使用if条件

在一个函数中增加计数值,并在另一个函数中使用if条件

如何在另一个函数中使用一个函数并在Python中对其进行操作?

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

创建自定义插件并在另一个构建脚本中使用它

在另一个函数中使用数组数据

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

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

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

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

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

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

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

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

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

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

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

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

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

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