功能中的电源外壳功能



我想执行 2 个函数,第一个函数 "ad" 用于执行用户的列表,然后需要使用 csv 格式在输出函数中更新适当的输出,在执行脚本时输出为空。

$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

你的方法被误导了。让您的函数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:pathtooutput.csv' -NoType

如果您绝对必须为输出使用单独的函数(无论出于何种未知原因),请将Export-Csv包装在如下函数中:

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

并用管道连接两个函数:

ad | output 'C:pathtooutput.csv'

最新更新