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