函数后删除数组?

Array removed after function?

我正在制作一个脚本,它进入我们托管的所有服务器并获取特定组的所有成员和域名,然后将其导出到一个文件。我将用户和域名保存到两个数组 AA(用户数组)和 DA(域数组)AA 代表 användararray,"användare" 是瑞典语中的用户,所以这对我来说很有意义。

我注意到导出步骤不起作用,没有导出用户或域名,所以我尝试在函数中打印它们。但它不打印任何东西,所以我试图在不同的位置打印它(没有用)。经过一些实验后,我得出结论,数组实际包含任何信息的唯一位置是在 foreach 循环内,我在其中保存我找到的用户??!

这是代码

unction GetData([int]$p) {

Write-Host("B") 

for ($row = 1; $row -le $UsernamesArray.Length; $row++) 
{

    if($CloudArray[$row] -eq 1)
    {

        .

        $secstr = New-Object -TypeName System.Security.SecureString 
        $PasswordsArray[$row].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $UsernamesArray[$row], $secstr



        $output = Invoke-Command -computername $AddressArray[$row] -credential $cred -ScriptBlock {

            Import-Module Activedirectory                

            foreach ($Anvandare in (Get-ADGroupMember fjärrskrivbordsanvändare)) 
            {

                $AA = @($Anvandare.Name) 
                $DA = gc env:UserDomain
                #$DA + ";" + $Anvandare.Name
                $DA + ";" + $AA
            }
        }
    $output
    }
}
$DA
$AA
}

function Export {

Write-Host("C")


$filsökväg = "C:\Users2sien\Desktop\Coolkids.csv"
$ColForetag = "Företag"
$ColAnvandare = "Användare"
$Emptyline = "`n"
$delimiter = ";"

for ($p = 1; $p -le $DomainArray.Length; $p++) {


    $ColForetag + $delimiter + $ColAnvandare | Out-File $filsökväg




    $DA + $delimiter + $AA | Out-File $filsökväg -Append

    }
}

ReadInfo
GetData
Export

谁能帮我解决这个问题?我已经坐下来解决这个问题一整天了,但我找不到解决方案。

您的变量 $DA 和 $AA 绑定到 GetData 函数,因此它们只存在于那里。您可以通过更改脚本的 scope 让它们在您的脚本中可用。

改变这个:

            $AA = @($Anvandare.Name) 
            $DA = gc env:UserDomain

为此:

            $script:AA = @($Anvandare.Name) 
            $script:DA = gc env:UserDomain

因此它们现在可用于脚本中的其他函数。

我也找到了改进脚本的方法,希望你能看到逻辑:

function GetData([int]$p) {

Write-Host("B") 

    for ($row = 1; $row -le $UsernamesArray.Length; $row++) 
    {

        if($CloudArray[$row] -eq 1)
        {

            .

            $secstr = New-Object -TypeName System.Security.SecureString 
            $PasswordsArray[$row].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
            $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $UsernamesArray[$row], $secstr



            [array]$output = Invoke-Command -computername $AddressArray[$row] -credential $cred -ScriptBlock {

                Import-Module Activedirectory  
                $array = @()            
                foreach ($Anvandare in (Get-ADGroupMember fjärrskrivbordsanvändare)) 
                {
                    $object = New-Object PSObject
                    $object | Add-Member -MemberType NoteProperty -Name AA -Value @($Anvandare.Name) 
                    $object | Add-Member -MemberType NoteProperty -Name DA -Value (gc env:UserDomain)
                    $object | Add-Member -MemberType NoteProperty -Name Something -Value $DA + ";" + $AA
                    $array += $object
                }
                Write-Output $array
            }
        Write-Output $output
        }
    }
}

您的函数现在将输出一些数据。