2016-07-28 4 views
0

우리가 호스팅하는 모든 서버에 들어가는 스크립트를 만들고 특정 그룹의 모든 구성원과 도메인 이름을 가져온 다음 파일로 내 보냅니다. 사용자와 도메인 이름을 두 개의 배열로 저장합니다. 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

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

귀하의 작동합니다 이제 출력 일부 데이터.

+0

배열을 어떻게 호출해야합니까? '$ AA' 나'$ script : AA'처럼 @AgentK 나는 두 가지 방법을 시도했지만 아무 일도 일어나지 않았다 ... – tTim

+0

오, btw. FOREACH 루프 내부의 값만 인쇄 할 수 있으며 루프 외부의 동일한 함수에서도 값을 인쇄 할 수 없습니다. 이 문제를 더 논의하기 위해 채팅을 시작할 수 있다면 좋을 것입니다. – tTim

+0

죄송합니다. 매분 온라인 상태가 될 수 없습니다. 누구에게 상처주는 건 아니 었습니까? 어쨌든 유효한 데이터를 출력하려면 PSObject와 같은 것을 사용해야합니다. 나는 대답을 고쳐 줄 것이다. –

관련 문제