2016-07-28 9 views
0

私はホスティングしているすべてのサーバーに入り、特定のグループのすべてのメンバーとドメイン名を取得し、ファイルにエクスポートするスクリプトを作成しています。私はユーザーとドメイン名を2つの配列に保存しています。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のようなものを使って有効なデータを出力する必要があります。私は答えを修正します。 –

関連する問題