【问题标题】:Powershell Function in function [closed]功能中的Powershell功能[关闭]
【发布时间】:2017-01-23 04:56:51
【问题描述】:

我想执行这两个函数,第一个函数“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

【问题讨论】:

  • 抱歉,不清楚您在问什么。你遇到了什么困难?
  • 需要执行两个函数,一个用于提取,另一个用于以csv格式输出。
  • 错误是什么?您要纠正的行为是什么?
  • 输出文件生成为#TYPE Selected.System.Management.Automation.PSCustomObject "UserAccount","NotExist","GroupNames" ,,
  • 这仍然不能解释什么没有按预期工作。是否要从输出 CSV 中删除 #TYPE ... 行?如果是这样,请将参数-NoType 添加到Export-Csv。

标签: powershell csv active-directory


【解决方案1】:

你的方法是错误的。让您的函数 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'

【讨论】:

  • 非常感谢@Ansgar Wiechers 的帮助。
  • @Ansgar Wiecher - 完成,非常感谢您的帮助,它的作品除外。刚开始学习 PowerShell 脚本,想用不同的方式导出 csv 格式的文件。我有一个关于 $input 变量的查询,这是关于什么的。
  • @Ansgar Wiecher - 再次感谢,您能否给我提供一篇关于 powershell 脚本的好文章,必须有 in & out of scripting。
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
相关资源
最近更新 更多