PowerShell将名称与用户电子邮件地址匹配,格式为mailto

时间:2013-04-30 19:12:14

标签: html powershell

所以我有下面的脚本扫描一个驱动器的文件夹,然后它拉入一个文件夹名称和文件夹所有者的csv,然后匹配它们并输出到HTML。

我正在寻找一种方法来使用PS来查找csv中的用户名从AD获取他们的电子邮件地址,然后在HTML的输出中将它们作为mailto代码。

function name($filename, $folderowners, $directory, $output){
  $server = hostname
  $date =  Get-Date -format "dd-MMM-yyyy HH:mm"
  $a = "<style>"
  $a = $a + "TABLE{border-width: 1px;border-style: solid;border-color:black;}"
  $a = $a + "Table{background-color:#ffffff;border-collapse: collapse;}"
  $a = $a + "TH{border-width:1px;padding:0px;border-style:solid;border-color:black;}"
  $a = $a + "TR{border-width:1px;padding-left:5px;border-style:solid;border-        
  color:black;}"
$a = $a + "TD{border-width:1px;padding-left:5px;border-style:solid;border-color:black;}"
$a = $a + "body{ font-family:Calibri; font-size:11pt;}"
$a = $a + "</style>"

$c = " <br></br> Content"

$b = Import-Csv $folderowners
$mappings = @{}
$b | % { $mappings.Add($_.FolderName, $_.Owner) }



Get-ChildItem $directory | where {$_.PSIsContainer -eq $True} | select Name,   
@{n="Owner";e={$mappings[$_.Name]}} | sort -property Name | 
ConvertTo-Html -head $a -PostContent $c | 
Out-File $output
}

name "gdrive" "\\server\location\gdrive.csv" "\\server\location$"       
"\\server\location\gdrive.html"

2 个答案:

答案 0 :(得分:1)

尝试将这样的内容添加到select

@{n="email";e={"mailto:"+((Get-ADUser $mappings[$_.Name] -Properties mail).mail)}

您必须先加载ActiveDirectory模块,然后才能使用Get-ADUser cmdlet:

Import-Module ActiveDirectory

在服务器版本上,可以通过服务器管理器或dism安装此模块。在客户端版本上,您必须先安装Remote Server Administration Tools,然后才能在“程序和功能”下添加模块。


修改:我希望ConvertTo-Html能够自动创建来自mailto:user@example.com URI的可点击链接,但显然不会。{由于ConvertTo-Html会自动将角括号编码为HTML实体,而我还没有找到防止这种情况的方法,因此您也不能仅将该属性预创建为HTML代码段。但是这样的事情应该有用:

ConvertTo-Html -head $a -PostContent $c | % {
  $_ -replace '(mailto:)([^<]*)', '<a href="$1$2">$2</a>'
} | Out-File $output

答案 1 :(得分:1)

以下是我将如何做到这一点(避免使用AD模块,只是因为它不在我的所有工作站上而且工作原理相同),并且假设您已经知道用户名:

#Setup Connection to Active Directory
$de = [ADSI]"LDAP://example.org:389/OU=Users,dc=example,dc=org"
$sr = New-Object System.DirectoryServices.DirectorySearcher($de)

设置与AD的连接后,我设置了LDAP搜索过滤器。这采用标准的ldap查询语法。

#Set Properties of Search
$sr.SearchScope = [System.DirectoryServices.SearchScope]"Subtree"
$sr.Filter = "(&(ObjectClass=user)(samaccountname=$Username))"

然后我执行搜索。

#Grab user's information from OU. If search returns nothing, they are not a user and the script exits.
$SearchResults = $sr.FindAll()

if($SearchResults.Count -gt 0){
    $emailAddr = $SearchResults[0].Properties["mail"]

    $mailto = "<a href=`"mailto:$emailAddr`">Contact User</a>"


}

您当然可以在任意位置发送$mailto变量,并将其更改为html,但希望这可以让您开始使用。