2017-01-23 73 views
-1

我想執行2個函數,第一個函數「ad」用於從用戶執行列表,然後使用csv格式在輸出函數中更新適當的輸出,同時執行腳本輸出爲空。函數中的Powershell函數

$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

對不起,目前還不清楚是什麼喲你在問。你遇到什麼困難? – JPBlanc

+0

需要執行兩個函數,一個用於提取,另一個用於以csv格式輸出。 –

+1

什麼是錯誤?你試圖糾正的行爲是什麼? – sodawillow

回答

0

您的方法被誤導了。有你的功能ad返回對象的列表,然後通過管道這些對象爲Export-Csv創建一個CSV輸出文件:

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 

如果你絕對必須爲輸出一個單獨的函數(無論何種原因不明)包裹Export-Csv在這樣的功能:

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

,並用管道連接兩個功能:

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

非常感謝您的幫助@Ansgar Wiechers。 –

+0

@ Ansgar Wiecher - 完成,非常感謝您的幫助,其作品除外。剛開始學習PowerShell腳本時,考慮以不同的方式導出csv格式的文件。 我有一個關於$輸入變量的查詢,這是什麼。 –

+0

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