繁体   English   中英

从 PowerShell 中的用户帐户中提取 email 地址

[英]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).EmailAddressGet-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM