首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于用户名输入CSV powershell脚本导出AD信息CSV

基于用户名输入CSV powershell脚本导出AD信息CSV
EN

Stack Overflow用户
提问于 2014-01-17 08:25:58
回答 2查看 12K关注 0票数 0

我需要传入一个用户列表,然后返回一个包含名称、SamAccountName、电子邮件地址的CSV

我的输入CSV如下:

代码语言:javascript
运行
复制
"John Doe"
"Jane Doe"

这是我正在使用的当前代码。我不确定问题出在哪里。用户确实存在于指定的"DC“下...

代码语言:javascript
运行
复制
Import-Module ActiveDirectory
Function Get-ADUsersDetailsCSV
{
    [CmdletBinding()]
    Param
    (
    [Parameter(Mandatory=$True,Position=1)]
    [String]$InCSV,

    [Parameter(Mandatory=$True)]
    [String]$OutCSV
    )

If($InCSV)
{
    If(Test-Path -Path $InCSV)
    {
        $USERS = Import-CSV $InCSV -Header Name
        $USERS|Foreach{Get-ADUser $_.Name -Properties * |Select Name, SAMAccountName, mail}|Export-CSV -Path $OutCSV

    } #End Test that the files exist

    Else
    {
        Write-Warning "Cannot find path '$InCSV' because it does not exist."
    }


} #End Ensure Input and Output files were provided

} #End Function Get-UsersDetailsCSV

下面是错误:

代码语言:javascript
运行
复制
Get-ADUser : Cannot find an object with identity: 'John Doe' under: 'DC=blah,DC=com'.
At U:\data\GetADUserInfo PS Script\GetADUsersDetailsCSV.psm1:19 char:28
+             $USERS|Foreach{Get-ADUser $_.Name -Properties * |Select Name, SAMAcc ...
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (Name:ADUser) [Get-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : Cannot find an object with identity: 'John Doe' under: 'DC=blah,DC=com'.,Microsoft.ActiveDirectory.Management.Commands.GetADUser
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-17 08:49:46

如果运行Get-Help Get-ADUser,您将找到Identity参数的以下描述:

代码语言:javascript
运行
复制
-Identity <ADUser>
        Specifies an Active Directory user object by providing one of the following property values. The identifier in parentheses is the LDAP display name for the attribute.

      Distinguished Name 
        Example:  CN=SaraDavis,CN=Europe,CN=Users,DC=corp,DC=contoso,DC=com
      GUID (objectGUID) 
        Example: 599c3d2e-f72d-4d20-8a88-030d99495f20 
      Security Identifier (objectSid) 
        Example: S-1-5-21-3165297888-301567370-576410423-1103
      SAM account name  (sAMAccountName) 
        Example: saradavis

请注意,名称不是它将接受的身份之一。名称在AD中不是索引属性,因为它不能保证是唯一的。它可能在您的域中,但AD不知道这一点。要根据任何其他属性获取用户,您需要使用过滤器,以便您的脚本看起来像这样(我随意折叠以提高可读性)

代码语言:javascript
运行
复制
$USERS | Foreach{
Get-ADUser -filter "Name -eq  '$($_.name)'" -Properties mail |
Select Name, SAMAccountName, mail}|
Export-CSV -Path $OutCSV

还请注意,Name和SAMAccountName是Get-ADUser将返回的公共属性,因此您必须指定的唯一其他属性是Mail。

我认为这将照顾到额外的需求,但我没有测试它:

代码语言:javascript
运行
复制
$USERS | Foreach{
  $getuser = 
    Get-ADUser -filter "Name -eq  '$($_.name)'" -Properties mail |
    Select Name, SAMAccountName, mail

  if ($getuser) {$getuser}
   else {[PSCustomObject]@{Name=$_;SAMAccountName='Not found';mail=$null}}
 } |
Export-CSV -Path $OutCSV
票数 1
EN

Stack Overflow用户

发布于 2014-01-17 08:48:06

这不起作用的原因是,Get-ADUser cmdlet使用的-Identity参数在SamAccount属性上搜索AD,而不是在Name属性上搜索AD以检索用户。因此,搜索"John Doe“将不起作用,相反,它希望您使用SamAccount名称"JDoe”进行搜索。

要按名称搜索,您必须按名称过滤结果,如下所示:

代码语言:javascript
运行
复制
Get-ADUser -Filter {Name -eq "John Doe"}

因此,你的代码变成了:

代码语言:javascript
运行
复制
$USERS|Foreach{Get-ADUser -Filter {Name -eq $_.Name} -Properties * |Select Name, SAMAccountName, mail}|Export-CSV -Path $OutCSV
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21175652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档