{"id":5094,"date":"2012-08-22T00:01:00","date_gmt":"2012-08-22T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2012\/08\/22\/use-powershell-to-identify-port-connections-in-windows-8\/"},"modified":"2012-08-22T00:01:00","modified_gmt":"2012-08-22T00:01:00","slug":"use-powershell-to-identify-port-connections-in-windows-8","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/use-powershell-to-identify-port-connections-in-windows-8\/","title":{"rendered":"Use PowerShell to Identify Port Connections in Windows 8"},"content":{"rendered":"<p><b>Summary<\/b>: Microsoft Scripting Guy, Ed Wilson, shows how to use Windows PowerShell to identify port connections in Windows&nbsp;8.<\/p>\n<p>&nbsp;Microsoft Scripting Guy, Ed Wilson, is here. There are only twenty-three days until Windows <a href=\"http:\/\/powershellsaturday.com\/002\/\" target=\"_blank\">PowerShell Saturday in Charlotte, North Carolina<\/a>. In fact, as far as I know, we have even had our last organizational meeting. The Scripting Wife has been busy finding water and soda on sale at various stores (shopping is one of her core skills), and the rest of the team has been busy working on sponsor layout drawings, presentations, and so on.<\/p>\n<p>The Scripting Wife and I are heading to northern Kentucky where I will be teaching a Windows PowerShell class to a customer there. Teresa will be out and about visiting friends and going to outlet malls and finding cool places to eat. My good friend (and fellow Microsoftee), Robert from California, is flying in for the class, so we are looking forward to seeing him again. The Scripting Wife and I will be attending the first ever <a href=\"http:\/\/powershellgroup.org\/cincinnati.oh\" target=\"_blank\">Cincinnati, Ohio Windows PowerShell User Group<\/a> while we are in the area. I will be speaking about using Windows PowerShell&nbsp;3.0 to manage a remote Windows&nbsp;8 workstation. It&rsquo;s a cool presentation if I do say so myself.<\/p>\n<h2>Identifying port connections<\/h2>\n<p>This is the third time I have written a script to obtain information about network connections. The first time I wrote it, I used a WMI class from the root\/snmp namespace, and I wrote the script in VBScript. The second time, I used the NetStat command-line utility tool, I wrote it in Windows PowerShell&nbsp;1.0, and I parsed the output by using regular expressions. In Windows PowerShell&nbsp;3.0 in Windows&nbsp;8, I use a simple cmdlet. This is a good thing, because gaining access to the SNMP namespace requires installing SNMP, and that requires evaluation and planning. I like things that are in the box as much as possible.<\/p>\n<p>Using NetStat is easy (as long as you remember that it is netstat and not net statistics, and you remember what the switch &ndash;a &ndash;n &ndash;o accomplishes). The problem with netstat (it is not case sensitive) is that it returns string data instead of objects. Thus, the requirement for a bit of regular expression work. (I am not good enough with regular expressions to type very complicated patterns on the fly in front of a live audience without a lot of prior work&mdash;for example, say at <a href=\"http:\/\/techmentorevents.com\/events\/las-vegas-2011\/information\/techmentor-2012.aspx\" target=\"_blank\">Tech Mentor<\/a>.)<\/p>\n<p>As long as I do not need to do any post processing, and as long as I can remember the netstat &ndash;ano command (yes, you can gang the switches for netstat), there is no problem with the command. The output is shown here.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3652.HSG-8-22-12-01.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/3652.HSG-8-22-12-01.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<h2>Using the Get-NetTCPConnection cmdlet<\/h2>\n<p>The default view of the Get-NetTCPConnection cmdlet is pretty useful, and it displays a decent amount of information about local and remote ports. For me, the display does not scale properly in my default Windows PowerShell size, but that is due to my need to take screenshots. On a larger monitor, using the default sizing for Windows PowerShell, the output is just fine. The image that follows illustrates the default output.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2072.HSG-8-22-12-02.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/2072.HSG-8-22-12-02.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>The nice thing about using the <b>Get-NetTCPConnection<\/b> cmdlet is that it returns objects, and it also has a number of useful switches. For example, if I am interested in only established connections, I use the <b>state<\/b><i> <\/i>parameter, and I tell it to show established connections. The command is shown here.<\/p>\n<p style=\"padding-left: 30px\">Get-NetTCPConnection -State established<\/p>\n<p>The command and the associated output are shown in the image that follows.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/6366.HSG-8-22-12-03.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/6366.HSG-8-22-12-03.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>To view connections to the Internet, use the <b>AppliedSetting<\/b><i> <\/i>parameter as shown here.<\/p>\n<p style=\"padding-left: 30px\">Get-NetTCPConnection -AppliedSetting internet<\/p>\n<p>But keep in mind these are objects, and you can parse the information via Windows PowerShell. For example, I can quickly see the state of the connections on my computer by grouping by state. This command is shown here.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; Get-NetTCPConnection | group state -NoElement<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">Count Name<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8211; &#8212;-<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp; 21 Listen<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 Established<\/p>\n<p>I might be curious and want to see what ports are being utilized. I can easily see this by grouping by <b>LocalPort<\/b> as shown here.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; Get-NetTCPConnection | group localport -NoElement | sort count -Descending<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">Count Name<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8211; &#8212;-<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 49199<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 49177<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 49155<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 49154<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 49153<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 49152<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 2179<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 2 135<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 47001<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 5985<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 445<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 62723<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 62613<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 62369<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 2559<\/p>\n<p style=\"padding-left: 30px\">&nbsp;&nbsp;&nbsp; 1 139<\/p>\n<p>After I have done this, I decide to obtain more information. Because these are objects, it is a simple matter of choosing the properties that I want to see. To find which properties are available, I first use the <b>Get-Member<\/b> cmdlet as shown here.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; Get-NetTCPConnection | Get-Member -MemberType property | Format-Table name, definition -AutoSize<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Definition<\/p>\n<p style=\"padding-left: 30px\">&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;-<\/p>\n<p style=\"padding-left: 30px\">AggregationBehavior&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 AggregationBehavior {get;set;}<\/p>\n<p style=\"padding-left: 30px\">AvailableRequestedStates uint16[] AvailableRequestedStates {get;set;}<\/p>\n<p style=\"padding-left: 30px\">Caption&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string Caption {get;set;}<\/p>\n<p style=\"padding-left: 30px\">CommunicationStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 CommunicationStatus {get;set;}<\/p>\n<p style=\"padding-left: 30px\">Description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string Description {get;set;}<\/p>\n<p style=\"padding-left: 30px\">DetailedStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 DetailedStatus {get;set;}<\/p>\n<p style=\"padding-left: 30px\">Directionality&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 Directionality {get;set;}<\/p>\n<p style=\"padding-left: 30px\">ElementName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string ElementName {get;set;}<\/p>\n<p style=\"padding-left: 30px\">EnabledDefault&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 EnabledDefault {get;set;}<\/p>\n<p style=\"padding-left: 30px\">EnabledState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 EnabledState {get;set;}<\/p>\n<p style=\"padding-left: 30px\">HealthState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 HealthState {get;set;}<\/p>\n<p style=\"padding-left: 30px\">InstallDate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CimInstance#DateTime InstallDate {get;set;}<\/p>\n<p style=\"padding-left: 30px\">InstanceID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string InstanceID {get;set;}<\/p>\n<p style=\"padding-left: 30px\">LocalAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string LocalAddress {get;}<\/p>\n<p style=\"padding-left: 30px\">LocalPort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 LocalPort {get;}<\/p>\n<p style=\"padding-left: 30px\">Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string Name {get;set;}<\/p>\n<p style=\"padding-left: 30px\">OperatingStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 OperatingStatus {get;set;}<\/p>\n<p style=\"padding-left: 30px\">OperationalStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16[] OperationalStatus {get;set;}<\/p>\n<p style=\"padding-left: 30px\">OtherEnabledState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string OtherEnabledState {get;set;}<\/p>\n<p style=\"padding-left: 30px\">PrimaryStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 PrimaryStatus {get;set;}<\/p>\n<p style=\"padding-left: 30px\">PSComputerName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string PSComputerName {get;}<\/p>\n<p style=\"padding-left: 30px\">RemoteAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string RemoteAddress {get;}<\/p>\n<p style=\"padding-left: 30px\">RemotePort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 RemotePort {get;}<\/p>\n<p style=\"padding-left: 30px\">RequestedState&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint16 RequestedState {get;set;}<\/p>\n<p style=\"padding-left: 30px\">Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string Status {get;set;}<\/p>\n<p style=\"padding-left: 30px\">StatusDescriptions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] StatusDescriptions {get;set;}<\/p>\n<p style=\"padding-left: 30px\">TimeOfLastStateChange&nbsp;&nbsp;&nbsp; CimInstance#DateTime TimeOfLastStateChange {get;set;}<\/p>\n<p style=\"padding-left: 30px\">TransitioningToState&nbsp;&nbsp;&nbsp;&nbsp; uint16 TransitioningToState {get;set;}<\/p>\n<p>I decide that I am interested in four specific properties, so I can write the command shown here.<\/p>\n<p style=\"padding-left: 30px\">Get-NetTCPConnection | ft state,localport, localaddress, remoteport, remoteaddress -AutoSize<\/p>\n<p>The problem is that this is a lot of typing. I like to use wildcard characters in my <b>Format-Table<\/b> commands when I can get away with doing so. Here is a perfect situation for using wildcards and not destroying the readability of the command. Here is my revised command.<\/p>\n<p style=\"padding-left: 30px\">Get-NetTCPConnection | ft state,l*port, l*address, r*port, r*address &ndash;Auto<\/p>\n<p>The command and the output are shown in the following image.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8836.HSG-8-22-12-04.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/8836.HSG-8-22-12-04.png\" alt=\"Image of command output\" title=\"Image of command output\" \/><\/a><\/p>\n<p>There is not an alias predefined for the <b>Get-NetTCPConnection<\/b> cmdlet. I found this by using the <b>Get-Alias<\/b> cmdlet as shown here.<\/p>\n<p style=\"padding-left: 30px\">Get-Alias -Definition Get-NetTCPConnection<\/p>\n<p>If the <b>Get-NetTCPConnection<\/b> cmdlet is something that you intend to use a lot, you should create an alias for the cmdlet and store that alias in your profile. If you want to do so, you can even call it netstat. (I do not necessarily recommend this; I am simply showing you that you could do so. If you do something like that, and you want the real netstat, just call netstat.exe). This is shown here.<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; New-Alias -Name netstat -Value Get-NetTCPConnection<\/p>\n<p style=\"padding-left: 30px\">PS C:\\&gt; netstat -State established<\/p>\n<p style=\"padding-left: 30px\">&nbsp;<\/p>\n<p style=\"padding-left: 30px\">LocalAddress &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LocalPort RemoteAddress &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RemotePort<\/p>\n<p style=\"padding-left: 30px\">&#8212;&#8212;&#8212;&#8212; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8212;<\/p>\n<p style=\"padding-left: 30px\">192.168.0.47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 62613&nbsp;&nbsp;&nbsp;&nbsp; 157.56.98.134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 44<\/p>\n<p style=\"padding-left: 30px\">192.168.0.47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 62369&nbsp;&nbsp;&nbsp;&nbsp; 157.56.98.129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 44<\/p>\n<p>Well, that is it for now. Join me tomorrow for more cool Windows PowerShell stuff.<\/p>\n<p>I invite you to follow me on <a href=\"http:\/\/bit.ly\/scriptingguystwitter\" target=\"_blank\">Twitter<\/a> and <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\" target=\"_blank\">Facebook<\/a>. If you have any questions, send email to me at <a href=\"mailto:scripter@microsoft.com\" target=\"_blank\">scripter@microsoft.com<\/a>, or post your questions on the <a href=\"http:\/\/bit.ly\/scriptingforum\" target=\"_blank\">Official Scripting Guys Forum<\/a>. See you tomorrow. Until then, peace.<\/p>\n<p><b>Ed Wilson, Microsoft Scripting Guy<\/b>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summary: Microsoft Scripting Guy, Ed Wilson, shows how to use Windows PowerShell to identify port connections in Windows&nbsp;8. &nbsp;Microsoft Scripting Guy, Ed Wilson, is here. There are only twenty-three days until Windows PowerShell Saturday in Charlotte, North Carolina. In fact, as far as I know, we have even had our last organizational meeting. The Scripting [&hellip;]<\/p>\n","protected":false},"author":596,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[41,37,364,3,45],"class_list":["post-5094","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-monitoring","tag-networking","tag-powershell-3-0","tag-scripting-guy","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>Summary: Microsoft Scripting Guy, Ed Wilson, shows how to use Windows PowerShell to identify port connections in Windows&nbsp;8. &nbsp;Microsoft Scripting Guy, Ed Wilson, is here. There are only twenty-three days until Windows PowerShell Saturday in Charlotte, North Carolina. In fact, as far as I know, we have even had our last organizational meeting. The Scripting [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/5094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/596"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=5094"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/5094\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=5094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=5094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=5094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}