2

所以我有下面的脚本,它扫描驱动器中的文件夹,然后拉入一个带有文件夹名称和文件夹所有者的 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"
4

2 回答 2

1

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

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

您需要先加载ActiveDirectory模块,然后才能使用Get-ADUsercmdlet:

Import-Module ActiveDirectory

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


编辑:我本来希望ConvertTo-Htmlmailto:user@example.comURI 自动创建可点击的链接,但显然它没有。由于ConvertTo-Html自动将尖括号编码为 HTML 实体,而我还没有找到防止这种情况的方法,因此您也不能将属性预先创建为 HTML 片段。不过,这样的事情应该可以工作:

ConvertTo-Html -head $a -PostContent $c | % {
  $_ -replace '(mailto:)([^<]*)', '<a href="$1$2">$2</a>'
} | Out-File $output
于 2013-04-30T19:39:01.930 回答
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,但希望这可以帮助您入门。

于 2013-04-30T19:48:20.370 回答