如何解决在 PowerShell 中从用户帐户中提取电子邮件地址
我需要将我在文件共享中的文件中找到的用户帐户映射到电子邮件地址(以便在以后的步骤中迁移它们)。
我快到了,但我收到了一种奇怪格式的电子邮件地址,如下所示:
@{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
。这些是等价的。
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] | fl *
将列出对象的所有属性。
$Files[0] | Get-Member
或 $Files[0] | gm
将列出对象的成员函数。
$Files[0].GetType().FullName
将列出对象的类型。您可以 Google 搜索并查看对象类的 .Net 参考。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。