所以我有下面的脚本扫描一个驱动器的文件夹,然后它拉入一个文件夹名称和文件夹所有者的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"
答案 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,但希望这可以让您开始使用。