[英]Powershell check email address against a list of email addresses
[英]Extracting email addresses from user account in PowerShell
我需要将在文件共享中的文件上找到的 map 用户帐户转移到 email 地址(以便在后续步骤中迁移它们)。
我快到了,但我得到了一种奇怪格式的 email 地址,如下所示:
@{EmailAddress=first.last@xx.xxxxx.com}
我怎样才能像普通的字符串变量一样得到它呢? 喜欢: "first.last@xx.xxxxx.com"
$Files = Get-ChildItem -Path $SourceFilesPath -Force -Recurse
ForEach ($File in $Files)
{
$createdDate = (Get-Item "$($File.Directory)\$($File.Name)").CreationTime
$modifiedDate = (Get-Item "$($File.Directory)\$($File.Name)").LastWriteTime
$createdBy = ((Get-Acl -Path "$($File.Directory)\$($File.Name)").Owner).Split("\")[-1]
$email = (Get-ADUser $createdBy -Properties EmailAddress) | select EmailAddress
Write-host $email
}
我会使用(Get-ADUser $createdBy -Properties EmailAddress).EmailAddress
或Get-ADUser $createdBy -Properties EmailAddress | Select-Object -ExpandProperty EmailAddress
Get-ADUser $createdBy -Properties EmailAddress | Select-Object -ExpandProperty EmailAddress
。 这些是等价的。
Select-Object 将显示一个属性,但即使您只有一个 select,它仍会将其保留为 object 的属性。 要仅提取属性值,您需要指定-ExpandProperty
参数。 但是,当您这样做时,您只能指定一个要扩展的属性。
您还可以真正简化您的代码。 当您已经获得所需的大部分信息时,您就是在重复自己。
$Files = Get-ChildItem -Path $SourceFilesPath -Force -Recurse
ForEach ($File in $Files)
{
$createdDate = $File.CreationTime
$modifiedDate = $File.LastWriteTime
$createdBy = $File.GetAccessControl().Owner.Split("\")[-1]
$email = (Get-ADUser $createdBy -Properties EmailAddress).EmailAddress
Write-host $email
}
此外,您不需要指定"$($File.Directory)\$($File.Name)"
。 您可以只指定$File.FullName
。
了解 Powershell 的第一件事是一些语言自省。
$Files[0] | Format-List -Properties *
$Files[0] | Format-List -Properties *
或$Files[0] | fl *
$Files[0] | fl *
将列出 object 的所有属性。
$Files[0] | Get-Member
$Files[0] | Get-Member
或$Files[0] | gm
$Files[0] | gm
将列出 object 的成员函数。
$Files[0].GetType().FullName
将列出 object 的类型。 您可以通过 Google 搜索并查看 object class 的 .Net 参考资料。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.