{"id":480,"date":"2018-12-03T08:00:50","date_gmt":"2018-12-03T14:00:50","guid":{"rendered":"https:\/\/practicalpowershell.com\/?p=480"},"modified":"2020-03-13T22:02:13","modified_gmt":"2020-03-14T04:02:13","slug":"adding-a-progress-bar","status":"publish","type":"post","link":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/","title":{"rendered":"Adding a Progress Bar"},"content":{"rendered":"<p><a href=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?resize=150%2C150&#038;ssl=1\" alt=\"\" width=\"150\" height=\"150\" class=\"alignleft size-thumbnail wp-image-481\" srcset=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?resize=100%2C100&amp;ssl=1 100w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?zoom=2&amp;resize=150%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?zoom=3&amp;resize=150%2C150&amp;ssl=1 450w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>When dealing with complex scripts with lots of running parts and that take some time to complete, it is convenient to have some sort of progress indicator to help visually indicate where a script is in a particular stage. In order to be successful we would need a count of how many items are being processed and what number in that list we are at. From there were can perform some simple math and then that can translate into our progress.<BR><br \/>\nWhere to get started? First we can see what cmdlets are available for progress in PowerShell:<br \/>\n[sourcecode language=&#8221;powershell&#8221;]<br \/>\nGet-Command *progress*<br \/>\nWe find that there is only one cmdlet available for progress in PowerShell:&lt;BR&gt;<br \/>\n&lt;em&gt;Name<br \/>\n&#8212;-<br \/>\nWrite-Progress&lt;\/em&gt;&lt;BR&gt;<br \/>\nIn PowerShell progress&lt;BR&gt;<br \/>\nPractical Examples of a Progress Bar&lt;BR&gt;<br \/>\n&lt;em&gt;Example 1&lt;\/em&gt;&lt;BR&gt;<br \/>\nIn this example we have a script that is performing a series of tasks. These tasks are responsible for gathering information on an environment. The environment could be anything from Exchange, Active Directory or Office 365. The point would be to concentrate on a series of tasks. Now in this script, we have<br \/>\nSample Code (not a complete script):<br \/>\n[sourcecode language=&quot;powershell&quot;]<br \/>\n# Variables<br \/>\n$Counter = 0<br \/>\n$Tasks = &quot;Task 1&quot;,&quot;Task 2&quot;,&quot;Task 3&quot;,&quot;Task 4&quot;,&quot;Task 5&quot;,&quot;Task 6&quot;,&quot;Task 7&quot;,&quot;Task 8&quot;,&quot;Task 9&quot;,&quot;Task 10&quot;,&quot;Task 11&quot;,&quot;Task 12&quot;,&quot;Task 13&quot;,&quot;Task 14&quot;,&quot;Task 15&quot;<br \/>\nFunction Task1 {<br \/>\n# Gather AD Domain information<br \/>\n$ADDomains = (Get-ADForest).Domains | Out-file $Destination -Append<br \/>\n}<br \/>\nFunction Task2 {<br \/>\n# Group Policy Check<br \/>\n$ScriptFile = &quot;GPOCheck.ps1&quot;<br \/>\n$Fullpath = &quot;.\\&quot;+$ScriptFile<br \/>\nInvoke-Expression $FullPath<br \/>\n}<br \/>\nForeach ($Task in $Tasks) {<br \/>\n$Counter ++<br \/>\nWrite-Progress -Activity &quot;Performing Tasks&quot; -Status &quot;In progress: $Task of 15&quot;<br \/>\n$Task<br \/>\n}<br \/>\n[\/sourcecode]<br \/>\nNote that when a task starts, the counter going up and we know we are on task number ## of 15. Each of these tasks is a separate function, which makes it easier for use to call and monitor the script progress:<br \/>\n<a href=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress02a.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress02a.jpg?resize=442%2C227&#038;ssl=1\" alt=\"\" width=\"442\" height=\"227\" class=\"aligncenter size-full wp-image-484\" srcset=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress02a.jpg?w=442&amp;ssl=1 442w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress02a.jpg?resize=300%2C154&amp;ssl=1 300w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/a><br \/>\nThis way if you have a long running script or there are tasks that take some time to run, you will at least know how far a script has progressed.<BR><br \/>\n<em>Example 2<\/em><br \/>\nFor this example we&#8217;ll use the Write-Progress cmdlet to provide a percentage done instead of a overall number like Example 1. We can simply modify the Foreach loop to display a percentage instead of a task number like so:<br \/>\n[sourcecode language=&#8221;powershell&#8221;]<br \/>\nForeach ($Task in $Tasks) {<br \/>\n$Counter ++<br \/>\n$Percent = $Counter\/15<br \/>\n$I = [math]::Round($Percent,4)*100<br \/>\nWrite-Progress -Activity &quot;Performing Tasks&quot; -Status &quot;Task Progress: $I%&quot; -Percent $I<br \/>\n$Task<br \/>\n}<br \/>\n[\/sourcecode]<br \/>\nThis will then provide a progress bar that looks like this instead:<br \/>\n<a href=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress03.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress03.jpg?resize=640%2C172&#038;ssl=1\" alt=\"\" width=\"640\" height=\"172\" class=\"aligncenter size-full wp-image-485\" srcset=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress03.jpg?w=883&amp;ssl=1 883w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress03.jpg?resize=300%2C81&amp;ssl=1 300w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress03.jpg?resize=768%2C206&amp;ssl=1 768w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress03.jpg?resize=600%2C161&amp;ssl=1 600w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><br \/>\n<em>Inner Loops<\/em><BR><br \/>\nIn addition to the main progress bars, there is also the option to run a progress bad for an inner loop if you use those. So, for example, if a function has some sub tasks that it runs, this progress bar can then relay where it is, while inside of the main running task.<BR><br \/>\n<em>Sample Code:<\/em><BR><br \/>\n[sourcecode language=&#8221;powershell&#8221;]<br \/>\nFunction Task2 {<br \/>\n$SubCounter = 0<br \/>\n$Subtasks = &quot;SubTask 1&quot;,&quot;SubTask 2&quot;,&quot;SubTask 3&quot;,&quot;SubTask 4&quot;,&quot;SubTask 5&quot;<br \/>\nForeach ($SubTask in $Subtasks) {<br \/>\n$SubCounter ++<br \/>\nWrite-Progress -Activity &quot;Performing Tasks&quot; -Status &quot;In progress: $Task of 15&quot;<br \/>\nWrite-Progress -Id 1 -Activity &quot;Performing SubTasks&quot; -Status &quot;In Progress: $SubTask of 10&quot; -CurrentOperation InnerLoop<br \/>\nStart-Sleep 2<br \/>\n}<br \/>\n}<br \/>\nForeach ($Task in $Tasks) {<br \/>\n$Counter ++<br \/>\nWrite-Progress -Activity &quot;Performing Tasks&quot; -Status &quot;In progress: $Task of 15&quot;<br \/>\nInvoke-Expression $Task<br \/>\n}<br \/>\n[\/sourcecode]<br \/>\n<a href=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress04.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress04.jpg?resize=519%2C258&#038;ssl=1\" alt=\"\" width=\"519\" height=\"258\" class=\"aligncenter size-full wp-image-486\" srcset=\"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress04.jpg?w=519&amp;ssl=1 519w, https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress04.jpg?resize=300%2C149&amp;ssl=1 300w\" sizes=\"auto, (max-width: 519px) 100vw, 519px\" \/><\/a><br \/>\nThis would be useful if you have a complex level of tasks and functions. Having a visual clue as to how far the script has progress, even in the smaller tasks of a function, are useful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When dealing with complex scripts with lots of running parts and that take some time to complete, it is convenient to have some sort of progress indicator to help visually indicate where a script is in a particular stage. In order to be successful we would need a count of how many items are being [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rop_custom_images_group":[],"rop_custom_messages_group":[],"rop_publish_now":"initial","rop_publish_now_accounts":[],"rop_publish_now_history":[],"rop_publish_now_status":"pending","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-480","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Adding a Progress Bar - Practical PowerShell<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Adding a Progress Bar - Practical PowerShell\" \/>\n<meta property=\"og:description\" content=\"When dealing with complex scripts with lots of running parts and that take some time to complete, it is convenient to have some sort of progress indicator to help visually indicate where a script is in a particular stage. In order to be successful we would need a count of how many items are being [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/\" \/>\n<meta property=\"og:site_name\" content=\"Practical PowerShell\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-03T14:00:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-03-14T04:02:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05-150x150.jpg\" \/>\n<meta name=\"author\" content=\"damian\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"damian\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/\"},\"author\":{\"name\":\"damian\",\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/#\\\/schema\\\/person\\\/4d0733c81966e744aabbb49f56d64deb\"},\"headline\":\"Adding a Progress Bar\",\"datePublished\":\"2018-12-03T14:00:50+00:00\",\"dateModified\":\"2020-03-14T04:02:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/\"},\"wordCount\":642,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/#\\\/schema\\\/person\\\/4d0733c81966e744aabbb49f56d64deb\"},\"image\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/practicalpowershell.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/Progress05-150x150.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/\",\"url\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/\",\"name\":\"Adding a Progress Bar - Practical PowerShell\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/practicalpowershell.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/Progress05-150x150.jpg\",\"datePublished\":\"2018-12-03T14:00:50+00:00\",\"dateModified\":\"2020-03-14T04:02:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/practicalpowershell.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/Progress05.jpg?fit=583%2C234&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/practicalpowershell.com\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/Progress05.jpg?fit=583%2C234&ssl=1\",\"width\":583,\"height\":234},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/adding-a-progress-bar\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/practicalpowershell.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Adding a Progress Bar\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/#website\",\"url\":\"https:\\\/\\\/practicalpowershell.com\\\/\",\"name\":\"Practical PowerShell\",\"description\":\"PowerShell books written by experts\",\"publisher\":{\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/#\\\/schema\\\/person\\\/4d0733c81966e744aabbb49f56d64deb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/practicalpowershell.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/practicalpowershell.com\\\/#\\\/schema\\\/person\\\/4d0733c81966e744aabbb49f56d64deb\",\"name\":\"damian\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g\",\"caption\":\"damian\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Adding a Progress Bar - Practical PowerShell","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:\/\/practicalpowershell.com\/adding-a-progress-bar\/","og_locale":"en_US","og_type":"article","og_title":"Adding a Progress Bar - Practical PowerShell","og_description":"When dealing with complex scripts with lots of running parts and that take some time to complete, it is convenient to have some sort of progress indicator to help visually indicate where a script is in a particular stage. In order to be successful we would need a count of how many items are being [&hellip;]","og_url":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/","og_site_name":"Practical PowerShell","article_published_time":"2018-12-03T14:00:50+00:00","article_modified_time":"2020-03-14T04:02:13+00:00","og_image":[{"url":"https:\/\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05-150x150.jpg","type":"","width":"","height":""}],"author":"damian","twitter_card":"summary_large_image","twitter_misc":{"Written by":"damian","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#article","isPartOf":{"@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/"},"author":{"name":"damian","@id":"https:\/\/practicalpowershell.com\/#\/schema\/person\/4d0733c81966e744aabbb49f56d64deb"},"headline":"Adding a Progress Bar","datePublished":"2018-12-03T14:00:50+00:00","dateModified":"2020-03-14T04:02:13+00:00","mainEntityOfPage":{"@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/"},"wordCount":642,"commentCount":0,"publisher":{"@id":"https:\/\/practicalpowershell.com\/#\/schema\/person\/4d0733c81966e744aabbb49f56d64deb"},"image":{"@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#primaryimage"},"thumbnailUrl":"https:\/\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05-150x150.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/","url":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/","name":"Adding a Progress Bar - Practical PowerShell","isPartOf":{"@id":"https:\/\/practicalpowershell.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#primaryimage"},"image":{"@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#primaryimage"},"thumbnailUrl":"https:\/\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05-150x150.jpg","datePublished":"2018-12-03T14:00:50+00:00","dateModified":"2020-03-14T04:02:13+00:00","breadcrumb":{"@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/practicalpowershell.com\/adding-a-progress-bar\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#primaryimage","url":"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?fit=583%2C234&ssl=1","contentUrl":"https:\/\/i0.wp.com\/practicalpowershell.com\/wp-content\/uploads\/2020\/03\/Progress05.jpg?fit=583%2C234&ssl=1","width":583,"height":234},{"@type":"BreadcrumbList","@id":"https:\/\/practicalpowershell.com\/adding-a-progress-bar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/practicalpowershell.com\/"},{"@type":"ListItem","position":2,"name":"Adding a Progress Bar"}]},{"@type":"WebSite","@id":"https:\/\/practicalpowershell.com\/#website","url":"https:\/\/practicalpowershell.com\/","name":"Practical PowerShell","description":"PowerShell books written by experts","publisher":{"@id":"https:\/\/practicalpowershell.com\/#\/schema\/person\/4d0733c81966e744aabbb49f56d64deb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/practicalpowershell.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/practicalpowershell.com\/#\/schema\/person\/4d0733c81966e744aabbb49f56d64deb","name":"damian","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g","caption":"damian"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d5a8cc64a5aa27558a897b108e3be1a89859511a3fd26176dac292f26e7a4ae4?s=96&d=mm&r=g"}}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/posts\/480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/comments?post=480"}],"version-history":[{"count":2,"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/posts\/480\/revisions"}],"predecessor-version":[{"id":488,"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/posts\/480\/revisions\/488"}],"wp:attachment":[{"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/media?parent=480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/categories?post=480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/practicalpowershell.com\/wp-json\/wp\/v2\/tags?post=480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}