POWERSHELL AND THE WEB PowerShell Summit 2014 Trond Hindenes, Crayon AS
THE IT AUTOMATION PYRAMID IntegrationOrchestration Automation
POWERSHELL INTEGRATION MATURITY HTTP API (rest).Net wrapper (dll) PS Module
WHY STEP TO THE LEFT? Low quality vendor-supplied CmdLets Lack of functionality
TYPES OF WEB SERVICES Generation 1: XML Web Services (SOAP) Stateful (or, acting like they are stateful) Generation 2: RESTful services (JSON/XML) Stateless Good overview at: services-overview/ services-overview/
TYPES OF WEB SERVICES (2) SOAP: Access api through methods on the proxy object $citynames = $proxy.LatLonListCityNames(1) REST: Each operation has a URL: HTTP DELETE to
AUTHENTICATION GOTCHAS The life of a http request Authentication types: Unauthenticated or IP based Basic/NTLM Token based
VISUAL STUDIO LIGHTSWITCH Rapid development of Data-driven applications Can be self-hosted or built as a Sharepoint 2013 app The backend data is served using WCF OData
PATTERNS FOR LIGHTSWITCH + POWERSHELL Develop the app Deploy it somewhere Generate proxy dll Use the proxy to interact with the service endpoint
EXAMINING THE PROXY DLL Use the VS Object Browser to inspect the dll Or use Ilspy (
POWERSHELL AND RESTFUL SERVICES WITH JSON AKA INVOKE-RESTMETHOD JSON – Javascript Object Notation Human readable objects Similar to XML, but lighter weight (XML is wire-heavy) Construct Object Convert to Json Send to server Get stuff back
REST GOTCHAS Everything is a PsCustomObject No.gettype() Each request is atomic No state API examples often use curl Important differences between PowerShell and curl (authentication) Be mindful of JSON syntax You'll often end up with lots of "nested" objects
GENERATING PROPER OBJECTS New-Struct to the rescue (
ASP.NET MVC/WEB API General-purpose web app framework for building stuff Scott Guthries brainchild Web API is a flexible framework for building (among others) RESTful web services Natively supports both JSON and xml
CASE: HOSTED MAIL FLOW MONITORING
FUN WITH WEB SpamTitan (super-simple XML/Rest) Geckoboard (complex json) PagerDuty (simple json)
THANK YOU!