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

Html PowerShell将名称与用户电子邮件地址和格式匹配为mailto,html,powershell,Html,Powershell,因此,我有下面的脚本,它扫描一个驱动器的文件夹,然后拉入一个带有文件夹名称和文件夹所有者的csv,然后匹配它们并输出到HTML 我正在寻找一种方法,在此使用PS在csv中查找用户名,从广告中获取他们的电子邮件地址,然后在HTML输出中将其作为mailto代码 function name($filename, $folderowners, $directory, $output){ $server = hostname $date = Get-Date -format "dd-MMM-y

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

我正在寻找一种方法,在此使用PS在csv中查找用户名,从广告中获取他们的电子邮件地址,然后在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"

尝试将类似以下内容添加到“选择”:

在使用Get-ADUser cmdlet之前,需要加载ActiveDirectory模块:

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

编辑:我希望ConvertTo Html能够自动创建来自mailto的可点击链接:user@example.comURI,但显然不是。由于ConvertTo Html会自动将角括号编码为Html实体,而我还没有找到防止这种情况发生的方法,因此您也不能将属性预先创建为Html片段。不过,类似的方法应该可以奏效:

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

以下是我如何避免使用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格式,但希望这能让您开始使用。

仅供将来的访问者参考,这需要Active Directory Powershell模块,它需要Windows 7或更高版本的操作系统。因此,它看起来像选择名称,@{n=Owner;e={$mappings[$\u.Name]}@{n=email;e={mailto:+Get ADUser$mappings[$\u.Name]-Properties-mail.mail}|第2个和第3个属性之间缺少逗号,但通常应该是这样的,是的。好的,如果我将用户的用户名放在电子邮件列中,它会添加到mailto中:email@mycompany.com那太好了。但是有没有办法让它成为一个HTML电子邮件链接呢?安斯加,这太棒了,你是一个传奇。我不是在试图找出一个w可以在我可以使用的电子邮件中插入一个主题行,你认为是否也可以插入相关的文件夹名称。我欠你一个啤酒伙伴,你在这里帮了我很大的忙。
#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>"


}