{"id":290856,"date":"2021-07-04T22:00:00","date_gmt":"2021-07-04T19:00:00","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/"},"modified":"2021-07-04T22:00:00","modified_gmt":"2021-07-04T19:00:00","slug":"how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/","title":{"rendered":"#How to Build a Windows Server Inventory Report for Free with PowerShell \u2013 CloudSavvy IT"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a40fc64787ae\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a40fc64787ae\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Prerequisites\" >Prerequisites<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Retrieving_Servers\" >Retrieving Servers<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Determining_the_Data_to_Collect\" >Determining the Data to Collect<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Retrieving_Server_Information\" >Retrieving Server Information<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Get_the_Free_Disk_Space\" >Get the Free Disk Space<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Get_the_Memory_Available\" >Get the Memory Available<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Get_All_of_the_Network_Connections\" >Get All of the Network Connections<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Putting_it_All_Together\" >Putting it All Together<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell-cloudsavvy-it\/#Conclusion\" >Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<p><strong>&#8220;#How to Build a Windows Server Inventory Report for Free with PowerShell \u2013 CloudSavvy IT&#8221;<\/strong><\/p>\n<div id=\"article-content-area\">\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage alignnone size-full wp-image-4374\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/03\/23e4a5a4.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Powershell logo\" width=\"1400\" height=\"578\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>PowerShell is used by many server administrators. Naturally, one of the most used tasks is the ability to build <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">script<\/a>s and functions to inventory your servers and understand what your environment has.<\/p>\n<p>Though there are many ways to accomplish this, with varying levels of complexity, we are going to build a fairly simple but effect Windows Server Inventory Report within this article.<\/p>\n<h2 id=\"prerequisites\"><span class=\"ez-toc-section\" id=\"Prerequisites\"><\/span>Prerequisites<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This article will be hands-on. If you intend to follow along, please be sure you have the following prerequisites in place first:<\/p>\n<ul>\n<li>Working on an Active Directory (AD) domain-joined Windows 10 PC<\/li>\n<li>Have the ActiveDirectory PowerShell module installed from the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/adamtheautomator.com\/install-powershell-active-directory-module\/\">RSAT toolkit<\/a>.<\/li>\n<li>Have permission to query AD computer accounts<\/li>\n<li>Can run remote WMI\/CIM queries against remote computers<\/li>\n<li>Have <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.core\/enable-psremoting\">PowerShell Remoting<\/a> available on remote computers<\/li>\n<\/ul>\n<h2 id=\"retrieving-servers\"><span class=\"ez-toc-section\" id=\"Retrieving_Servers\"><\/span>Retrieving Servers<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Foundational to the script we are building are the servers themselves. You could individually write them out in a text file that is read in, or in an array within the script itself but using PowerShell we can do one better. To make the script more dynamic and not require us to modify it any time a new server is added, we can use Active Directory (AD) to pull the list of computer objects in a given organizational unit (OU).<\/p>\n<p>Below we are utilizing the <code>ActiveDirectory<\/code> module, available in the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/adamtheautomator.com\/install-powershell-active-directory-module\/\">RSAT toolkit<\/a>, to query the <code>Servers<\/code> OU and retrieve all of the computer objects there via <code>Get-ADComputer<\/code>.<\/p>\n<pre><code>Import-Module ActiveDirectory&#13;\n&#13;\n$OU = 'OU=Servers,DC=domain,DC=local'&#13;\n&#13;\n$Params = @{&#13;\n    \"SearchBase\" = $OU&#13;\n    \"Filter\"     = '*'&#13;\n}&#13;\n&#13;\n$Servers = Get-ADComputer @Params<\/code><\/pre>\n<p><em>At this point, we could have filtered out just the name property to populate the <code>$servers<\/code> variable, but often it is very useful to have the entire returned object to utilize later.<\/em><\/p>\n<h2 id=\"determining-the-data-to-collect\"><span class=\"ez-toc-section\" id=\"Determining_the_Data_to_Collect\"><\/span>Determining the Data to Collect<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now that we have our servers, we need to figure out what exactly should we collect from each server. One reason that it can be important to keep the full AD object is to combine that data with data direct from the server itself to gain a larger picture of your environment.<\/p>\n<p>In practice what does something like this look like? Let\u2019s list out some of the properties that would be very useful to know.<\/p>\n<p><strong>Server Values<\/strong><\/p>\n<ul>\n<li>Server Host Name<\/li>\n<li>Free Disk Space<\/li>\n<li>Memory<\/li>\n<li>Network Connections<\/li>\n<\/ul>\n<p><strong>AD Values<\/strong><\/p>\n<ul>\n<li>Password Last Set<\/li>\n<li>Last Logon<\/li>\n<li>DNS Host Name<\/li>\n<\/ul>\n<h2 id=\"retrieving-server-information\"><span class=\"ez-toc-section\" id=\"Retrieving_Server_Information\"><\/span>Retrieving Server Information<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>How do we go about collecting this information on our list of returned servers? Since we have a list of servers, we will have to iterate over the <code>$Servers<\/code> object and query. Starting with a simple <code>Foreach-Object<\/code> loop below, we can create a custom object to hold our values.<\/p>\n<pre><code>$Servers | Foreach-Object {&#13;\n    [PSCustomObject]@{&#13;\n        \"ServerHostName\"     = $_.Name&#13;\n        \"Description\"        = $_.Description&#13;\n        \"FreeDiskSpace\"      = $Null&#13;\n        \"TotalMemory\"        = $Null&#13;\n        \"NetworkConnections\" = $Null&#13;\n        \"PasswordLastSet\"    = $_.pwdLastSet&#13;\n        \"LastLogon\"          = $_.lastLogon&#13;\n        \"DNSHostName\"        = $_.DNSHostName&#13;\n        \"CreationDate\"       = $_.WhenCreated&#13;\n    }&#13;\n}<\/code><\/pre>\n<p>As you can tell, by saving the full object from Active Directory when we first retrieved the computers, lets us populate a wide range of information. Unfortunately, this is not all of the information that we need.<\/p>\n<p>To get the information from each server, we will utilize a familiar interface to many server administrators, which is the Windows Management Instrumentation (WMI) interface. You may notice that the cmdlets used below are from the Common Information Model (CIM) interface, of which WMI is Microsoft\u2019s implementation of this standard.<\/p>\n<h3 id=\"get-the-free-disk-space\"><span class=\"ez-toc-section\" id=\"Get_the_Free_Disk_Space\"><\/span>Get the Free Disk Space<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Using the available WMI class of <code>Win32_LogicalDisk<\/code>, we can get all of the available disks and their free space. When we first run the command, <code>Get-CimInstance -ClassName Win32_LogicalDisk<\/code>, you might notice that it\u2019s not exactly readable in its default output.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3333\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2019\/12\/7ad76249.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"436\" height=\"197\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>The second problem here is that we have more than one drive being returned. I would like to know about each of those drives and how much free space is available in GBs. Let\u2019s modify the code to do some transformations and make it better.<\/p>\n<pre><code>$Disks = Get-CimInstance -ClassName Win32_LogicalDisk&#13;\n&#13;\n$DisksResult = $Disks | Foreach-Object {&#13;\n    [PSCustomObject]@{&#13;\n        \"Drive\"     = $_.DeviceID&#13;\n        \"FreeSpace\" = [Math]::Round(($_.FreeSpace \/ 1GB),2)&#13;\n    }&#13;\n}&#13;\n&#13;\n$DisksResult<\/code><\/pre>\n<p>After we run the commands, our output is much cleaner and can now be used in our script.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3331\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2019\/12\/4ad3ee0c.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"579\" height=\"161\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>But what if we wanted to alert on a low disk space condition? It would be nice to expand this just slightly to set a flag on each drive that meets that condition. Comparing the free space to the total available space, we can see if it\u2019s under 10% or 10 GB. The reason for the <code>-or<\/code> condition, is that on very large disks, 10% may still be very generous so setting an absolute limit helps.<\/p>\n<pre><code>$Disks = Get-CimInstance -ClassName Win32_LogicalDisk&#13;\n&#13;\n$DisksResult = $Disks | Foreach-Object {&#13;\n  $FreeSpace  = [Math]::Round(($_.FreeSpace \/ 1GB),2)&#13;\n  $TotalSpace = [Math]::Round(($_.Size \/ 1GB),2)&#13;\n&#13;\n  If ( ($FreeSpace \/ $TotalSpace -LT 0.10) -Or $FreeSpace -LT 10 ) {&#13;\n    $LowDiskSpace = $True&#13;\n  } Else {&#13;\n    $LowDiskSpace = $False&#13;\n  }&#13;\n&#13;\n    [PSCustomObject]@{&#13;\n        \"Drive\"        = $_.DeviceID&#13;\n    \"FreeSpace\"    = $FreeSpace&#13;\n    \"LowDiskSpace\" = $LowDiskSpace&#13;\n    }&#13;\n}&#13;\n&#13;\n$DisksResult<\/code><\/pre>\n<p>As you can tell now, we have a great set of information to be saved with our servers.<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.cloudsavvyit.com\/3330\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell\/How%20to%20Build%20a%20Windows%20Server%20Inventory%20Report%20for\/Untitled%202.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><figcaption>How%20to%20Build%20a%20Windows%20Server%20Inventory%20Report%20for\/Untitled%202.png?trim=1,1&amp;bg-color=000&amp;pad=1,1<\/figcaption><\/figure>\n<h3 id=\"get-the-memory-available\"><span class=\"ez-toc-section\" id=\"Get_the_Memory_Available\"><\/span>Get the Memory Available<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>It\u2019s handy to know how much RAM is allocated to each server, especially in a virtual machine environment. If you find that some are over-provisioned you can save valuable resources by right-sizing the servers. Thankfully, this is much simpler to retrieve.<\/p>\n<p>Using the <code>Win32_PhysicalMemory<\/code> WMI class, we can sum all of the returned <code>Capacity<\/code> properties to get the total memory.<\/p>\n<pre><code>(Get-CimInstance -ClassName Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum \/ 1GB<\/code><\/pre>\n<h3 id=\"get-all-of-the-network-connections\"><span class=\"ez-toc-section\" id=\"Get_All_of_the_Network_Connections\"><\/span>Get All of the Network Connections<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Finally, we want to retrieve all of the network connections together. This is useful to know if a certain server has multiple interfaces to be worried about. Using a slightly different mechanism this time, we are using the <code>Get-NetAdapter<\/code> cmdlet, but since this one doesn\u2019t have a <code>ComputerName<\/code> parameter, we will use PS Remoting to invoke this locally on the target server and return the results to our script.<\/p>\n<pre><code>$NetworkConnections = Invoke-Command -ComputerName $_.DnsHostName -ScriptBlock {&#13;\n    Get-NetAdapter -Physical | Select-Object Name, Status, LinkSpeed&#13;\n}<\/code><\/pre>\n<p>Our output will look similar to that below and we can then save this into our script.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3332\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2019\/12\/e4621782.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"448\" height=\"174\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p><em>Keep in mind that for <code>Invoke-Command<\/code> to work, PS Remoting will need to be set up on the target servers.<\/em><\/p>\n<h2 id=\"putting-it-all-together\"><span class=\"ez-toc-section\" id=\"Putting_it_All_Together\"><\/span>Putting it All Together<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now that we have all the pieces, let\u2019s put this all together. The final script is below and combines all the code to create a custom output object with just what we want to report on.<\/p>\n<pre><code>Import-Module ActiveDirectory&#13;\n&#13;\n$OU = 'OU=Servers,DC=domain,DC=local'&#13;\n&#13;\n$Params = @{&#13;\n    \"SearchBase\" = $OU&#13;\n    \"Filter\"     = '*'&#13;\n}&#13;\n&#13;\n$Servers = Get-ADComputer @Params&#13;\n&#13;\n$Servers | Foreach-Object {&#13;\n  $Disks = Get-CimInstance -ComputerName $_.DnsHostName -ClassName Win32_LogicalDisk&#13;\n&#13;\n  $DisksResult = $Disks | Foreach-Object {&#13;\n    [PSCustomObject]@{&#13;\n      \"Drive\"     = $_.DeviceID&#13;\n      \"FreeSpace\" = [Math]::Round(($_.FreeSpace \/ 1GB),2)&#13;\n    }&#13;\n  }&#13;\n  &#13;\n  $NetworkConnections = Invoke-Command -ComputerName $_.DnsHostName -ScriptBlock {&#13;\n    Get-NetAdapter -Physical | Select-Object Name, Status, LinkSpeed&#13;\n  }&#13;\n&#13;\n    [PSCustomObject]@{&#13;\n        \"ServerHostName\"     = $_.Name&#13;\n        \"Description\"        = $_.Description&#13;\n        \"FreeDiskSpace\"      = $DisksResult&#13;\n        \"TotalMemory\"        = ((Get-CimInstance -ComputerName $_.DnsHostName -ClassName Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum \/ 1GB)&#13;\n        \"NetworkConnections\" = $NetworkConnections&#13;\n        \"PasswordLastSet\"    = $_.pwdLastSet&#13;\n        \"LastLogon\"          = $_.lastLogon&#13;\n        \"DNSHostName\"        = $_.DNSHostName&#13;\n        \"CreationDate\"       = $_.WhenCreated&#13;\n    }&#13;\n}<\/code><\/pre>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>What we have demonstrated here is just the tip of the iceberg in terms of what can be built for an inventory report. There are many more useful properties that you can add on to this report. Taking this further, you could build this into an HTML page, schedule a task to run this weekly, or even wrap this in other tools such as Ansible.<\/p>\n<p>PowerShell makes it trivially easy to get all the information you need to put together in one place. Once you analyze your environment and determine what you need to know, build the report in PowerShell to help future-proof your ability to audit your environment.\n<\/p><\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.cloudsavvyit.com\/3330\/how-to-build-a-windows-server-inventory-report-for-free-with-powershell\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;#How to Build a Windows Server Inventory Report for Free with PowerShell \u2013 CloudSavvy IT&#8221; PowerShell is used by many server administrators. Naturally, one of the most used tasks is the ability to build scripts and functions to inventory your servers and understand what your environment has. Though there are many ways to accomplish this,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":290857,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2020\/03\/23e4a5a4.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-290856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/290856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=290856"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/290856\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/290857"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=290856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=290856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=290856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}