簡體   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