{"id":3285,"date":"2021-06-21T17:16:22","date_gmt":"2021-06-21T15:16:22","guid":{"rendered":"https:\/\/www.mariotti.de\/?p=3285"},"modified":"2021-06-21T17:16:22","modified_gmt":"2021-06-21T15:16:22","slug":"verwalten-von-wordpress-mittels-powershell-via-rest-api","status":"publish","type":"post","link":"https:\/\/dev.mariotti.de\/?p=3285","title":{"rendered":"Verwalten von WordPress mittels PowerShell via REST API"},"content":{"rendered":"<p>Heute mal ein paar kleine Beispiele wie man mittels PowerShell und dessen Invoke-RestMethod Cmdlet eine WordPress Webseite \u00fcber deren REST API Schnittstelle automatisieren kann, incl. Beispiel f\u00fcr Basic Authentication und das erstellen neuer Posts. Damit das Beispiel funktionieren kann, muss die REST API in der WordPress Site aktiviert sein, und eine passende Authentifizierungsmodus konfiguriert sein.<br \/>\nWeitere Information \u00fcber die API Funktionen findet man unter <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener\">https:\/\/developer.wordpress.org\/rest-api\/<\/a><\/p>\n<pre><code class=\"language-powershell\"># Working against a REST API with basic authentication \n$PrimaryUri  = 'https:\/\/www.YourDomain.de'\n$SecureString = Read-Host -AsSecureString 'Enter password'\n$APIPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto( [Runtime.InteropServices.Marshal]::SecureStringToBSTR( $SecureString))\n$APIUserName = \"YourUserName\"\n$Header = @{Authorization = -join (\"Basic \", [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((\"$APIUserName`:$APIPassword\"))))}\n$Header\n\n# Get title of the start page posts\n$Response = Invoke-RestMethod -Method Get -Uri \"$PrimaryUri\/wp-json\/wp\/v2\/posts?page=1\" -Headers $Header\n$Response.title.rendered\n\n# Get posts via search\n$Response = Invoke-RestMethod -Method Get -Uri \"$PrimaryUri\/wp-json\/wp\/v2\/posts?search=YourSearchString\" -Headers $Header\n$Response.title.rendered\n\n# Get all categories\n$Response = Invoke-RestMethod -Uri \"$PrimaryUri\/wp-json\/wp\/v2\/categories\/\" -Headers $Header\n$Response | Select-object id,name,link\n\n# Get site settings\n$Response = Invoke-RestMethod -Uri \"$PrimaryUri\/wp-json\/wp\/v2\/settings\" -Headers $Header\n$Response | Format-list\n\n# Create a new post\n$body = [ordered] @{\n        title          = 'My title'\n        status         = 'draft'\n        content        = '&lt;h1&gt;my headlile&lt;\/h1&gt;my content with some bla bla text'\n        excerpt        = 'a short excerpt'\n        format         = 'standard'\n } | ConvertTo-Json\n$Response = Invoke-RestMethod -Method Post -Uri \"$PrimaryUri\/wp-json\/wp\/v2\/posts\" -Headers $Header -Body $body  -ContentType 'application\/json'\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein paar kleine Beispiele wie man mittels PowerShell und dessen Invoke-RestMethod Cmdlet eine Wordpress Webseite \u00fcber deren REST API Schnittstelle automatisieren kann.<\/p>\n","protected":false},"author":2,"featured_media":2425,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37],"tags":[],"class_list":["post-3285","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"_links":{"self":[{"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=\/wp\/v2\/posts\/3285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3285"}],"version-history":[{"count":0,"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=\/wp\/v2\/posts\/3285\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=\/wp\/v2\/media\/2425"}],"wp:attachment":[{"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3285"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3285"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dev.mariotti.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}