从SAMaccountname获取用户电子邮件地址

问题描述 投票:1回答:2

我是PowerShell的新手,但实际上我需要一个脚本,所以我开始自己阅读这些内容并找到了powershell。

我有一个用户名单,如:

  • xyxz
  • 域名\ xyxz.xyxc

此脚本应搜索我的用户列表中的所有samaccountname,并为每个samaccountname提供电子邮件地址。

获取内容C:\ Users \ xxxxx \ Desktop \ Users.txt | forEach {Get-ADUser“我不知道如何指定用户名”|选择邮件| Export-Csv output.csv}

这是我写的脚本,但我不知道如何完成它以使其工作。我知道它做得不好但我不想在没有自己做某事的情况下写一些文字。

powershell active-directory
2个回答
2
投票

你有点亲近

Get-Content C:\Users\xxxxx\Desktop\Users.txt | forEach { Get-ADUser $_ -properties EmailAddress} | select -ExpandProperty EmailAddress | Out-File output.csv 

应该做的伎俩(如果你的txt文件包含samid,每行只有一个)。

您可以使用$_访问管道内的对象。另外要使用select获取属性的String值,必须使用-ExpandProperty

在这种情况下,您还必须专门选择属性(EmailAddress),因为默认情况下仅报告一组有限的属性以减少工作负载(这通过指定-properties参数来完成)。


1
投票

你的命令是正确的。但是,Get-ADUser似乎不接受UPN or Down-Level Logon Name格式的用户名。 要查询当前用户登录的域以外的域,您需要使用-Server选项。此选项接受FQDN或NetBIOS域名。另一件事:默认情况下,Get-ADUser仅返回默认属性集(请参阅this列表以了解默认属性),并且用户的电子邮件地址不是默认属性,因此我们需要使用-Properties选项将其添加到返回值。

命令看起来像这样:

$defaultDomain = $env:USERDOMAIN
$usersFilePath = C:\Users\xxxxx\Desktop\Users.txt
Get-Content $usersFilePath | %{
    if ($_.Contains("\")) {
    @{username = $_.Split("\")[1]; server = $_.Split("\")[0]}
    } 
    elseif ($_.Contains("@")) {
        @{username = $_.Split("@")[0]; server = $_.Split("@")[1]}
    }
    else {
        @{username = $_; server = $defaultDomain}
    }
} | %{ Get-ADUser -Identity $_.username -Properties Mail -Server $_.server} | select -ExpandProperty mail
© www.soinside.com 2019 - 2024. All rights reserved.