函数后删除了数组?

时间:2016-07-28 13:23:24

标签: arrays powershell powershell-remoting

我正在创建一个脚本,该脚本将进入我们托管的所有服务器,并获取特定组的所有成员和域名,然后将其导出到文件中。我将用户和域名保存为两个数组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:\Users\322sien\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

任何人都可以帮我吗?我整天坐下来都无法找到解决办法。

1 个答案:

答案 0 :(得分:1)

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

改变这个:

            $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
        }
    }
}

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