2016-07-28 2 views
0

Я создаю скрипт, который входит во все серверы, которые мы размещаем, и получает всех членов определенной группы и имени домена, а затем экспортирует их в файл. Я сохраняю пользователей и доменные имена в двух массивах AA (пользовательский массив) и DA (массив доменов). AA означает användararray, а «användare» - это пользователи шведского языка, поэтому это имеет смысл для меня.Array удален после функции?

Я заметил, что шаг экспорта не работал, ни пользователи, ни имена доменов не были экспортированы, поэтому я попытался напечатать их в функции. Но он ничего не печатает, поэтому я попытался напечатать его в другом месте (не работал). После некоторых экспериментов я пришел к выводу, что единственное место, где массивы содержат любую информацию, находится внутри цикла 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

Ваши переменные $ 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 
     } 
    } 
} 

Ваша функция теперь выходные некоторые данные.

+0

Как я могу вызвать массивы? Как '$ AA' или' $ script: AA' @AgentK Я пробовал оба пути, и ничего не происходит ... – tTim

+0

Oh and btw. Я могу печатать только значения внутри цикла FOREACH, даже не в той же функции вне цикла. Если бы мы могли начать чат, чтобы обсудить это дальше, это было бы здорово – tTim

+0

Извините, я не могу быть в сети каждую минуту. Не значит, что кому-то причинить боль. В любом случае вы должны использовать что-то вроде PSObject для вывода допустимых данных. Я исправлю ответ. –

Смежные вопросы