{"id":4684,"date":"2023-02-12T18:59:00","date_gmt":"2023-02-13T02:59:00","guid":{"rendered":"https:\/\/tungle.ca\/?p=4684"},"modified":"2023-03-13T17:32:24","modified_gmt":"2023-03-14T01:32:24","slug":"send-email-notification-before-ad-password-expiration","status":"publish","type":"post","link":"https:\/\/tungle.ca\/?p=4684","title":{"rendered":"Send email notification before Active Directory password expired"},"content":{"rendered":"\n<p>I am very glad to see there are more than 50,000 views in my blog when starting on counting &#8220;total visits&#8221; in my blog 7 months ago.  Below are the top views from my blog.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"331\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-4-1024x331.png\" alt=\"\" class=\"wp-image-4713\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-4-1024x331.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-4-300x97.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-4-768x248.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-4-1536x496.png 1536w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-4-200x65.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-4.png 1962w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Today, I want to share a small IT PowerShell script which is used to send notification to domain users before their password will be expired.<\/p>\n\n\n\n<p>According to MS link (https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/adschema\/a-msds-userpasswordexpirytimecomputed), ms-DS-User-Password-Expiry-Time-Computed attribute is used to contain user password&#8217;s expire time in Active Directory. So, using the PowerShell code below to query this value in AD.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties DisplayName, EmailAddress, msDS-UserPasswordExpiryTimeComputed<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/1-1024x268.png\" alt=\"\" class=\"wp-image-4685\" width=\"565\" height=\"147\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/1-1024x268.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/1-300x78.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/1-768x201.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/1-200x52.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/1.png 1416w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/figure>\n\n\n\n<p>However, the value &#8220;133214896056482435&#8221; does not have any meaning, so we use [datetime]::FromFileTime($_.&#8221;msDS-UserPasswordExpiryTimeComputed&#8221;) to convert this value from FromFileTime to DateTime format in PowerShell.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\"># Query AD user \n$Users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties DisplayName, EmailAddress, msDS-UserPasswordExpiryTimeComputed | `\nSelect-Object -Property DisplayName,  EmailAddress, @{Name=\"ExpirationDate\";Expression={[datetime]::FromFileTime($_.\"msDS-UserPasswordExpiryTimeComputed\")}} | `\nSort-Object \"ExpirationDate\" \n$users | sort-object ExpirationDate<\/code><\/pre>\n\n\n\n<p>The PowerShell outputs a list of Domain users corresponding to &#8220;Display Name&#8221;, &#8220;EmailAddress&#8221; and &#8220;ExpirationDate&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/2.png\" alt=\"\" class=\"wp-image-4686\" width=\"509\" height=\"97\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/2.png 902w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/2-300x57.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/2-768x146.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/2-200x38.png 200w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><\/figure>\n\n\n\n<p>Next, check if the password will be expired soon (14 days) and send email notification to domain users.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\"># Query AD user \n$Users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties DisplayName, EmailAddress, msDS-UserPasswordExpiryTimeComputed | `\nSelect-Object -Property DisplayName,  EmailAddress, @{Name=\"ExpirationDate\";Expression={[datetime]::FromFileTime($_.\"msDS-UserPasswordExpiryTimeComputed\")}} | `\nSort-Object \"ExpirationDate\" \n#$users | sort-object ExpirationDate\n\n# Check if the password will be expired soon and send email notification.\n$UserList = foreach ($User in $users) {\nif ($User.ExpirationDate -le (Get-Date).AddDays(14) -and $User.ExpirationDate -ge (Get-Date))  \n {\n    # Create PSCustomObject to save a list of users whom will have a password expired soon\n    [PSCustomObject]@{\n        Name       = $User.DisplayName\n        EmailAddress = $User.EmailAddress\n        ExpiryDate = $User.ExpirationDate\n        }\n}\n}\n$userlist | sort-object ExpirationDate<\/code><\/pre>\n\n\n\n<p>PowerShell outputs a list of domain users who have the domain password will be expired soon.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/3-1024x175.png\" alt=\"\" class=\"wp-image-4687\" width=\"589\" height=\"100\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/3-1024x175.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/3-300x51.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/3-768x131.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/3-200x34.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/3.png 1298w\" sizes=\"auto, (max-width: 589px) 100vw, 589px\" \/><\/figure>\n\n\n\n<p>Now, we will write an entire script to send email notification before AD password will be expired. <\/p>\n\n\n\n<p>Get a password from the console, encrypt it and save into the file C:\\Shared\\admincred.txt<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">Read-Host -Prompt \"Enter your tenant password\" -AsSecureString | ConvertFrom-SecureString | Out-File \"C:\\Shared\\admincred.txt\" <\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"139\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/4-1024x139.png\" alt=\"\" class=\"wp-image-4688\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/4-1024x139.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/4-300x41.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/4-768x104.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/4-1536x208.png 1536w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/4-2048x278.png 2048w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/4-200x27.png 200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">cat C:\\Shared\\admincred.txt<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"97\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/5-1024x97.png\" alt=\"\" class=\"wp-image-4689\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/5-1024x97.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/5-300x29.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/5-768x73.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/5-200x19.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/5.png 1304w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Below is a full PowerShell script to send email notification.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\"># PowerShell script that can send email notifications to domain users before their passwords will be expired.\n\n# Query AD user \n$Users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties DisplayName, EmailAddress, msDS-UserPasswordExpiryTimeComputed | `\nSelect-Object -Property DisplayName,  EmailAddress, @{Name=\"ExpirationDate\";Expression={[datetime]::FromFileTime($_.\"msDS-UserPasswordExpiryTimeComputed\")}} | `\nSort-Object \"ExpirationDate\" \n\n# Check if the password will be expired soon and send email notification.\n$UserList = foreach ($User in $users) {\nif ($User.ExpirationDate -le (Get-Date).AddDays(14) -and $User.ExpirationDate -ge (Get-Date))  \n {\n    # Create PSCustomObject to save a list of users whom will have a password expired soon\n    [PSCustomObject]@{\n        Name       = $User.DisplayName\n        EmailAddress = $User.EmailAddress\n        ExpiryDate = $User.ExpirationDate\n        }\n    # Send email\n    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12\n    $SMTP = \"smtp-mail.outlook.com\"\n    $From = \"admin@outlook.com\"\n    $username = \"admin@outlook.com\"\n    #Read-Host -Prompt \"Enter your tenant password\" -AsSecureString | ConvertFrom-SecureString | Out-File \"C:\\Shared\\admincred.txt\" \n    $Pass = Get-Content \"C:\\Shared\\admincred.txt\" | ConvertTo-SecureString\n    $cred = New-Object System.Management.Automation.PSCredential -argumentlist $username, $Pass\n    $Subject = \"Password Expiration Warning\"\n    $Body = \"Dear $($User.DisplayName),\" + \"`n`nYour password will expire in $User.ExpirationDate. Please change your password as soon as possible.\" + \"`n`nRegards,\" + \"`nIT Department\"\n    $EmailBody = \"Hello $($User.DisplayName),\" + \"`n`n\" +\n                 \"This is a reminder that your password will expire in $($User.ExpirationDate).\" + \"`n`n\" +\n                 \"Please take a moment to change your password to ensure continued access to your account.\" + \"`n`n\" +\n                 \"Thank you,\" + \"`n\" +\n                 \"IT Team\"\n\n   # Try to send the email, catch any exceptions, and log them\n    Try {\n   #   Send-MailMessage -From $From -To $User.EmailAddress -Subject $Subject -Body $EmailBody -smtpserver $SMTP -usessl -Credential $cred -Port 587\n      $EmailMessage = @{\n        From = $From\n        To = $User.EmailAddress\n        Subject = $Subject\n        Body = $EmailBody\n        SmtpServer = $SMTP\n        UseSsl = $True\n        Credential = $cred\n        Port = 587\n        }\n      Send-MailMessage @EmailMessage      \n    # Log success\n      Add-Content -Path \"C:\\Shared\\Logs\\EmailSuccess.log\" -Value \"Email sent successfully to $($User.DisplayName) at $($User.EmailAddress) on $(Get-Date) \"\n    }\n    Catch {\n      # Write the error message to the file EmailFailure.log under C:\\Shared\\Logs.\n      Write-Host \"Error sending email to $($User.DisplayName) at $($User.EmailAddress): $_\"\n      Add-Content -Path \"C:\\Shared\\Logs\\EmailFailure.Log\" -Value \"Error sending email to $($User.DisplayName) at $($User.EmailAddress) on $(Get-Date) $_\"\n    }\n}\n}\n$Userlist | sort-object ExpirationDate<\/code><\/pre>\n\n\n\n<p>Run the script.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">C:\\Users\\Administrator\\passwordnotify.PS1<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"85\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/6-1024x85.png\" alt=\"\" class=\"wp-image-4690\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/6-1024x85.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/6-300x25.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/6-768x64.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/6-200x17.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/6.png 1294w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Checking the EmailSuccess.log file, the script was successfully sent email notification to AD users before their password will be expired.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"424\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/7-1024x424.png\" alt=\"\" class=\"wp-image-4691\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/7-1024x424.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/7-300x124.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/7-768x318.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/7-200x83.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/7.png 1396w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The script sent an email notification to AD users.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"409\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/8-1024x409.png\" alt=\"\" class=\"wp-image-4692\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/8-1024x409.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/8-300x120.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/8-768x306.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/8-200x80.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/8.png 1248w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Finally, we can add the script into the Task Scheduler to check domain users&#8217; password expiration and send email notification.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"476\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-18.png\" alt=\"\" class=\"wp-image-4773\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-18.png 624w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-18-300x229.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-18-200x153.png 200w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/figure>\n\n\n\n<p>Trigger tab.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-2-1024x719.png\" alt=\"\" class=\"wp-image-4704\" width=\"610\" height=\"427\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-2-1024x719.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-2-300x211.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-2-768x539.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-2-200x140.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/image-2.png 1216w\" sizes=\"auto, (max-width: 610px) 100vw, 610px\" \/><\/figure>\n\n\n\n<p>Actions tab.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/11-1024x459.png\" alt=\"\" class=\"wp-image-4695\" width=\"619\" height=\"277\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/11-1024x459.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/11-300x134.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/11-768x344.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/11-200x90.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/11.png 1196w\" sizes=\"auto, (max-width: 619px) 100vw, 619px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">Actions Settings:\n\nProgram: %SystemRoot%\\system32\\WindowsPowerShell\\v1.0\\powershell.exe\n\nArguments: -ExecutionPolicy Bypass -File C:\\Shared\\passwordnotify.PS1<\/code><\/pre>\n\n\n\n<p>The task was running successfully in Task Scheduler history.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"795\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/16-1024x795.png\" alt=\"\" class=\"wp-image-4705\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/16-1024x795.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/16-300x233.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/16-768x596.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/16-1536x1192.png 1536w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/16-200x155.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/16.png 1930w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Checking logs in the EmailSuccess.log file to confirm the task scheduler was running successfully.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"389\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/17-1024x389.png\" alt=\"\" class=\"wp-image-4706\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/17-1024x389.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/17-300x114.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/17-768x292.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/17-200x76.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/17.png 1532w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The email notification was sent to Gmail&#8217;s account.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"427\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/18-1024x427.png\" alt=\"\" class=\"wp-image-4707\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/18-1024x427.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/18-300x125.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/18-768x320.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/18-200x83.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2023\/02\/18.png 1180w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>I am very glad to see there are more than 50,000 views in my blog when starting on counting &#8220;total visits&#8221; in my blog 7 months ago. Below are the top views from my blog. Today, I want to share a small IT PowerShell script which is used to send notification to domain users before [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,7],"tags":[10,12],"class_list":["post-4684","post","type-post","status-publish","format-standard","hentry","category-microsoft","category-powershell","tag-microsoft","tag-powershell"],"_links":{"self":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/4684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4684"}],"version-history":[{"count":19,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/4684\/revisions"}],"predecessor-version":[{"id":4783,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/4684\/revisions\/4783"}],"wp:attachment":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}