2016-07-28 9 views
0

Ich mache ein Skript, das auf alle Server, die wir hosten, geht und alle Mitglieder einer bestimmten Gruppe und den Domainnamen erhält und dann in eine Datei exportiert. Ich speichere die Benutzer und die Domain-Namen in zwei Arrays AA (Benutzer-Array) und DA (Domain-Array) AA steht für användararray, und "användare" ist Benutzer in Schwedisch, so macht es für mich Sinn.Array nach Funktion entfernt?

Ich bemerkte, dass der Exportschritt nicht funktionierte, keine Benutzer oder Domänennamen exportiert wurden, also habe ich versucht, sie in der Funktion zu drucken. Aber es druckt nichts, also habe ich versucht, es an einem anderen Ort zu drucken (hat nicht funktioniert). Nach einigem Experimentieren kam ich zu der Schlussfolgerung, dass der einzige Ort, an dem die Arrays tatsächlich irgendwelche Informationen enthalten, in der foreach Schleife liegt, wo ich die Benutzer speichere, die ich finde ??!

Hier ist der Code

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 

jemand mir mit diesem helfen? Ich habe mich den ganzen Tag damit hingesetzt und kann keine Lösung finden.

Antwort

1

Ihre Variablen $ DA und $ AA sind an die GetData-Funktion gebunden, daher leben sie nur dort. Sie könnten sie in Ihrem Skript verfügbar machen, indem Sie den Bereich scope ändern. diese

Wechsel:

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

Um dies:

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

So werden sie jetzt für andere Funktionen im Skript zur Verfügung.

Auch die Art und Weise fand ich das Skript zu verbessern, hoffen, dass Sie die Logik sehen:

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

Ihre Funktion gibt nun einige Daten.

+0

Wie soll ich die Arrays aufrufen? Wie '$ AA' oder' $ script: AA' @AgentK habe ich beide Möglichkeiten ausprobiert und nichts passiert ... – tTim

+0

Oh und btw. Ich kann die Werte nur innerhalb der FOREACH-Schleife drucken, nicht einmal in derselben Funktion außerhalb der Schleife. Wenn wir einen Chat starten könnten, um weiter darüber zu sprechen, wäre das großartig. – tTim

+0

Sorry, ich kann nicht jede Minute online sein. Ich wollte niemanden verletzen. In jedem Fall sollten Sie etwas wie PSObject verwenden, um gültige Daten auszugeben. Ich werde die Antwort beheben. –

Verwandte Themen