{"id":800,"date":"2026-09-27T02:02:30","date_gmt":"2026-09-27T02:02:30","guid":{"rendered":"https:\/\/windows-vps.org\/blog\/?p=800"},"modified":"2026-10-17T22:08:46","modified_gmt":"2026-10-17T22:08:46","slug":"powershell-transcription-script-block-logging-audit","status":"publish","type":"post","link":"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/","title":{"rendered":"PowerShell Transcription and Script Block Logging for Server Audit Trails"},"content":{"rendered":"<p class=\"wp-block-paragraph\">PowerShell transcription and Script Block Logging are the two audit controls that most Windows Server incidents are eventually reconstructed from. They do different jobs: transcript files record what appeared on the console and in the pipeline for a whole session, while event 4104 records the parsed script block itself, which is what you need when a script was run from memory with <code>-EncodedCommand<\/code> and never touched disk. Getting both into a tamper-resistant location on a VPS takes about twenty minutes and a clear decision about where the data goes.<\/p>\n\n<h2 class=\"wp-block-heading\">What transcription records and what it misses<\/h2>\n\n<p class=\"wp-block-paragraph\">Transcription writes a text file per host, per user, with a header naming the machine, the user, the runas account, and the time zone, then every command and its output in order. It captures output from <code>Start-Transcript<\/code> in interactive sessions, from the Windows PowerShell ISE, and \u2014 with the policy set \u2014 from every PowerShell host on the machine.<\/p>\n\n<p class=\"wp-block-paragraph\">What it does not capture is equally important. Output of commands run in a nested job or runspace started by <code>Start-Job<\/code> can land in a separate transcript. Native executables that write directly to the console (most installers, <code>robocopy<\/code>, <code>sqlcmd<\/code>) are recorded only as far as PowerShell can observe the stream. And a script that reads a password from a secure string and passes it to an external tool will record the argument, so keep credentials in <code>Get-Credential<\/code> objects or <code>Windows.Data.Protection<\/code> rather than typed inline.<\/p>\n\n<p class=\"wp-block-paragraph\">Transcription gives you readability, not integrity \u2014 that distinction drives the storage design below.<\/p>\n\n<p class=\"wp-block-paragraph\">If you have not yet chosen the host that will hold the transcript share, the <a href=\"https:\/\/windows-vps.org\/\">Windows VPS platform overview<\/a> lists which plans include a dedicated data disk and private networking between instances.<\/p>\n\n<h2 class=\"wp-block-heading\">Enable both controls system-wide with Group Policy<\/h2>\n\n<p class=\"wp-block-paragraph\">The settings live under <code>Computer Configuration\\Administrative Templates\\Windows Components\\Windows PowerShell<\/code>, and applying them by GPO rather than by registry edit means a local administrator cannot quietly switch them off through the registry without the next policy refresh reverting the change.<\/p>\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Policy setting<\/th><th>Registry value<\/th><th>Recommended for a VPS<\/th><\/tr><\/thead><tbody><tr><td>Turn on PowerShell Transcription<\/td><td>HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\Transcription\\EnableTranscripting = 1 (DWORD)<\/td><td>Enabled<\/td><\/tr><tr><td>Transcript output directory<\/td><td>&#8230;\\Transcription\\OutputDirectory (REG_SZ)<\/td><td>\\\\fs01\\ps-logs\\%COMPUTERNAME%<\/td><\/tr><tr><td>Include invocation headers<\/td><td>&#8230;\\Transcription\\IncludeInvocationHeader = 1 (DWORD)<\/td><td>Enabled \u2014 adds timestamps<\/td><\/tr><tr><td>Turn on PowerShell Script Block Logging<\/td><td>HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell\\ScriptBlockLogging\\EnableScriptBlockLogging = 1<\/td><td>Enabled<\/td><\/tr><tr><td>Log script block invocation start\/stop<\/td><td>&#8230;\\ScriptBlockLogging\\EnableScriptBlockInvocationLogging = 1<\/td><td>Disabled \u2014 doubles 4104 volume<\/td><\/tr><tr><td>Event log size, PowerShell\/Operational<\/td><td>HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Channels\\Microsoft-Windows-PowerShell\/Operational\\MaxSize<\/td><td>1 048 576 KB (1 GB)<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Policy registry values under HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell<\/figcaption><\/figure>\n\n<p class=\"wp-block-paragraph\">The same result can be written directly with registry commands for a single server, which is useful when you are testing before rolling out the GPO:<\/p>\n\n<pre class=\"wp-block-code\"><code>$base = 'HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\PowerShell'\nNew-Item -Path \"$base\\Transcription\" -Force | Out-Null\nSet-ItemProperty \"$base\\Transcription\" EnableTranscripting -Type DWord -Value 1\nSet-ItemProperty \"$base\\Transcription\" EnableInvocationHeader -Type DWord -Value 1\nSet-ItemProperty \"$base\\Transcription\" OutputDirectory -Value '\\\\fs01\\ps-logs\\%COMPUTERNAME%'\nNew-Item -Path \"$base\\ScriptBlockLogging\" -Force | Out-Null\nSet-ItemProperty \"$base\\ScriptBlockLogging\" EnableScriptBlockLogging -Type DWord -Value 1\n\n# Verify without logging off\ngpupdate \/target:computer \/force\nGet-ItemProperty \"$base\\Transcription\" | Select-Object EnableTranscripting, OutputDirectory<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Be aware that the policy path is under <code>HKLM\\SOFTWARE\\Policies<\/code>, not <code>HKLM\\SOFTWARE\\Microsoft\\Windows\\PowerShell<\/code>. Values written to the non-Policies key are honoured by the engine in some builds but are ignored the moment a domain GPO sets the policy value, which produces the classic &#8220;it worked on the test box&#8221; failure.<\/p>\n\n<h2 class=\"wp-block-heading\">Send transcripts somewhere the admin cannot alter<\/h2>\n\n<p class=\"wp-block-paragraph\">The default transcript location is <code>%USERPROFILE%\\Documents\\PowerShell_transcript.*.txt<\/code>. On a VPS anyone with local admin can delete that directory, edit the files, or stop the service, so the control has no evidentiary value unless the output leaves the machine immediately. Point <code>OutputDirectory<\/code> at a UNC path on a file server or a log collector with append-only permissions.<\/p>\n\n<p class=\"wp-block-paragraph\">If the share is temporarily unavailable, PowerShell does not buffer \u2014 it writes a warning to the console and the transcript for that session is lost. Keep a fourteen-day local fallback that your backup agent picks up, and forward the contents off-box, so a network blip during an incident does not erase the record of that incident.<\/p>\n\n<h2 class=\"wp-block-heading\">Script Block Logging fills the gaps transcription leaves<\/h2>\n\n<p class=\"wp-block-paragraph\">Every time PowerShell parses a script block it writes event ID <b>4104<\/b> to <code>Microsoft-Windows-PowerShell\/Operational<\/code>. The event contains the raw text of the block, the script path, and a <code>ScriptBlockId<\/code> that groups all parts of a large script \u2014 blocks above 20 KB are split across events 4104 with matching IDs, and you must reassemble them in the correct order to read the code.<\/p>\n\n<p class=\"wp-block-paragraph\">That is what catches the common VPS intrusion pattern: the attacker runs a Base64-encoded one-liner through <code>powershell -EncodedCommand<\/code>, nothing is written to disk, and the only trace is a 4104 event containing the decoded script. Reading recent blocks with filter and shaping is quick from <code>Get-WinEvent<\/code>:<\/p>\n\n<pre class=\"wp-block-code\"><code>$since = (Get-Date).AddHours(-24)\nGet-WinEvent -FilterHashtable @{\n  LogName   = 'Microsoft-Windows-PowerShell\/Operational'\n  Id        = 4104\n  StartTime = $since\n} | ForEach-Object {\n  $x = [xml]$_.ToXml()\n  [pscustomobject]@{\n    Time     = $_.TimeCreated\n    BlockId  = ($x.Event.EventData.Data | Where-Object Name -eq 'ScriptBlockId').'#text'\n    Path     = ($x.Event.EventData.Data | Where-Object Name -eq 'Path').'#text'\n    Script   = ($x.Event.EventData.Data | Where-Object Name -eq 'ScriptBlockText').'#text'\n  }\n} | Where-Object { $_.Script -match 'DownloadString|FromBase64String|IEX|Invoke-Expression|Net\\.WebClient' } |\n  Format-List Time, BlockId, Path, Script<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Event 4103 is the Invocation Logging counterpart \u2014 it records the parameters a block was called with, not just its text, and is the only way to see what arguments a signed, unmodified module function received. It generates roughly one event per pipeline element, so enable it only on specific hosts or specific modules, never globally on a busy application server.<\/p>\n\n<h2 class=\"wp-block-heading\">Rotate and protect the audit trail<\/h2>\n\n<p class=\"wp-block-paragraph\">Both logs end up on disk, and a local administrator can clear the PowerShell log with <code>wevtutil cl Microsoft-Windows-PowerShell\/Operational<\/code>. Event ID 1100 in the System log records log-service shutdown, and 104 proves a log was cleared \u2014 those two are the canary events you should alert on, ideally in an external SIEM rather than on the same host.<\/p>\n\n<ul class=\"wp-block-list\"><li>Grant the audit writer account write-only access to the share; do not give it delete or change permissions.<\/li><li>Forward 4104, 4103, 1100 and 104 to a collector outside the VPS before any retention window matters.<\/li><li>Keep unrelated logs (DHCP, DNS, IIS) in separate channels so a single busy channel cannot roll all evidence out of retention at once.<\/li><li>Note that transcription may not capture console output from some native tools, so interviews or process command lines (<code>Sysmon<\/code> event 1) may still be needed.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">If you are deciding how much disk to dedicate to local audit rollover versus a remote collector, the sizing table on <a href=\"https:\/\/windows-vps.org\/index.html#plans\">Windows VPS plan tiers and storage allocations<\/a> is worth checking before you provision \u2014 audit logs are the one workload that grows without ever shrinking.<\/p>\n\n<h2 class=\"wp-block-heading\">Measure the overhead before you enable it everywhere<\/h2>\n\n<p class=\"wp-block-paragraph\">Script Block Logging is cheap per event but expensive at scale. A loop that calls a function 50,000 times creates 50,000 parse events the first time the block is compiled, and Invocation Logging multiplies that by pipeline element. On a 2 vCPU VPS, enabling full invocation logging on a host that runs nightly automation can add several hundred megabytes per day and a visible CPU bump.<\/p>\n\n<p class=\"wp-block-paragraph\">Measure the deltas rather than guessing. The <code>PowerShell<\/code> performance counter set only exists on builds where the provider is registered, so if it returns nothing, fall back to working set and CPU of the <code>powershell<\/code> processes:<\/p>\n\n<pre class=\"wp-block-code\"><code># Before and after each change\n$sb = Get-Counter -Counter @(\n  '\\PowerShell(*)\\*'\n  '\\Process(powershell*)\\Working Set - Private'\n  '\\Processor(_Total)\\% Processor Time'\n) -SampleInterval 2 -MaxSamples 10\n$sb.CounterSamples | Group-Object Path | ForEach-Object {\n  [pscustomobject]@{ Counter = $_.Name; Avg = [math]::Round(($_.Group | Measure-Object CookedValue -Average).Average, 2) }\n} | Sort-Object Counter<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\">Where this fits operationally<\/h2>\n\n<p class=\"wp-block-paragraph\">A Windows VPS is exactly the kind of host that benefits from both controls: access is remote, the box is usually shared with application workloads, and the audit trail is often the only independent account of what happened. Review the transcript share and 4104 volume quarterly. Pair these settings with <code>PowerShell<\/code> execution policy enforcement and script signing, and log configuration changes with <code>auditpol<\/code> so the audit settings themselves show up in the Security log when altered.<\/p>","protected":false},"excerpt":{"rendered":"<p>PowerShell transcription and Script Block Logging are the two audit controls that most Windows Server incidents are eventually reconstructed from. They do different jobs: transcript files record what appeared on the console and in the pipeline for a whole session, while event 4104 records the parsed script block itself, which is what you need when &#8230; <a title=\"PowerShell Transcription and Script Block Logging for Server Audit Trails\" class=\"read-more\" href=\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/\" aria-label=\"Read more about PowerShell Transcription and Script Block Logging for Server Audit Trails\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":1,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-800","post","type-post","status-publish","format-standard","hentry","category-reviews"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PowerShell Transcription and Script Block Logging for Server Audit Trails - Windows VPS Blog<\/title>\n<meta name=\"description\" content=\"PowerShell transcription and Script Block Logging are the two audit controls that most Windows Server incidents are eventually reconstructed from. They do\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PowerShell Transcription and Script Block Logging for Server Audit Trails\" \/>\n<meta property=\"og:description\" content=\"PowerShell Transcription and Script Block Logging for Server Audit Trails\" \/>\n<meta property=\"og:url\" content=\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/\" \/>\n<meta property=\"og:site_name\" content=\"Windows VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-27T02:02:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-17T22:08:46+00:00\" \/>\n<meta name=\"author\" content=\"windows-vps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@myxiechengxuan\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"windows-vps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/\",\"url\":\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/\",\"name\":\"PowerShell Transcription and Script Block Logging for Server Audit Trails - Windows VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\"},\"datePublished\":\"2026-09-27T02:02:30+00:00\",\"dateModified\":\"2026-10-17T22:08:46+00:00\",\"author\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\"},\"description\":\"PowerShell transcription and Script Block Logging are the two audit controls that most Windows Server incidents are eventually reconstructed from. They do\",\"breadcrumb\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/windows-vps.org\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PowerShell Transcription and Script Block Logging for Server Audit Trails\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\",\"url\":\"https:\/\/windows-vps.org\/blog\/\",\"name\":\"Windows VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/windows-vps.org\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\",\"name\":\"windows-vps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"caption\":\"windows-vps\"},\"sameAs\":[\"https:\/\/windows-vps.org\/blog\",\"https:\/\/x.com\/myxiechengxuan\"],\"url\":\"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PowerShell Transcription and Script Block Logging for Server Audit Trails - Windows VPS Blog","description":"PowerShell transcription and Script Block Logging are the two audit controls that most Windows Server incidents are eventually reconstructed from. They do","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/","og_locale":"en_US","og_type":"article","og_title":"PowerShell Transcription and Script Block Logging for Server Audit Trails","og_description":"PowerShell Transcription and Script Block Logging for Server Audit Trails","og_url":"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/","og_site_name":"Windows VPS Blog","article_published_time":"2026-09-27T02:02:30+00:00","article_modified_time":"2026-10-17T22:08:46+00:00","author":"windows-vps","twitter_card":"summary_large_image","twitter_creator":"@myxiechengxuan","twitter_misc":{"Written by":"windows-vps","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/","url":"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/","name":"PowerShell Transcription and Script Block Logging for Server Audit Trails - Windows VPS Blog","isPartOf":{"@id":"https:\/\/windows-vps.org\/blog\/#website"},"datePublished":"2026-09-27T02:02:30+00:00","dateModified":"2026-10-17T22:08:46+00:00","author":{"@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58"},"description":"PowerShell transcription and Script Block Logging are the two audit controls that most Windows Server incidents are eventually reconstructed from. They do","breadcrumb":{"@id":"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/windows-vps.org\/blog\/powershell-transcription-script-block-logging-audit\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/windows-vps.org\/blog\/"},{"@type":"ListItem","position":2,"name":"PowerShell Transcription and Script Block Logging for Server Audit Trails"}]},{"@type":"WebSite","@id":"https:\/\/windows-vps.org\/blog\/#website","url":"https:\/\/windows-vps.org\/blog\/","name":"Windows VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/windows-vps.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58","name":"windows-vps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","caption":"windows-vps"},"sameAs":["https:\/\/windows-vps.org\/blog","https:\/\/x.com\/myxiechengxuan"],"url":"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/"}]}},"_links":{"self":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/comments?post=800"}],"version-history":[{"count":3,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/800\/revisions"}],"predecessor-version":[{"id":887,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/800\/revisions\/887"}],"wp:attachment":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/media?parent=800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/categories?post=800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/tags?post=800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}