2017-01-23 7 views
-1

Ich möchte die 2 Funktionen ausführen, die erste Funktion "ad" ist für die Ausführung der Liste von den Benutzern, dann entsprechende Ausgaben müssen in der Ausgabefunktion im CSV-Format aktualisiert werden, während das Skript ausgeführt wird Ausgabe ist leer.Powershell Funktion in Funktion

$out = "F:\inactive.csv" 

function ad() { 
    $users = Get-Content "C:\dis1.txt" 
    foreach ($user in $users) { 
     try { 
      $memberof = Get-ADUser $user -Properties * -ErrorAction Stop | Select-Object samaccountname, memberof 
      foreach ($groups in $memberof) { 
       if ($group=$groups.memberof -like "*mobile*") { 
        foreach ($name in $group) { 
         $gpnames += "$((Get-ADGroup $name).samaccountname);" 
         $gpname= "$($memberof.samaccountname),Exist,$($gpnames)" 
        } 
        Write-Output $gpname 
       } else { 
        Write-Output "$($memberof.samaccountname),Exist" 
       } 
      } 
     } catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] { 
      $usrname = "$($user),NotExist" 
      Write-Output $usrname 
     } 
    } 
} 

function output { 
    param($usrname,$memberof,$gpnames,$ad) 
    New-Object PSObject -Property @{ 
     UserAccount = $memberof.samaccountname 
     NotExist = $usrname 
     GroupNames = $gpnames 
    } 

    $gpnames = $memberof = $usrname = $null 
    output | Select-Object useraccount, notexist, groupnames | Export-Csv $out 
} return output 
+3

Sorry, es ist nicht klar, was yo Du fragst. Welche Schwierigkeit triffst du? – JPBlanc

+0

Zwei Funktionen müssen ausgeführt werden, eine für die Extraktion und eine für die Ausgabe im CSV-Format. –

+1

Was ist der Fehler? Was ist das Verhalten, das Sie korrigieren möchten? – sodawillow

Antwort

0

Ihre Vorgehensweise ist fehlgeleitet. Haben Sie Ihre Funktion eine Liste von Objekten zurückgeben ad, dann Rohr die Objekte in Export-Csv eine CSV-Ausgabedatei erstellen:

function ad { 
    Get-Content 'C:\dis1.txt' | ForEach-Object { 
    $user = Get-ADUser -Filter "SamAccountName -eq '$_'" -Properties samaccountname, memberof 
    if ($user) { 
     $user | Select-Object SamAccountName, 
     @{n='UserExists';e={$true}}, 
     @{n='Groups';e={ 
      ($_.MemberOf | 
      Where-Object { $_ -like "*mobile*" } | 
      Get-ADGroup | 
      Select-Object -Expand SamAccountName) -join ',' 
     }} 
    } else { 
     New-Object -Type PSObject -Property { 
     SamAccountName = $_ 
     UserExists  = $false 
     Groups   = $null 
     } 
    } 
    } 
} 

ad | Export-Csv 'C:\path\to\output.csv' -NoType 

Wenn Sie unbedingt eine eigene Funktion für die Ausgabe wickeln müssen (für was auch immer aus unbekannten Gründen) Export-Csv in eine Funktion wie folgt aus:

function output($filename) { 
    $Input | Export-Csv $filename -NoType 
} 

und die beiden Funktionen mit einem Rohr verbinden:

ad | output 'C:\path\to\output.csv' 
+0

Vielen Dank für Ihre Hilfe @Ansgar Wiechers. –

+0

@ Ansgar Wiecher - Fertig, Vielen Dank für Ihre Hilfe, es funktioniert wie freigestellt. Ich habe gerade mit dem Erlernen von PowerShell-Skripten angefangen und überlegt, die Dateien im CSV-Format auf verschiedene Arten zu exportieren. Ich habe eine Abfrage über die Variable $ Eingabe, worum es geht. –

+0

['Get-Help about_Automatic_Variables'] (https://msdn.microsoft.com/powershell/reference/3.0/Microsoft.PowerShell.Core/about/about_Automatic_Variables) –