{"id":51993,"date":"2009-11-17T00:01:00","date_gmt":"2009-11-17T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2009\/11\/17\/hey-scripting-guy-how-can-i-use-web-services\/"},"modified":"2009-11-17T00:01:00","modified_gmt":"2009-11-17T00:01:00","slug":"hey-scripting-guy-how-can-i-use-web-services","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/hey-scripting-guy-how-can-i-use-web-services\/","title":{"rendered":"Hey, Scripting Guy! How Can I Use Web Services?"},"content":{"rendered":"<p><!-- AddThis Button BEGIN --><a class=\"addthis_button\" href=\"http:\/\/www.addthis.com\/bookmark.php?v=250&amp;pub=scriptingguys\"><img decoding=\"async\" alt=\"Bookmark and Share\" src=\"http:\/\/s7.addthis.com\/static\/btn\/v2\/lg-share-en.gif\" width=\"125\" height=\"16\"><\/a><!-- AddThis Button END --><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p><img decoding=\"async\" title=\"Hey, Scripting Guy! Question\" border=\"0\" alt=\"Hey, Scripting Guy! Question\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" width=\"34\" height=\"34\"><\/p>\n<p class=\"MsoNormal\">Hey, Scripting Guy! I remember reading about things called &ldquo;Web services&rdquo; a long time ago. It seems that I do not hear much about these anymore. Do they really exist, and if so what are they good for?<\/p>\n<p class=\"MsoNormal\">&#8212; GK<\/p>\n<p class=\"MsoNormal\"><img decoding=\"async\" title=\"Hey, Scripting Guy! Answer\" border=\"0\" alt=\"Hey, Scripting Guy! Answer\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" width=\"34\" height=\"34\">Hello GK, <\/p>\n<p class=\"MsoNormal\">Microsoft Scripting Guy Ed Wilson here. We have had to batten down the hatches here in Charlotte, North Carolina, as the tropical storm formerly known as Hurricane Ida makes a guest appearance in our neighborhood. The 50-foot tall southern pines that inhabit my yard are doing their version of the hula, and the handmade specially tuned wind chime on our front porch is playing a ghostly tune. The sky is dark and the wind whips down the street like a freight train crossing the great planes on a mission of sinister importance. Strangely, eerily perhaps, it seems there is no noise&mdash;and then it hits&mdash;all at once a great cacophony of rushing wind, overturned lawn furniture banging and clanging as it rolls across yards, and all the time the 4\/4 staccato of the wind chime marks the beat of an unseen conductor. <\/p>\n<p class=\"MsoNormal\">GK, because we often receive extreme weather during hurricane season, I am extremely interested in the weather. However, I am even more interested in writing scripts. It would be awesome if I could combine both activities. What one needs is an easy-to-use way to query for current weather information. I know of dozens of Web sites I can go to (including the newly redesigned MSN page) where I can find current weather information. I can, of course, open the Web page in a script and display it, but I prefer a quick and easy way to obtain only the weather information, and to bypass the browser completely. To do this, I need to use a Web service, which returns information in an optimized manner. The data returns in XML format, and an application or script easily parses the information. This requires a little understanding of XML. The complete Get-InternationalWeather.ps1 script shown here illustrates the technique. <\/p>\n<p class=\"CodeBlockScreenedHead\"><strong>Get-InternationalWeather.ps1<\/strong><\/p>\n<p class=\"CodeBlockScreened\"><span><font><font face=\"Lucida Sans Typewriter\">#Requires -version 2.0<\/p>\n<p>Function Get-Weather <br>{<br><span>&nbsp;<\/span>Param(<br><span>&nbsp; <\/span>[Parameter(Mandatory=$true)]<br><span>&nbsp; <\/span>[string]$city,<br><span>&nbsp; <\/span>[Parameter(Mandatory=$true)]<br><span>&nbsp; <\/span>[string]$country<br><span>&nbsp;<\/span>)#end param<br><span>&nbsp;<\/span>$URI = &#8220;http:\/\/www.webservicex.net\/globalweather.asmx?wsdl&#8221;<br><span>&nbsp;<\/span>$Proxy = New-WebServiceProxy -uri $URI -namespace WebServiceProxy<br><span>&nbsp;<\/span>$Proxy.GetWeather($city,$country)<br>} #end Get-Weather<\/p>\n<p>[xml]$xml = Get-Weather -city &#8220;sydney airport&#8221; -country &#8220;Australia&#8221;<br>$xml.CurrentWeather<\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The Get-InternationalWeather.ps1 script begins by declaring a function named <b>Get-Weather<\/b>. The <b>Get-Weather<\/b> function accepts two input parameters, <b>city<\/b> and <b>country<\/b>. Both parameters are strings, and both are mandatory. The <b>[Parameter(Mandatory=$true)]<\/b> tag is new for Windows PowerShell 2.0 and is used to force a parameter to be present when the script runs. If the script runs without values for either the <strong>country<\/strong> or the <strong>city<\/strong> parameter, the following error appears:<\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of error that appears when script is run without either the country or city parameter \" alt=\"Image of error that appears when script is run without either the country or city parameter \" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2009\/november\/hey1117\/hsg-11-17-09-01.jpg\" width=\"600\" height=\"225\"><br><\/p>\n<p class=\"MsoNormal\">The <b>Get-Weather<\/b> function parameter section is shown here: <\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">Function Get-Weather <br>{<br><span>&nbsp;<\/span>Param(<br><span>&nbsp; <\/span>[Parameter(Mandatory=$true)]<br><span>&nbsp; <\/span>[string]$city,<br><span>&nbsp; <\/span>[Parameter(Mandatory=$true)]<br><span>&nbsp; <\/span>[string]$country<br><span>&nbsp;<\/span>)#end param<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The <a href=\"http:\/\/en.wikipedia.org\/wiki\/URI\"><font face=\"Segoe\">Uniform Resource Identifier (URI)<\/font><\/a> string points to the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Web_Services_Description_Language\"><font face=\"Segoe\">Web Services Description Language (WSDL)<\/font><\/a> page. The WSDL describes the Web service offerings. Each service is a collection of network end points. The WSDL uses XML to define the query method. In the WSDL seen here, the <b>GetWeather<\/b> method takes two inputs: <b>CityName<\/b> and <b>CountryName<\/b>, both of which are strings:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">&nbsp; &lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt; <br><\/font><a href=\"http:\/\/www.webservicex.net\/globalweather.asmx?wsdl\"><span><font face=\"Times New Roman\">&#8211;<\/font><\/span><\/a><font face=\"Lucida Sans Typewriter\"> &lt;wsdl:definitions xmlns:soap=&#8221;http:\/\/schemas.xmlsoap.org\/wsdl\/soap\/&#8221; xmlns:tm=&#8221;http:\/\/microsoft.com\/wsdl\/mime\/textMatching\/&#8221; xmlns:soapenc=&#8221;http:\/\/schemas.xmlsoap.org\/soap\/encoding\/&#8221; xmlns:mime=&#8221;http:\/\/schemas.xmlsoap.org\/wsdl\/mime\/&#8221; xmlns:tns=&#8221;http:\/\/www.webserviceX.NET&#8221; xmlns:s=&#8221;http:\/\/www.w3.org\/2001\/XMLSchema&#8221; xmlns:soap12=&#8221;http:\/\/schemas.xmlsoap.org\/wsdl\/soap12\/&#8221; xmlns:http=&#8221;http:\/\/schemas.xmlsoap.org\/wsdl\/http\/&#8221; targetNamespace=&#8221;http:\/\/www.webserviceX.NET&#8221; xmlns:wsdl=&#8221;http:\/\/schemas.xmlsoap.org\/wsdl\/&#8221;&gt;<br><\/font><a href=\"http:\/\/www.webservicex.net\/globalweather.asmx?wsdl\"><span><font face=\"Times New Roman\">&#8211;<\/font><\/span><\/a><font face=\"Lucida Sans Typewriter\"> &lt;wsdl:types&gt;<br><\/font><a href=\"http:\/\/www.webservicex.net\/globalweather.asmx?wsdl\"><span><font face=\"Times New Roman\">&#8211;<\/font><\/span><\/a><font face=\"Lucida Sans Typewriter\"> &lt;s:schema elementFormDefault=&#8221;qualified&#8221; targetNamespace=&#8221;http:\/\/www.webserviceX.NET&#8221;&gt;<br><\/font><a href=\"http:\/\/www.webservicex.net\/globalweather.asmx?wsdl\"><span><font face=\"Times New Roman\">&#8211;<\/font><\/span><\/a><font face=\"Lucida Sans Typewriter\"> &lt;s:element name=&#8221;GetWeather&#8221;&gt;<br><\/font><a href=\"http:\/\/www.webservicex.net\/globalweather.asmx?wsdl\"><span><font face=\"Times New Roman\">&#8211;<\/font><\/span><\/a><font face=\"Lucida Sans Typewriter\"> &lt;s:complexType&gt;<br><\/font><a href=\"http:\/\/www.webservicex.net\/globalweather.asmx?wsdl\"><span><font face=\"Times New Roman\">&#8211;<\/font><\/span><\/a><font face=\"Lucida Sans Typewriter\"> &lt;s:sequence&gt;<br>&nbsp; &lt;s:element minOccurs=&#8221;0&#8243; maxOccurs=&#8221;1&#8243; name=&#8221;CityName&#8221; type=&#8221;s:string&#8221; \/&gt; <br>&nbsp; &lt;s:element minOccurs=&#8221;0&#8243; maxOccurs=&#8221;1&#8243; name=&#8221;CountryName&#8221; type=&#8221;s:string&#8221; \/&gt; <br>&nbsp; &lt;\/s:sequence&gt;<br>&nbsp; &lt;\/s:complexType&gt;<br>&nbsp; &lt;\/s:element&gt;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The <b>$URI<\/b> variable holds the path to the <b>globalweather<\/b> WSDL. The string assignment listing follows:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">$URI = http:\/\/www.webservicex.net\/globalweather.asmx?wsdl<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The key feature of the Get-InternationalWeather.ps1 script uses the <b>New-WebServiceProxy<\/b> Windows PowerShell cmdlet to make the connection to the <b>globalweather<\/b> Web service. After the connection to the Web service is established, the resulting connection is stored in the <b>$proxy<\/b> variable as seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">$Proxy = New-WebServiceProxy -uri $URI -namespace WebServiceProxy<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">It is finally time to retrieve the weather. To do this, call the <b>GetWeather<\/b> method from the <b>globalweather<\/b> Web service. The <b>GetWeather<\/b> method call receives both a city and a country as seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">$Proxy.GetWeather($city,$country)<br>} #end Get-Weather<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">When calling the <b>GetWeather<\/b> method, keep in mind that the returned data is XML. The raw XML returned by the <b>GetWeather<\/b> method is shown here: <\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-16&#8243;?&gt;<br>&lt;CurrentWeather&gt;<br><span>&nbsp; <\/span>&lt;Location&gt;Sydney Airport, Australia (YSSY) 33-57S 151-11E 3M&lt;\/Location&gt;<br><span>&nbsp; <\/span>&lt;Time&gt;Nov 12, 2009 &#8211; 01:00 PM EST \/ 2009.11.12 1800 UTC&lt;\/Time&gt;<br><span>&nbsp; <\/span>&lt;Wind&gt; from the S (180 degrees) at 22 MPH (19 KT):0&lt;\/Wind&gt;<br><span>&nbsp; <\/span>&lt;Visibility&gt; greater than 7 mile(s):0&lt;\/Visibility&gt;<br><span>&nbsp; <\/span>&lt;SkyConditions&gt; partly cloudy&lt;\/SkyConditions&gt;<br><span>&nbsp; <\/span>&lt;Temperature&gt; 68 F (20 C)&lt;\/Temperature&gt;<br><span>&nbsp; <\/span>&lt;DewPoint&gt; 64 F (18 C)&lt;\/DewPoint&gt;<br><span>&nbsp; <\/span>&lt;RelativeHumidity&gt; 88%&lt;\/RelativeHumidity&gt;<br><span>&nbsp; <\/span>&lt;Pressure&gt; 30.03 in. Hg (1017 hPa)&lt;\/Pressure&gt;<br><span>&nbsp; <\/span>&lt;Status&gt;Success&lt;\/Status&gt;<br>&lt;\/CurrentWeather&gt;<\/p>\n<p>[xml]$xml = Get-Weather -city &#8220;sydney airport&#8221; -country &#8220;Australia&#8221;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">By exploring the contents of the <b>$xml<\/b> variable, you can see there are two properties that are reported. The first is <b>XML<\/b> and the second property is <b>CurrentWeather<\/b>. This is seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:Usersed.NWTRADERS&gt; $xml | get-member -MemberType property<\/p>\n<p><br><span>&nbsp;&nbsp; <\/span>TypeName: System.Xml.XmlDocument<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType Definition<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>CurrentWeather Property<span>&nbsp;&nbsp; <\/span>System.Xml.XmlElement CurrentWeather {get;}<br>xml<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String xml {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The <b>CurrentWeather<\/b> property returns a <b>CurrentWeather<\/b> object. This object contains a number of properties that are seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:Usersed.NWTRADERS&gt; $xml.CurrentWeather | Get-Member -MemberType property<\/p>\n<p><br><span>&nbsp;&nbsp; <\/span>TypeName: System.Xml.XmlElement<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType Definition<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>DewPoint<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String DewPoint {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>Location<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Location {get;set;}<span>&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><br>Pressure<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Pressure {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>RelativeHumidity Property<span>&nbsp;&nbsp; <\/span>System.String RelativeHumidity {get;set;}<br>SkyConditions<span>&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String SkyConditions {get;set;}<span>&nbsp;&nbsp; <\/span><br>Status<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Status {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>Temperature<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Temperature {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>Time<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Time {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>Visibility<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Visibility {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><br>Wind<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;<\/span>Property<span>&nbsp;&nbsp; <\/span>System.String Wind {get;set;}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">Because each of the weather elements is available as an individual property, it is possible to access specific values such as the temperature. This is seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:Usersed.NWTRADERS&gt; $xml.CurrentWeather.Temperature<br><span>&nbsp;<\/span>66 F (19 C)<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">For the Get-InternationalWeather.ps1 script, the complete weather information is shown. To do this, the <b>CurrentWeather<\/b> property is queried as seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">$xml.CurrentWeather<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The result of running the Get-InternationalWeather.ps1 script is shown here:<\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of result of running script\" alt=\"Image of result of running script\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2009\/november\/hey1117\/hsg-11-17-09-02.jpg\" width=\"600\" height=\"420\"><\/p>\n<p class=\"Fig-Graphic\">&nbsp;<\/p>\n<p class=\"MsoNormal\">Well, GK, as you can see, Web services are alive and well. In fact, they have taken on new importance because of their ease of use from within Windows PowerShell. Join us tomorrow as XML Week continues. <\/p>\n<p class=\"MsoNormal\">If you want to know exactly what we will be looking at tomorrow, follow us on <a href=\"http:\/\/bit.ly\/scriptingguystwitter\" target=\"_blank\"><font face=\"Segoe\">Twitter<\/font><\/a> or <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\" target=\"_blank\"><font face=\"Segoe\">Facebook<\/font><\/a>. If you have any questions, send e-mail to us at <a href=\"http:\/\/blogs.technet.commailto:scripter@microsoft.com\" target=\"_blank\"><font face=\"Segoe\">scripter@microsoft.com<\/font><\/a> or post your questions on the <a href=\"http:\/\/bit.ly\/scriptingforum\" target=\"_blank\"><font face=\"Segoe\">Official Scripting Guys Forum<\/font><\/a>. See you tomorrow. Until then, peace.<\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p><b><span>Ed Wilson and Craig Liebendorfer, Scripting Guys<\/span><\/b><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Hey, Scripting Guy! I remember reading about things called &ldquo;Web services&rdquo; a long time ago. It seems that I do not hear much about these anymore. Do they really exist, and if so what are they good for? &#8212; GK Hello GK, Microsoft Scripting Guy Ed Wilson here. We have had to batten down [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[3,4,45,165],"class_list":["post-51993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-scripting-guy","tag-scripting-techniques","tag-windows-powershell","tag-xml"],"acf":[],"blog_post_summary":"<p>&nbsp; Hey, Scripting Guy! I remember reading about things called &ldquo;Web services&rdquo; a long time ago. It seems that I do not hear much about these anymore. Do they really exist, and if so what are they good for? &#8212; GK Hello GK, Microsoft Scripting Guy Ed Wilson here. We have had to batten down [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/51993","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\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=51993"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/51993\/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=51993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=51993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=51993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}