{"id":534,"date":"2024-05-03T08:00:00","date_gmt":"2024-05-03T13:00:00","guid":{"rendered":"https:\/\/www.sqltabletalk.com\/?p=534"},"modified":"2024-04-29T21:39:00","modified_gmt":"2024-04-30T02:39:00","slug":"automated-database-health-checks-powershell","status":"publish","type":"post","link":"https:\/\/www.sqltabletalk.com\/?p=534","title":{"rendered":"Automated Database Health Checks: Leveraging SMO in PowerShell"},"content":{"rendered":"<p><strong>Introduction<\/strong><\/p>\n<p>Maintaining optimal database health is paramount in today&#8217;s data-centric landscape. Manual monitoring can be inefficient and error-prone, particularly in large or dynamic environments. This blog post looks into how SQL Server Management Objects (SMO) combined with PowerShell can streamline and automate database health checks, enhancing both reliability and operational efficiency. Each line of PowerShell scripting will be explained along the way.<\/p>\n<p><strong>Benefits of Automated Health Checks:<\/strong><\/p>\n<ul>\n<li><strong>Reduced Risk:<\/strong> Automated checks facilitate early detection of potential issues, mitigating risks associated with data loss, performance bottlenecks, and unplanned downtime.<\/li>\n<li><strong>Improved Efficiency:<\/strong> Automation frees up valuable time, allowing IT staff to focus on more strategic tasks rather than routine maintenance.<\/li>\n<li><strong>Standardization:<\/strong> Scripts provide a uniform approach to monitoring across multiple databases and servers, ensuring consistent health checks.<\/li>\n<li><strong>Proactive Monitoring:<\/strong> Regularly scheduled checks help maintain databases in peak condition, preventing issues before they become critical.<\/li>\n<\/ul>\n<h2>Building Your Health Check Script with SMO:<\/h2>\n<p><strong>PowerShell and SQL Server Management Objects (SMO):<\/strong><\/p>\n<p>This section leverages PowerShell with SQL Server Management Objects (SMO) to extract database information from SQL Server. SMO provides a comprehensive set of classes that empower you to programmatically manage and monitor SQL Server environments.<\/p>\n<p><strong>1. Loading the SMO Assembly:<\/strong><\/p>\n<p><strong>PowerShell<\/strong><\/p>\n<pre><code>[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null\n<\/code><\/pre>\n<p>This line dynamically loads the Microsoft.SqlServer.SMO assembly. This assembly contains the necessary classes for interacting with SQL Server objects like databases using PowerShell cmdlets. The <code>| Out-Null<\/code> part suppresses any output generated during the loading process.<\/p>\n<p><strong>2. Connecting to SQL Server:<\/strong><\/p>\n<p><strong>PowerShell<\/strong><\/p>\n<pre><code>$dataSource = \"YourServerName\"  # Replace with actual server name or instance\n$server = New-Object Microsoft.SqlServer.Management.Smo.Server($dataSource)\n<\/code><\/pre>\n<p>Here, we establish a connection to the SQL Server instance.<\/p>\n<ul>\n<li><strong>$dataSource:<\/strong> This variable stores the server name or hostname of the SQL Server instance you want to connect to. Remember to replace &#8220;YourServerName&#8221; with the actual server name.<\/li>\n<li><strong>$server = New-Object Microsoft.SqlServer.Management.Smo.Server($dataSource):<\/strong> This line creates a new Server object using the New-Object cmdlet. The Server object represents the SQL Server instance you&#8217;re connecting to, and it provides access to various functionalities through its properties and methods.<\/li>\n<\/ul>\n<p><strong>3. Retrieving Databases:<\/strong><\/p>\n<p><strong>PowerShell<\/strong><\/p>\n<pre><code>$databases = $server.Databases\n<\/code><\/pre>\n<p>This line retrieves all databases residing on the connected SQL Server instance.<\/p>\n<p><strong>$databases = $server.Databases:<\/strong> The Databases property of the $server object is a collection that contains all the databases on that server. We assign this collection to the $databases variable for further processing.<\/p>\n<p><strong>4. Calculating Database Size and Free Space:<\/strong><\/p>\n<p><strong>PowerShell<\/strong><\/p>\n<pre><code>foreach ($db in $databases) {\n  $size = \"{0:N0} MB\" -f ($db.Size)\n  $freeSpace = \"{0:N0} MB\" -f ($db.SpaceAvailable \/ (1024 * 1024))\n  $status = $db.Status\n\n  Write-Host \"Database: $($db.Name)\"\n  Write-Host \"  Size: $size\"\n  Write-Host \"  Free Space: $freeSpace\"\n  Write-Host \"  Status: $status\"\n  Write-Host \"---\"\n}\n<\/code><\/pre>\n<p>This <code>foreach<\/code> loop iterates through each database in the <code>$databases<\/code> collection. Within the loop, we perform calculations and retrieve information for each database:<\/p>\n<ul>\n<li><strong>$db:<\/strong> This variable represents each individual database object within the <code>$databases<\/code> collection during each iteration of the loop.<\/li>\n<li><strong>$size = &#8220;{0:N0} MB&#8221; -f ($db.Size):<\/strong> This line calculates the total size of the current database ($db) stored in the Size property. The .Size property returns the size in bytes. We use string formatting with &#8220;{0:N0} MB&#8221; to format the size as a human-readable number of megabytes (MB), and <code>-f<\/code> to apply the formatting.<\/li>\n<li><strong>$freeSpace = &#8220;{0:N0} MB&#8221; -f ($db.SpaceAvailable \/ (1024 * 1024)):<\/strong> This line calculates the free space available within the current database ($db). The .SpaceAvailable property returns the available space in bytes. We perform a calculation to convert it to MB and apply formatting similar to the total size calculation.<\/li>\n<li><strong>$status = $db.Status:<\/strong> This line retrieves the current status of the database ($db). The .Status property can return values like &#8220;Online,&#8221; &#8220;Offline,&#8221; or &#8220;Restoring.&#8221;<\/li>\n<li><strong>Write-Host commands:<\/strong> These lines display information about the current database, including its name, size, free space, and status, in a user-friendly format.<\/li>\n<\/ul>\n<p><strong>5. Error Handling (Optional):<\/strong><\/p>\n<p><strong>PowerShell<\/strong><\/p>\n<pre><code>try {\n    # Connection and command execution\n} catch {\n    Write-Error \"An error occurred: $_\"\n}\n<\/code><\/pre>\n<p>While not included in the original example, incorporating error handling is a good practice. The provided code snippet demonstrates a basic try&#8230;catch block.<\/p>\n<ul>\n<li><strong>try&#8230;catch:<\/strong> This block allows you to wrap the code responsible for connecting to the server and retrieving database information within the try block.<\/li>\n<li><strong>catch:<\/strong> If any errors occur during connection or command execution, the catch block captures the error and displays a message using <code>Write-Error<\/code>.<\/li>\n<\/ul>\n<p><strong>Customizable Output and Scheduling:<\/strong><br \/>\nConsider enhancing the output readability or integrating the script with existing monitoring tools:<\/p>\n<ul>\n<li><strong>Output Customization:<\/strong> Use <code>Out-GridView<\/code> for a GUI display or <code>Export-Csv<\/code> to generate shareable reports.<\/li>\n<li><strong>Scheduling:<\/strong> Automate script execution using Windows Task Scheduler or SQL Server Agent to run health checks at regular intervals.<\/li>\n<\/ul>\n<p><strong>Conclusion:<\/strong><\/p>\n<p>Automating database health checks with PowerShell and SMO not only optimizes the monitoring tasks but also enhances the reliability and performance of your SQL Server environment. As you refine these scripts, you&#8217;ll be able to tailor checks and outputs to meet specific administrative and operational needs, paving the way for a more efficient and proactive database management strategy.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Safeguard your databases with automated PowerShell scripts! This guide walks you through creating scripts to check critical database health metrics like size and free space.  Learn how to connect to SQL Server and format results for clarity. The post also explores optional features for enhanced functionality.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[55,54,53,21],"tags":[123,56,57],"class_list":["post-534","post","type-post","status-publish","format-standard","hentry","category-automation","category-maintenance","category-powershell","category-tutorial","tag-health-checks","tag-maintenance","tag-scripting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automated SQL Server Database Health Checks with PowerShell<\/title>\n<meta name=\"description\" content=\"Safeguard your databases with automated PowerShell scripts! This guide walks you through creating scripts to check critical database health metrics like size and free space. Learn how to connect to SQL Server and format results for clarity. The post also explores optional features for enhanced functionality.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqltabletalk.com\/?p=534\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automated SQL Server Database Health Checks with PowerShell\" \/>\n<meta property=\"og:description\" content=\"Safeguard your databases with automated PowerShell scripts! This guide walks you through creating scripts to check critical database health metrics like size and free space. Learn how to connect to SQL Server and format results for clarity. The post also explores optional features for enhanced functionality.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqltabletalk.com\/?p=534\" \/>\n<meta property=\"og:site_name\" content=\"SQL Table Talk\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-03T13:00:00+00:00\" \/>\n<meta name=\"author\" content=\"Stephen Planck\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stephen Planck\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=534#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=534\"},\"author\":{\"name\":\"Stephen Planck\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"headline\":\"Automated Database Health Checks: Leveraging SMO in PowerShell\",\"datePublished\":\"2024-05-03T13:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=534\"},\"wordCount\":741,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"keywords\":[\"health checks\",\"maintenance\",\"scripting\"],\"articleSection\":[\"Automation\",\"Maintenance\",\"PowerShell\",\"Tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=534#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=534\",\"url\":\"https:\/\/www.sqltabletalk.com\/?p=534\",\"name\":\"Automated SQL Server Database Health Checks with PowerShell\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\"},\"datePublished\":\"2024-05-03T13:00:00+00:00\",\"description\":\"Safeguard your databases with automated PowerShell scripts! This guide walks you through creating scripts to check critical database health metrics like size and free space. Learn how to connect to SQL Server and format results for clarity. The post also explores optional features for enhanced functionality.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=534#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqltabletalk.com\/?p=534\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqltabletalk.com\/?p=534#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqltabletalk.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automated Database Health Checks: Leveraging SMO in PowerShell\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#website\",\"url\":\"https:\/\/www.sqltabletalk.com\/\",\"name\":\"SQL Table Talk\",\"description\":\"Breaking Down SQL Server, One Post at a Time.\",\"publisher\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqltabletalk.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0\",\"name\":\"Stephen Planck\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g\",\"caption\":\"Stephen Planck\"},\"logo\":{\"@id\":\"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/dexterwiki.com\",\"https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI\",\"https:\/\/www.youtube.com\/linuxmate\"],\"url\":\"https:\/\/www.sqltabletalk.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automated SQL Server Database Health Checks with PowerShell","description":"Safeguard your databases with automated PowerShell scripts! This guide walks you through creating scripts to check critical database health metrics like size and free space. Learn how to connect to SQL Server and format results for clarity. The post also explores optional features for enhanced functionality.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqltabletalk.com\/?p=534","og_locale":"en_US","og_type":"article","og_title":"Automated SQL Server Database Health Checks with PowerShell","og_description":"Safeguard your databases with automated PowerShell scripts! This guide walks you through creating scripts to check critical database health metrics like size and free space. Learn how to connect to SQL Server and format results for clarity. The post also explores optional features for enhanced functionality.","og_url":"https:\/\/www.sqltabletalk.com\/?p=534","og_site_name":"SQL Table Talk","article_published_time":"2024-05-03T13:00:00+00:00","author":"Stephen Planck","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Stephen Planck","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqltabletalk.com\/?p=534#article","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/?p=534"},"author":{"name":"Stephen Planck","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"headline":"Automated Database Health Checks: Leveraging SMO in PowerShell","datePublished":"2024-05-03T13:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqltabletalk.com\/?p=534"},"wordCount":741,"commentCount":1,"publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"keywords":["health checks","maintenance","scripting"],"articleSection":["Automation","Maintenance","PowerShell","Tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqltabletalk.com\/?p=534#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqltabletalk.com\/?p=534","url":"https:\/\/www.sqltabletalk.com\/?p=534","name":"Automated SQL Server Database Health Checks with PowerShell","isPartOf":{"@id":"https:\/\/www.sqltabletalk.com\/#website"},"datePublished":"2024-05-03T13:00:00+00:00","description":"Safeguard your databases with automated PowerShell scripts! This guide walks you through creating scripts to check critical database health metrics like size and free space. Learn how to connect to SQL Server and format results for clarity. The post also explores optional features for enhanced functionality.","breadcrumb":{"@id":"https:\/\/www.sqltabletalk.com\/?p=534#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqltabletalk.com\/?p=534"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqltabletalk.com\/?p=534#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqltabletalk.com\/"},{"@type":"ListItem","position":2,"name":"Automated Database Health Checks: Leveraging SMO in PowerShell"}]},{"@type":"WebSite","@id":"https:\/\/www.sqltabletalk.com\/#website","url":"https:\/\/www.sqltabletalk.com\/","name":"SQL Table Talk","description":"Breaking Down SQL Server, One Post at a Time.","publisher":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqltabletalk.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/1947e42a9438bccd91691d8b791888e0","name":"Stephen Planck","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64181114edc3de3d99072c049bcec024f025c9536dc89fc8ff1bac58976ca81e?s=96&d=mm&r=g","caption":"Stephen Planck"},"logo":{"@id":"https:\/\/www.sqltabletalk.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/dexterwiki.com","https:\/\/www.linkedin.com\/in\/stephen-planck-4611b692?trk=people-guest_people_search-card&challengeId=AQErf8gbBmcVMwAAAYsyIsxO-0UvU8z7cHrBpZoo_n3xt9qEKpRN5B_jd_LmAMu-OfeArkQ7GDjobJ2uRoQQV35EQdh_rR6kxA&submissionId=09de7067-c335-8e17-40b8-8dc32b60ed6c&challengeSource=AgEcUCw35zpPmAAAAYsyI4vAWhJTV7Nt4vZYKc3V1qiDBpCkKgUvtlOBgYXcE84&challegeType=AgE_wZiTT09IAQAAAYsyI4vDmNvbZIYe6XHju5V2bXVvM3IVxnJslgY&memberId=AgESFTkUShzs_gAAAYsyI4vGYk0Gic1uc5kB6cKOABA26Gw&recognizeDevice=AgHdSZyUSI5CEwAAAYsyI4vKd_koF9JgpsCJShT8QfbK1QMiv8SI","https:\/\/www.youtube.com\/linuxmate"],"url":"https:\/\/www.sqltabletalk.com\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=534"}],"version-history":[{"count":1,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/534\/revisions"}],"predecessor-version":[{"id":535,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=\/wp\/v2\/posts\/534\/revisions\/535"}],"wp:attachment":[{"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqltabletalk.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}