{"id":16621,"date":"2010-11-03T00:01:00","date_gmt":"2010-11-03T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2010\/11\/03\/use-powershell-to-change-sql-server-service-accounts\/"},"modified":"2010-11-03T00:01:00","modified_gmt":"2010-11-03T00:01:00","slug":"use-powershell-to-change-sql-server-service-accounts","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/use-powershell-to-change-sql-server-service-accounts\/","title":{"rendered":"Use PowerShell to Change SQL Server Service Accounts"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><b>Summary:<\/b> Learn how to use Windows PowerShell to change SQL Server service accounts.<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Question\" border=\"0\" title=\"Hey, Scripting Guy! Question\" \/>Hey, Scripting Guy! How can I use PowerShell to change SQL Server service accounts?<\/p>\n<p>&#8212; NM<\/p>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Answer\" border=\"0\" title=\"Hey, Scripting Guy! Answer\" \/>Hello NM, Microsoft Scripting Guy Ed Wilson here. This week I am hosting guest bloggers from the SQL side of life. This is in honor of the <a href=\"http:\/\/www.sqlpass.org\/summit\/na2010\/\">SQL PASS Summit 2010<\/a> that will occur next week in Seattle. Today we have Aaron Nelson. <\/p>\n<p>&nbsp;<img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/1663.HSG-11-3-10-01.jpg\" border=\"0\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Aaron Nelson is a Senior SQL Server Architect with over 10 years&#8217; experience in architecture, business intelligence, development, and performance tuning of SQL Server. He has experience managing enterprise wide data needs in both transactional and data warehouse environments. Aaron holds certifications for MCITP: Business Intelligence Developer, Database Administrator, Database Developer; and MCTS: Windows Server Virtualization, Configuration (meaning Hyper-V). Aaron can be found on Twitter ( @SQLvariant&nbsp; ) and on his blog. <\/p>\n<p>Aaron helps run the AppDev and PowerShell Virtual Chapters of PASS, and volunteers for the local PASS Chapter AtlantaMDF. He also co-runs the Atlanta PowerShell User Group, and helps organize SQL Saturday seminars in Atlanta. <\/p>\n<p>Take it away Aaron. <\/p>\n<p>&nbsp;<\/p>\n<h2>Working with SQL Server Service Accounts<\/h2>\n<p>After a long, hot and oppressive summer, something resembling Fall has begun to descend upon the Atlanta, GA area. However, with lots of green leaves still on trees, bright sunshine, and daily highs in the mid 70s and low 80s it is difficult to think its fall by noon.<\/p>\n<p>Checking Service Accounts for SQL Server is important for many reasons. Here are a couple important things we can do with them using Windows PowerShell.&nbsp;<\/p>\n<p>As I did in <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/2010\/11\/02\/use-powershell-to-obtain-sql-server-database-sizes.aspx\">yesterday&#8217;s Hey Scripting Guy! post<\/a><i>,<\/i> I am going to discuss several different approaches that you can use to collect your information. I&#8217;m doing this because there are lots of people who are used to using Windows PowerShell a certain way and if you are used to using cmdlets to check service account information then you may have never see how to do with the Windows PowerShell SQL Provider, Windows Management Instrumentation (WMI), or &nbsp;SQL Server Management Objects (SMO) and vice-versa.&nbsp;<\/p>\n<p style=\"padding-left: 30px\"><b>Note:<\/b> To actually change a service account, you have to start Windows PowerShell with Administrator rights. One way to do this is to right-click either the <b>Windows PowerShell<\/b> console icon or the <b>Windows PowerShell ISE<\/b> icon and select the <b>Run as Administrator<\/b> option. From a safety perspective, when you are finished making your changes, close Windows PowerShell and reopen it with your usual (non-elevated) credentials. On Windows XP, use the <b>Run As&#8230;<\/b> option as <a href=\"http:\/\/blogs.technet.com\/b\/heyscriptingguy\/archive\/2010\/04\/18\/hey-scripting-guy-april-18-2010.aspx\">discussed in this Scripting Wife article<\/a>. <\/p>\n<p>&nbsp;<\/p>\n<h3>Provider<\/h3>\n<p>First, let us examine how we can do this by using the Provider. Start your favorite script editor and run this.&nbsp; You will see that you can retrieve the name of the service and the account the service is running under for the whole machine.<\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">Add-PSSnapin SqlServerProviderSnapin100;<br \/>cd SQLSERVER:\\SQL\\WIN7NetBook\\;<br \/>Get-ChildItem&nbsp;| Select-Object ServiceName, ServiceAccount , ServiceStartMode, ServerType<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3>WMI<\/h3>\n<p>Similarly, with the <b>Get-WmiObject<\/b> Windows PowerShell cmdlet we can obtain all same information about the service accounts, this time through WMI, and we are not limited to just the service account for the relational engine. A benefit with using the WMI cmdlet over the SQL Provider is that we can pass a comma-separated list of servers to the <i>-computer<\/i> parameter and it will come back with the services from all the machines at the same time in one nice list. In addition, we do not have to limit ourselves to just SQL Services so that can be useful also. The WMI code is shown here. <\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">Get-WmiObject win32_service -computer WIN7NetBook, WIN7Laptop, WIN7Desktop | <br \/>Where-Object {$_.name -match &#8220;^*SQL*&#8221;} | select SystemName, Name, StartName, PathName<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3>SMO<\/h3>\n<p>When you work with the SMO to collect the Service Account information that you may notice that we are loading a different assembly than you will see in most Windows PowerShell scripts that works with SQL Server&#8217;s SMO. In fact, trying to determine which assembly was the correct one to use was, well, let&#8217;s just call it a &#8216;learning experience&#8217; and cost me four hours of my life that I will never get back. Hence the reason I am devoting an entire blog to this subject. In any case, we load up the assembly and pass it the parameter of the server name that we want to interrogate. This approach is slow compared to all the other approaches . However, it gives you back very detailed information and is important to know for changing the Service Account, as we will see later.<\/p>\n<p style=\"padding-left: 30px\"><b>Note:<\/b> I love what comes up under the <b>Type<\/b> column for the <b>SQL Full-text Filter Daemon Launcher<\/b>. Yes, I know that it is the <b>Type<\/b> property but because I&#8217;m a SQL person and I specified <b>Format-Table<\/b>, it is a column.<\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">[System.Reflection.Assembly]::LoadWithPartialName(&#8220;Microsoft.SqlServer.SqlWmiManagement&#8221;) | out-null<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$SMOWmiserver = New-Object (&#8216;Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer&#8217;) &#8220;WIN7NetBook&#8221; #pull in the server you want&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$SMOWmiserver.Services | Select-Object name, type, ServiceAccount, DisplayName, StartMode, StartupParameters | Format-Table<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3>Cmdlet<\/h3>\n<p>If you have to retrieve a list of which SQL Services are on many machines and whether those services are running, the <b>Get-Service<\/b> Windows PowerShell cmdlet is the tool to use. This is by far the fastest way to collect that kind of data, especially from a large number of machines. Here I&#8217;ve taken use of the <i>-ComputerName<\/i> parameter one step further and used the <b>Get-Content<\/b> cmdlet to obtain a list of servers out of a text file on my machine. The only drawback to this approach is that you lose the ability to see the Service Account that you have had in the other three examples. The speed with which this cmdlet runs against many servers makes it a very useful tool to have in your arsenal; especially if you are probing servers to see whether they have SQL Server installed.<\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">Get-Service *SQL* -ComputerName (Get-Content C:\\PowerShell\\AllServers.txt) &#8216;<br \/>| Sort-Object MachineName, DisplayName | format-table -property MachineName, Status, Name, DisplayName<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>If we are looking for something specific like a SQL Server Agent on a remote machine that is not running (and should be) you can make that easier to spot by piping the output to the <b>Where-Object<\/b> cmdlet and filtering down to just the services that are not running. Of course, in most advanced environments there are many times when you may want certain services to be stopped on some machines and running on other machines . Therefore, you will probably want to control this list from a table in a centrally located database (and a backup copy of that table on your desktop, just in case).<\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">Get-Service *SQL* -ComputerName (Get-Content C:\\PowerShell\\AllServers.txt) &#8216;<br \/>| Where-Object {$_.Status -ne &#8220;Running&#8221;} &#8216;<br \/>| Sort-Object MachineName, DisplayName &#8216;<br \/>| format-table MachineName, Status, Name, DisplayName<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2>Changing Service Accounts<\/h2>\n<p>Now what if, in one of those scans, we see a Service Account running under someone&#8217;s personal domain account instead of a designated Service Account and want to change that?&nbsp; For Computers that are running SQL Server SQL 2005 through 2008 R2, you have to use the <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/ms345578.aspx\">SQL Server Configuration Manager<\/a> to change the service account. To access <b>Configuration Manager<\/b> with Windows PowerShell you can start with the same bit of code from earlier and just add to it. The script assumes that you have the permissions to enable you to change the password for the service account. If you are uncomfortable with storing your password in the script, you can use command line parameters to pass the password to the script when it starts. You could also use the <b>Read-Host<\/b> cmdlet to prompt you for the new password. The code is seen here.<\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">[System.Reflection.Assembly]::LoadWithPartialName(&#8220;Microsoft.SqlServer.SqlWmiManagement&#8221;) | out-null<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$SMOWmiserver = New-Object (&#8216;Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer&#8217;) &#8220;WIN7NetBook&#8221; #pull in the server you want&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#Check which service you have loaded first<br \/>$ChangeService | select name, type, ServiceAccount, DisplayName, Properties, StartMode, StartupParameters | Format-Table <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#Specify the &#8220;Name&#8221; (from the query above) of the one service whose Service Account you want to change.<br \/>$ChangeService=$SMOWmiserver.Services | where {$_.name -eq &#8220;MSSQLSERVER&#8221;} #Make sure this is what you want changed! <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$UName=&#8221;DomainName\\UserName&#8221;<br \/>$PWord=&#8221;YourPassword&#8221;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$ChangeService.SetServiceAccount($UName, $PWord)<br \/>#Now take a look at it afterwards<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$ChangeService | select name, type, ServiceAccount, DisplayName, Properties, StartMode, StartupParameters | Format-Table <\/span><\/p>\n<p>&nbsp;<\/p>\n<p>The complete <b>Change-SqlServiceAccount.ps1<\/b> script is seen here.<\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\"><strong>Change-SqlServiceAccount.ps1<\/strong><\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&lt;#<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; This script will change the startup account of the specified SQL Service account on<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; the machine you specify.&nbsp; This script requires to be run in an elevated PowerShell session<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; For Details on how to elevate your shell go to: http:\/\/bit.ly\/anogNt<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; This script can be run to just tell you about the SQL services that you have running <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; on a given machine by highlighting until you get down to the first $ChangeService <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; Make sure to change: &#8220;MyServerName&#8221;, &#8220;MSSQLSERVER&#8221;(if that&#8217;s not the one you want)<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; , &#8220;DomainName\\UserName&#8221;, &#8220;YourPassword&#8221;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; This script may not work against a SQL Server that is not running PowerShell<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;&nbsp;&nbsp; (c) Aaron Nelson<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">Warning:&nbsp; I have not tested this with SSRS yet.&nbsp; <\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#&gt;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#Load the SqlWmiManagement assembly off of the DLL<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">[System.Reflection.Assembly]::LoadWithPartialName(&#8220;Microsoft.SqlServer.SqlWmiManagement&#8221;) | out-null<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$SMOWmiserver = New-Object (&#8216;Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer&#8217;) &#8220;WIN7NetBook&#8221; #Suck in the server you want<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#These just act as some queries about the SQL Services on the machine you specified.<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$SMOWmiserver.Services | select name, type, ServiceAccount, DisplayName, Properties, StartMode, StartupParameters | Format-Table<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#Same information just pivot the data<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$SMOWmiserver.Services | select name, type, ServiceAccount, DisplayName, Properties, StartMode, StartupParameters | Format-List<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#Specify the &#8220;Name&#8221; (from the query above) of the one service whose Service Account you want to change.<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$ChangeService=$SMOWmiserver.Services | where {$_.name -eq &#8220;MSSQLSERVER&#8221;} #Make sure this is what you want changed!<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#Check which service you have loaded first<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$ChangeService<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$UName=&#8221;DomainName\\UserName&#8221;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$PWord=&#8221;YourPassword&#8221;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$ChangeService.SetServiceAccount($UName, $PWord)<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#Now take a look at it afterwards<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">$ChangeService<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">&nbsp;<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\">#To soo what else you could do to that service run this:&nbsp; $ChangeService | gm<\/span><\/p>\n<p style=\"padding-left: 30px\"><span style=\"font-family: courier new,courier\"><\/span><\/p>\n<p>&nbsp;<\/p>\n<h2>Conclusion<\/h2>\n<p>So there we have it, at least four approaches with Windows PowerShell to collect Service account information for SQL Server. The choice of the best methodology depends on the information being sought. If you just need a quick list of SQL Server services that are installed on a list of machines and whether they are running, the Windows PowerShell cmdlet <b>Get-Service<\/b> is your friend. If you have to have something more like the service account that the service is running under the SQL Provider, WMI, or SMO can all be used. Be aware that only the <b>Get-WmiObject<\/b> cmdlet can quickly and easily check multiple machines for you. Nevertheless, as with everything in technology YMMV (your mileage may vary).<\/p>\n<p>&nbsp;<\/p>\n<p>NM, that is all there is to using Windows PowerShell to retrieve information about the status of SQL Server&#8217;s services. SQL guest blogger week will continue tomorrow. Thanks Aaron for today&#8217;s blog. <\/p>\n<p>I invite you to follow me on <a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingguystwitter\">Twitter<\/a> or <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\">Facebook<\/a>. If you have any questions, send email to me at <a target=\"_blank\" href=\"mailto:scripter@microsoft.com\">scripter@microsoft.com<\/a> or post them on the <a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingforum\">Official Scripting Guys Forum<\/a>. See you tomorrow. Until then, peace.<\/p>\n<p>&nbsp;<\/p>\n<p><b>Ed Wilson, Microsoft Scripting Guy<\/b><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Summary: Learn how to use Windows PowerShell to change SQL Server service accounts. &nbsp; Hey, Scripting Guy! How can I use PowerShell to change SQL Server service accounts? &#8212; NM &nbsp; Hello NM, Microsoft Scripting Guy Ed Wilson here. This week I am hosting guest bloggers from the SQL side of life. This is [&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":[194,146,56,3,176,45],"class_list":["post-16621","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-aaron-nelson","tag-databases","tag-guest-blogger","tag-scripting-guy","tag-sql-server","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp; Summary: Learn how to use Windows PowerShell to change SQL Server service accounts. &nbsp; Hey, Scripting Guy! How can I use PowerShell to change SQL Server service accounts? &#8212; NM &nbsp; Hello NM, Microsoft Scripting Guy Ed Wilson here. This week I am hosting guest bloggers from the SQL side of life. This is [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16621","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=16621"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16621\/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=16621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=16621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=16621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}