{"id":8629,"date":"2021-10-15T10:41:56","date_gmt":"2021-10-15T14:41:56","guid":{"rendered":"https:\/\/jdhitsolutions.com\/blog\/?p=8629"},"modified":"2021-10-15T11:05:38","modified_gmt":"2021-10-15T15:05:38","slug":"friday-fun-a-powershell-welcome","status":"publish","type":"post","link":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/","title":{"rendered":"Friday Fun: A PowerShell Welcome"},"content":{"rendered":"\n<p>I realized it had been a while since I wrote a Friday Fun post. These posts are intended to demonstrate PowerShell in a fun and often non-practical way. The end result is generally irrelevant. The PowerShell scripting techniques and concepts I use are the real takeaways. The task is nothing more than a means to an end.<\/p>\n\n\n\n<p>Today's project is inspired by Linux. Specifically, the WSL Ubuntu installation I run in Windows Terminal. When I first launch it, I get a welcome screen like this.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><a href=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"658\" src=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-1024x658.png\" alt=\"\" class=\"wp-image-8630\" srcset=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-1024x658.png 1024w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-300x193.png 300w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-768x493.png 768w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-850x546.png 850w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome.png 1107w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>I thought, why not do something similar for PowerShell?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Text Not Objects<\/h2>\n\n\n\n<p>The first decision I made was to output formatted text. Normally, I'm always telling people \"Think objects, not text.\" But this task, because I'm re-creating a Linux experience is all about text. I suppose I could have created a custom object and then created a custom format file, but using a here-string would be much easier. A here-string is a nice way to create a multi-line string object.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$h = @\"\n\nWelcome to PowerShell\n---------------------\n\n  It is now $(Get-Date -format t)\n\n\"@<\/code><\/pre>\n\n\n\n<p>You can format the text inside the @\"\"@ including blank lines and indenting. Because I'm using double-quotes, I can also take advantage of variable expansion. By the way, the closing \"@ must be left-justified.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-default\"><a href=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/sample-herestring.png\"><img loading=\"lazy\" decoding=\"async\" width=\"275\" height=\"192\" src=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/sample-herestring.png\" alt=\"\" class=\"wp-image-8631\"\/><\/a><\/figure>\n\n\n\n<p>My PowerShell script will create a here-string, using variable expansion. For example, the first line in the welcome display shows operating system information. I opted for PowerShell information. Since I wanted to distinguish between Windows PowerShell and PowerShell so I came up with code like this.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">if ($PSEdition -eq 'Desktop') {\n    $psname = \"Windows PowerShell\"\n    $psosbuild = $PSVersionTable.BuildVersion\n}\nelse {\n    $psname = \"PowerShell\"\n    $psosbuild = $PSVersionTable.os\n}<\/code><\/pre>\n\n\n\n<p>The opening of my here-string looks like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">    $out = @\"\n\nWelcome to $psname $($PSVersionTable.PSVersion) [$psosbuild]\n\n    * Documentation:  https:\/\/docs.microsoft.com\/powershell\/\n    * Management:     https:\/\/powershellgallery.com\n    * Support:        https:\/\/powershell.org<\/code><\/pre>\n\n\n\n<p>These are the links I chose. A nice bonus in Windows Terminal is that the links are clickable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Formatting Dates and TimeZones<\/h2>\n\n\n\n<p>Next, I needed to recreate the DateTime string. Formatting the current date and time can be done with the -Format parameter.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">Get-Date -Format \"ddd MMM dd hh:mm:ss\"<\/code><\/pre>\n\n\n\n<p>The format string is case-sensitive. I didn't include the year (which would be yyyy) because I want to insert the time zone. It is simple enough to run Get-Timezone to get the current value. However, in the US I also need to test if I am under DaylightSavingTime rules.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$tz = Get-Timezone #[System.TimeZone]::CurrentTimeZone\nif ($tz.IsDaylightSavingTime((Get-Date))) {\n    $tzNameString = $tz.DaylightName\n}\nelse {\n    $tzNameString = $tz.StandardName\n}<\/code><\/pre>\n\n\n\n<p>Now for the tricky part. I'd really like to use a timezone abbreviation like EDT. However, the .NET Framework lacks a defined way to get this information. There are third-party solutions I could download, or probably even web-based tools I could use. Instead, I decided to keep it simple and create my own abbreviation from the time zone name.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$tzName = ($tznamestring.split() | ForEach-Object {$_[0]}) -join \"\"<\/code><\/pre>\n\n\n\n<p>I am splitting the string, \"Eastern Daylight Time\" into an array. Each word in the array is itself an array of characters. So for each item in the array, I am selecting the first letter and then finally joining them back into a string.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-default\"><a href=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/split-join.png\"><img loading=\"lazy\" decoding=\"async\" width=\"718\" height=\"296\" src=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/split-join.png\" alt=\"\" class=\"wp-image-8632\" srcset=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/split-join.png 718w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/split-join-300x124.png 300w\" sizes=\"auto, (max-width: 718px) 100vw, 718px\" \/><\/a><\/figure>\n\n\n\n<p>This approach should work fine for US users. I can't guarantee compatibility everywhere. If you want a time zone abbreviation, you may need to come up with your own code or omit it altogether.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting System Information<\/h2>\n\n\n\n<p>Next up is a display of system information. You can get most of this information in several ways. You can use native cmdlets like Get-Volume. You can query WMI with Get-Ciminstance. You can use Get-Counter to retrieve performance counters. Or maybe there is a command-line tool you can run and parse. The only thing that mattered to me was that I wanted it to be fast.<\/p>\n\n\n\n<p>For example, when using Get-Cimstance you can improve performance by only getting the properties you intend to use. I decided to get memory information from Win32_Operatingsystem. But I only needed two properties.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">Get-CimInstance -ClassName win32_operatingsystem -Property TotalVisibleMemorySize, FreePhysicalMemory<\/code><\/pre>\n\n\n\n<p>This is another way to do early filtering. In this situation, the actual performance gain is minimal. Getting the complete WMI class takes me 98ms compared to 73ms when limiting properties. But I'll take what I can get and this is still a good practice to follow.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$os = Get-CimInstance -ClassName win32_operatingsystem -Property TotalVisibleMemorySize, FreePhysicalMemory\n$memUsed = $os.TotalVisibleMemorySize - $os.FreePhysicalMemory\n$memUsage = \"{0:p}\" -f ($memUsed \/ $os.TotalVisibleMemorySize)<\/code><\/pre>\n\n\n\n<p>This is representative of the technique I used. The last line is defining the variable which will be displayed in the result. The -F operator is the .NET replacement operator. You should read about_operators to learn more. In short, the left side of the operator had numbered placeholders like {0} and {1}. The right side of the operator is a comma-separated list of values that get plugged into the corresponding positions. But, you can also quantify the format. In this example, {0:p} will format the value as a percent like 49.11%.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Formatting the Output<\/h2>\n\n\n\n<p>In the Ubuntu message, the system information is displayed in two aligned columns. In PowerShell, this is very tedious to duplicate so I opted for a single column. However, I still wanted the values to be aligned so I still had to resort to some string hackery. I needed to insert enough blank space after the entry \"header\", like 'System load:' so that all of the values lined up. This meant I had to account for the longest header minus the length of the current header. I ended up writing a helper function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">#This will be the longest string I have to accomodate\n$longest = \"IPV4 address for $($if.InterfaceAlias)\".length\nfunction _display {\n    param([object]$value,[int]$headlength,[int]$max =$longest)\n    $len = ($max - $headlength)+2\n    \"{0}{1}\" -f (' '*$len),$value\n}<\/code><\/pre>\n\n\n\n<p>In my here-string, this is how I use the function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">System load:$(_display -value $sysPerf.ProcessorQueueLength -headlength 11)\nProcesses:$(_display -value $sysPerf.Processes -headlength 9 )<\/code><\/pre>\n\n\n\n<p>The -headlength value is inserted manually. All that remains is to display the message by running the script.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-default\"><a href=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-winps.png\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"419\" src=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-winps.png\" alt=\"\" class=\"wp-image-8635\" srcset=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-winps.png 720w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-winps-300x175.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-style-default\"><a href=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-ps.png\"><img loading=\"lazy\" decoding=\"async\" width=\"606\" height=\"371\" src=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-ps.png\" alt=\"\" class=\"wp-image-8636\" srcset=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-ps.png 606w, https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/welcome-ps-300x184.png 300w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/a><\/figure>\n\n\n\n<p>These sessions are running in Windows Terminal under different themes. But that's pretty close to the Ubuntu original!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Controlling the Display<\/h2>\n\n\n\n<p>The Ubuntu original has a mechanism so that the message only displays once a day. My PowerShell script can be run whenever you want. Still, I thought it would be fun to recreate the logic in PowerShell.  <\/p>\n\n\n\n<p>The script defines a temporary tracking file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$trackPath = Join-Path -path $env:TEMP -ChildPath pswelcome.tmp<\/code><\/pre>\n\n\n\n<p>When the message is displayed it is also written to this file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$out | Tee-Object -FilePath $trackPath<\/code><\/pre>\n\n\n\n<p>At the beginning of the script, I have this code, which is currently commented out.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$AlreadyRun = $False\nif (Test-Path -path $trackPath) {\n    $f = Get-Item -path $trackPath\n    $ts = New-TimeSpan -Start $f.CreationTime -End (Get-Date)\n    if ($ts.TotalHours -le 24) {\n        $AlreadyRun = $True\n    }\n}<\/code><\/pre>\n\n\n\n<p>If the tracking file exists and the creation time is less than 24 hours, set $AlreadyRun to True. I could have written this logic in a more concise manner, but it would have lacked the clarity of this code.<\/p>\n\n\n\n<p>I use the $AlreadyRun value to test if I should run the rest of the script.  This is also where I recreate the hushfile logic. The script defines that path.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">$hushpath = Join-Path -Path $home -ChildPath \".hushlogin\"<\/code><\/pre>\n\n\n\n<p>Now I can test for that file or if the file has already been run.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">if ((Test-Path -Path $hushpath) -OR $AlreadyRun) {\n    #skip running the welcome code\n}\nelse { \n#run the code to create and display the message\n...<\/code><\/pre>\n\n\n\n<p>The hushfile doesn't have to have any content. All PowerShell is doing is testing if it exists.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Script<\/h2>\n\n\n\n<p>Want to try for yourself?<\/p>\n\n\n\n<pre title=\"Welcome.ps1\" class=\"wp-block-code\"><code lang=\"powershell\" class=\"language-powershell\">#requires -version 5.1\n#requires -module Storage,CimCmdlets\n\n#the hush file to disable running this script. The file\n#doesn't have to have any content. It simply needs to exist.\n$hushpath = Join-Path -Path $home -ChildPath \".hushlogin\"\n\n# define a temporary tracking file.\n$trackPath = Join-Path -path $env:TEMP -ChildPath pswelcome.tmp\n&lt;#\nUncomment this code if you want to use a tracking file\n\n#If the file is less than 24 hours old then skip running this script\n\n$AlreadyRun = $False\nif (Test-Path -path $trackPath) {\n    $f = Get-Item -path $trackPath\n    $ts = New-TimeSpan -Start $f.CreationTime -End (Get-Date)\n    if ($ts.TotalHours -le 24) {\n        $AlreadyRun = $True\n    }\n}\n#&gt;\n\nif ((Test-Path -Path $hushpath) -OR $AlreadyRun) {\n    #skip running the welcome code\n}\nelse {\n    if ($PSEdition -eq 'Desktop') {\n        $psname = \"Windows PowerShell\"\n        $psosbuild = $PSVersionTable.BuildVersion\n    }\n    else {\n        $psname = \"PowerShell\"\n        $psosbuild = $PSVersionTable.os\n    }\n\n    #Wed Oct 13 08:13:45 EDT 2021\n    $welcomeDate = Get-Date -Format \"ddd MMM dd hh:mm:ss\"\n\n    #get the timezone\n    $tz = Get-Timezone #[System.TimeZone]::CurrentTimeZone\n    if ($tz.IsDaylightSavingTime((Get-Date))) {\n        $tzNameString = $tz.DaylightName\n    }\n    else {\n        $tzNameString = $tz.StandardName\n    }\n\n    #my hack at creating a time zone abbreviation since there is no built-in\n    #way that I can find to get this information. This may not work properly\n    #for non-US timezones\n    $tzName = ($tznamestring.split() | ForEach-Object {$_[0]}) -join \"\"\n\n    #Get Drive C usage\n    $c = Get-Volume -DriveLetter C\n    $used = $c.size - $c.SizeRemaining\n    $cusage = \"{0:p2} of {1:n0}GB\" -f ($used \/ $c.size), ($c.size \/ 1GB)\n\n    #get network adapter and IP\n    #filter out Hyper-V adapters and the Loopback\n    $ip = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.addressState -eq 'preferred' -AND $_.InterfaceAlias -notmatch \"vEthernet|Loopback\" } -outvariable if).IPAddress\n\n    #only get the properties I need to use for memory information\n    $os = Get-CimInstance -ClassName win32_operatingsystem -Property TotalVisibleMemorySize, FreePhysicalMemory\n    $memUsed = $os.TotalVisibleMemorySize - $os.FreePhysicalMemory\n    $memUsage = \"{0:p}\" -f ($memUsed \/ $os.TotalVisibleMemorySize)\n\n    #get system performance counters\n    $sysPerf = Get-CimInstance -ClassName Win32_PerfFormattedData_PerfOS_System -Property Processes, ProcessorQueueLength\n\n    #get pagefile information\n    $pagefile = Get-CimInstance -ClassName Win32_PageFileUsage -Property CurrentUsage,AllocatedBaseSize\n    $swap = \"{0:p}\" -f ($pagefile.CurrentUsage\/$pagefile.AllocatedBaseSize)\n\n    &lt;#\n    A helper function to format the display so that everything aligns properly.\n    The HeadLength is the length of the 'header' like 'System load'\n    #&gt;\n\n    #This will be the longest string I have to accomodate\n    $longest = \"IPV4 address for $($if.InterfaceAlias)\".length\n    function _display {\n        param([object]$value,[int]$headlength,[int]$max =$longest)\n        $len = ($max - $headlength)+2\n        \"{0}{1}\" -f (' '*$len),$value\n    }\n\n    #build the display here-string inserting the calculated variables\n    $out = @\"\n\nWelcome to $psname $($PSVersionTable.PSVersion) [$psosbuild]\n\n    * Documentation:  https:\/\/docs.microsoft.com\/powershell\/\n    * Management:     https:\/\/powershellgallery.com\n    * Support:        https:\/\/powershell.org\n\nSystem Information as of $welcomeDate $tzName $((Get-Date).year)\n\n    System load:$(_display -value $sysPerf.ProcessorQueueLength -headlength 11)\n    Processes:$(_display -value $sysPerf.Processes -headlength 9 )\n    Users logged in:$(_display -value $(((quser).count-1)) -headlength 15)\n    Usage of C:$(_display -value $cusage -headlength 10)\n    Memory Usage:$(_display -value $memUsage -headlength 12 )\n    IPV4 address for $($if.InterfaceAlias):$(_display -value $IP -headlength $longest)\n    Swap usage:$(_display -value $swap -headlength 10)\n\n    This message is shown once a day. To disable it please create the\n$hushpath file.\n\n\"@\n\n    Clear-Host\n    #display the welcome text and also send it to the temporary tracking file\n    $out | Tee-Object -FilePath $trackPath\n\n}<\/code><\/pre>\n\n\n\n<p>Note that this is a PowerShell script file and not a function. You could enable the 24-hour tracking and put this in your PowerShell profile script. You could add or remove information. You could customize the help links. Or you can pick through the code, finding techniques and ideas for your own PowerShell scripting projects. Questions and comments are welcome. Have fun!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I realized it had been a while since I wrote a Friday Fun post. These posts are intended to demonstrate PowerShell in a fun and often non-practical way. The end result is generally irrelevant. The PowerShell scripting techniques and concepts I use are the real takeaways. The task is nothing more than a means to&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"New on the blog -> Friday Fun: A #PowerShell Welcome","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[271,4,8],"tags":[387,568,179,534,540],"class_list":["post-8629","post","type-post","status-publish","format-standard","hentry","category-friday-fun","category-powershell","category-scripting","tag-cim","tag-friday-fun","tag-performance","tag-powershell","tag-scripting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Friday Fun: A PowerShell Welcome &#8226; The Lonely Administrator<\/title>\n<meta name=\"description\" content=\"Creating a PowerShell version of an Ubuntu welcome screen with help links and system information. An example of PowerShell scripting tricks.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Friday Fun: A PowerShell Welcome &#8226; The Lonely Administrator\" \/>\n<meta property=\"og:description\" content=\"Creating a PowerShell version of an Ubuntu welcome screen with help links and system information. An example of PowerShell scripting tricks.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/\" \/>\n<meta property=\"og:site_name\" content=\"The Lonely Administrator\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-15T14:41:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-15T15:05:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-1024x658.png\" \/>\n<meta name=\"author\" content=\"Jeffery Hicks\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:site\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeffery Hicks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/\"},\"author\":{\"name\":\"Jeffery Hicks\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"headline\":\"Friday Fun: A PowerShell Welcome\",\"datePublished\":\"2021-10-15T14:41:56+00:00\",\"dateModified\":\"2021-10-15T15:05:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/\"},\"wordCount\":1117,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"image\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/ubuntu-welcome-1024x658.png\",\"keywords\":[\"CIM\",\"Friday Fun\",\"Performance\",\"PowerShell\",\"Scripting\"],\"articleSection\":[\"Friday Fun\",\"PowerShell\",\"Scripting\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/\",\"name\":\"Friday Fun: A PowerShell Welcome &#8226; The Lonely Administrator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/ubuntu-welcome-1024x658.png\",\"datePublished\":\"2021-10-15T14:41:56+00:00\",\"dateModified\":\"2021-10-15T15:05:38+00:00\",\"description\":\"Creating a PowerShell version of an Ubuntu welcome screen with help links and system information. An example of PowerShell scripting tricks.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#primaryimage\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/ubuntu-welcome.png\",\"contentUrl\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/ubuntu-welcome.png\",\"width\":1107,\"height\":711},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/8629\\\/friday-fun-a-powershell-welcome\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"PowerShell\",\"item\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/category\\\/powershell\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Friday Fun: A PowerShell Welcome\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/\",\"name\":\"The Lonely Administrator\",\"description\":\"Practical Advice for the Automating IT Pro\",\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\",\"name\":\"Jeffery Hicks\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"caption\":\"Jeffery Hicks\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Friday Fun: A PowerShell Welcome &#8226; The Lonely Administrator","description":"Creating a PowerShell version of an Ubuntu welcome screen with help links and system information. An example of PowerShell scripting tricks.","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:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/","og_locale":"en_US","og_type":"article","og_title":"Friday Fun: A PowerShell Welcome &#8226; The Lonely Administrator","og_description":"Creating a PowerShell version of an Ubuntu welcome screen with help links and system information. An example of PowerShell scripting tricks.","og_url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/","og_site_name":"The Lonely Administrator","article_published_time":"2021-10-15T14:41:56+00:00","article_modified_time":"2021-10-15T15:05:38+00:00","og_image":[{"url":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-1024x658.png","type":"","width":"","height":""}],"author":"Jeffery Hicks","twitter_card":"summary_large_image","twitter_creator":"@JeffHicks","twitter_site":"@JeffHicks","twitter_misc":{"Written by":"Jeffery Hicks","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#article","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/"},"author":{"name":"Jeffery Hicks","@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"headline":"Friday Fun: A PowerShell Welcome","datePublished":"2021-10-15T14:41:56+00:00","dateModified":"2021-10-15T15:05:38+00:00","mainEntityOfPage":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/"},"wordCount":1117,"commentCount":5,"publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"image":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#primaryimage"},"thumbnailUrl":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-1024x658.png","keywords":["CIM","Friday Fun","Performance","PowerShell","Scripting"],"articleSection":["Friday Fun","PowerShell","Scripting"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/","url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/","name":"Friday Fun: A PowerShell Welcome &#8226; The Lonely Administrator","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#primaryimage"},"image":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#primaryimage"},"thumbnailUrl":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome-1024x658.png","datePublished":"2021-10-15T14:41:56+00:00","dateModified":"2021-10-15T15:05:38+00:00","description":"Creating a PowerShell version of an Ubuntu welcome screen with help links and system information. An example of PowerShell scripting tricks.","breadcrumb":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#primaryimage","url":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome.png","contentUrl":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2021\/10\/ubuntu-welcome.png","width":1107,"height":711},{"@type":"BreadcrumbList","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8629\/friday-fun-a-powershell-welcome\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"PowerShell","item":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell\/"},{"@type":"ListItem","position":2,"name":"Friday Fun: A PowerShell Welcome"}]},{"@type":"WebSite","@id":"https:\/\/jdhitsolutions.com\/blog\/#website","url":"https:\/\/jdhitsolutions.com\/blog\/","name":"The Lonely Administrator","description":"Practical Advice for the Automating IT Pro","publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jdhitsolutions.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9","name":"Jeffery Hicks","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","caption":"Jeffery Hicks"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":4169,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/4169\/friday-fun-updated-ise-scripting-geek-module\/","url_meta":{"origin":8629,"position":0},"title":"Friday Fun: Updated ISE Scripting Geek Module","author":"Jeffery Hicks","date":"January 9, 2015","format":false,"excerpt":"A few years ago I published a module with a number of functions and enhancements for the PowerShell ISE. This ISEScriptingGeek module has remained popular over the last few years. But I wrote it for PowerShell v2. I have also come up with a number of new additions to the\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"geek","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2015\/01\/geek-150x150.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1347,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/1347\/friday-fun-the-scripting-geek-is-here\/","url_meta":{"origin":8629,"position":1},"title":"Friday Fun The Scripting Geek is Here","author":"Jeffery Hicks","date":"April 15, 2011","format":false,"excerpt":"I am proud (and a wee bit nervous) to announce the arrival of ScriptingGeek.com, a site devoted to the lifestyle of your favorite scripting geek - you! My goal is to provide a one stop shop for anything scripting related. Currently www.ScriptingGeek.com will direct you to an online store that\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2011\/04\/scriptinggeekurl-blue-300x39.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":4220,"url":"https:\/\/jdhitsolutions.com\/blog\/scripting\/4220\/friday-the-13th-fun\/","url_meta":{"origin":8629,"position":2},"title":"Friday the 13th Fun","author":"Jeffery Hicks","date":"February 13, 2015","format":false,"excerpt":"It is that time of year again. But instead of being freaked out by Friday the 13th, let's have a little fun. Here is a collection of PowerShell one-liners, all celebrating 13. And maybe you'll even pick up something new about PowerShell. #13^13 [math]::Pow(13,13) #get the 13 letter from [CHAR]\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2013\/12\/friday13.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2013\/12\/friday13.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2013\/12\/friday13.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2013\/12\/friday13.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":4923,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell-ise\/4923\/friday-fun-tweaking-the-powershell-ise\/","url_meta":{"origin":8629,"position":3},"title":"Friday Fun: Tweaking the PowerShell ISE","author":"Jeffery Hicks","date":"February 19, 2016","format":false,"excerpt":"Today's fun is still PowerShell related, but instead of something in the console, we'll have some fun with the PowerShell ISE. One of the things I love about the PowerShell ISE is that you can customize it and extend it.\u00a0 My ISE Scripting Geek project is an example.\u00a0 But today\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"image","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/02\/image_thumb-12.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":6262,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/6262\/revised-everything-powershell-prompt\/","url_meta":{"origin":8629,"position":4},"title":"Revised Everything PowerShell Prompt","author":"Jeffery Hicks","date":"December 7, 2018","format":false,"excerpt":"Since it is Friday and time for some more PowerShell fun, and I\u2019ve been sharing some of my prompt functions, I thought I\u2019d re-share my kitchen sink prompt. This PowerShell prompt function does *a lot* to things and gives you a snapshot view of your system everytime you press enter.\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2018\/12\/image_thumb-5.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2018\/12\/image_thumb-5.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2018\/12\/image_thumb-5.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":4895,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/4895\/friday-fun-a-sysinternals-powershell-workflow\/","url_meta":{"origin":8629,"position":5},"title":"Friday Fun: A SysInternals PowerShell Workflow","author":"Jeffery Hicks","date":"February 12, 2016","format":false,"excerpt":"Over the years I've come up with a number of PowerShell tools to download the SysInternals tools to my desktop. And yes, I know that with PowerShell 5 and PowerShellGet I could download and install a SysInternals package. But that assumes the package is current.\u00a0 But that's not really the\u2026","rel":"","context":"In &quot;Friday Fun&quot;","block_context":{"text":"Friday Fun","link":"https:\/\/jdhitsolutions.com\/blog\/category\/friday-fun\/"},"img":{"alt_text":"image","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/02\/image_thumb-5.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/02\/image_thumb-5.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/02\/image_thumb-5.png?resize=525%2C300 1.5x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/8629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=8629"}],"version-history":[{"count":0,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/8629\/revisions"}],"wp:attachment":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=8629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=8629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=8629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}