2016-07-28 67 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 AA'或'$ script:AA' @AgentK我試過兩種方法,沒有任何反應...... – tTim

+0

哦,順便說一句。我只能打印FOREACH循環內的值,即使在循環之外的同一個函數中也是如此。如果我們可以開始聊天,進一步討論這將是偉大的 – tTim

+0

對不起,我不能每分鐘上網。不是故意傷害任何人。無論如何,你應該使用類似PSObject的東西來輸出有效的數據。我會解決答案。 –