{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# PowerShell Kernel\n", "\n", "The PowerShell kernel is working great on Windows or Linux, and you can use it to produce documentation of your troubleshooting, researching, and even your regular processes, to create visual reports and more.\n", "\n", "However, there are a lot of features that aren't finished, and a lot of ideas I'd like feedback on. \n", "\n", "This notebook is a demonstration of features, ways you can use the kernel, and tips and tricks -- but it's also documents the problems in the current version of the kernel and jupyter, and poses questions I'd love feedback on.\n", "\n", "### Let's start with the basics: \n", "\n", "It's PowerShell. You can run commands, use variables and pipelines and the text output is just displayed the way you'd expect it to be:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "Directory: /home/jovyan/work\n", "\n", "\n", "Mode LastWriteTime Length Name \n", "---- ------------- ------ ---- \n", "--r--- 4/21/18 11:50 PM 41999 LiterateDevOps-Copy1.ipynb \n", "--r--- 4/21/18 11:27 PM 42137 LiterateDevOps.ipynb \n", "--r--- 4/20/18 6:34 AM 1546 Dockerfile \n", "--r--- 4/20/18 4:19 AM 2974 build.ps1 \n", "--r--- 4/6/18 3:20 AM 4354 LiterateDevOps.md \n", "--r--- 4/6/18 3:20 AM 170560 ReadMe.ipynb \n", "--r--- 4/6/18 3:09 AM 12423 nteract - plotly.ipynb \n", "--r--- 3/4/18 2:39 AM 2302 ReadMe.md \n", "--r--- 2/20/18 6:44 AM 4682 jupyter-powershell.nuspec \n", "--r--- 8/4/17 3:19 AM 8712 Release.ipynb \n", "--r--- 6/24/17 7:07 AM 1140 LICENSE.md" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "$Files = Get-ChildItem -File\n", "$Files | Sort-Object LastWriteTime -Descending" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `Write-Jupyter`\n", "\n", "The PowerShell kernel also includes command that directly outputs HTML, markdown, javascript, images, etc. into the Jupyter document. For example, we could render that ReadMe inline:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "# A [Jupyter](https://jupyter.org/) Kernel for [PowerShell](https://github.com/PowerShell/PowerShell)\n", "\n", "This kernel is being written in C#, and in the process, I've taken some messaging code from the [iCSharp kernel](https://github.com/zabirauf/icsharp) and made a generic library for .Net with a re-usable core for anyone who needs to create [Jupyter](https://jupyter.org/) kernels in .Net languages -- so feel free to borrow that if you like (it's under the Apache license).\n", "\n", "## Install\n", "\n", "I am finally doing a preliminary release: you can download from the releases link, unzip it somewhere, and run the `Install.ps1` script. Note that if you run this on Linux or OS X you should expect to see only \"PowerShell (Core)\" but on Windows you'll see both -- but only the \"PowerShell (Full)\" will actually work unless you have PowerShell Core installed in your PATH and working.\n", "\n", "## Current Status\n", "\n", "At this point, I'm only handling two messages:\n", "\n", "* KernelInfo request\n", "* Execute request\n", "\n", "The PowerShell kernel is _working_, and returning text output _and errors_ as on the console (see examples below).\n", "\n", "## Features\n", "\n", "Apart from the built-in Jupyter features, I'm going to add some output enhancements so you can hook into widgets, etc. However, there's none of thata yet, except that:\n", "\n", "* If you output HTML, it's rendered. I'm currently detecting this in the most simplistic fashion: by testing if the output starts with \"<\" and ends with \">\". That probably needs work, but it's good enough for now.\n", "* When a command outputs objects, you get the text rendering, but the actual objects are also returned as application/json data.\n", "\n", "## PowerShell Core\n", "\n", "In order to get cross-platform support, this kernel is based on [PowerShell Core](https://github.com/PowerShell/PowerShell).\n", "\n", "To build it yourself --or to run the \"PowerShell (Core)\" kernel-- you need [dotnet core 2](https://www.microsoft.com/net/core). You can build it by running `dotnet restore; dotnet build` from the root. If you want to build it in Visual Studio, you need VS 2017 version 15.3 or higher.\n", "\n", "## Examples\n", "\n", "I have [a version of this document with examples](https://github.com/Jaykul/Jupyter-PowerShell/blob/master/ReadMe.ipynb) in it as a Jupyter Notebook, which mostly works, in read-only mode, on github...\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Get-Content ReadMe.md | Out-String | Write-Jupyter -MimeType markdown" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example: if you take your files and convert them to an HTML table, you can output that table inline. For that to work, you really want to use `ConvertTo-Html -Fragment` to get just the table as output, and then pipe it to `Write-Jupyter` as a single string. Normally, `ConvertTo-Html` outputs one `<tr>` at a time, so we need to use `Out-String` or `-join` to convert it into a single string that we can pipe to `Write-Jupyter`.\n", "\n", "of course, we really want the `-Fragment` part to happen automatically. I'll have to add some `profile` support at some point to make that happen, but in the meantime, you can put something like this in a cell near the top, and make it work from then on:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "$PSDefaultParameterValues[\"ConvertTo-Html:Fragment\"] = $true" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Incidentally, there's one other problem that I just noticed. Currently, `Write-Jupyter` outputs each item as it comes in, and wraps them in a tag, so to get a table to output properly, you need one output string. ConvertTo-Html outputs one `<tr>` at a time, so we need to use `Out-String` or `-join` them all together:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<table>\n", "<colgroup><col/><col/><col/><col/></colgroup>\n", "<tr><th>Mode</th><th>LastWriteTime</th><th>Name</th><th>Length</th></tr>\n", "<tr><td>--r---</td><td>4/20/18 4:19:33 AM</td><td>build.ps1</td><td>2974</td></tr>\n", "<tr><td>--r---</td><td>4/20/18 6:34:12 AM</td><td>Dockerfile</td><td>1546</td></tr>\n", "<tr><td>--r---</td><td>2/20/18 6:44:41 AM</td><td>jupyter-powershell.nuspec</td><td>4682</td></tr>\n", "<tr><td>--r---</td><td>6/24/17 7:07:27 AM</td><td>LICENSE.md</td><td>1140</td></tr>\n", "<tr><td>--r---</td><td>4/21/18 10:46:19 PM</td><td>LiterateDevOps.ipynb</td><td>33800</td></tr>\n", "<tr><td>--r---</td><td>4/6/18 3:20:07 AM</td><td>LiterateDevOps.md</td><td>4354</td></tr>\n", "<tr><td>--r---</td><td>4/6/18 3:09:39 AM</td><td>nteract - plotly.ipynb</td><td>12423</td></tr>\n", "<tr><td>--r---</td><td>4/6/18 3:20:07 AM</td><td>ReadMe.ipynb</td><td>170560</td></tr>\n", "<tr><td>--r---</td><td>3/4/18 2:39:59 AM</td><td>ReadMe.md</td><td>2302</td></tr>\n", "<tr><td>--r---</td><td>8/4/17 3:19:47 AM</td><td>Release.ipynb</td><td>8712</td></tr>\n", "</table>\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "$Files | ConvertTo-Html Mode, LastWriteTime, Name, Length | Out-String | Write-Jupyter -MimeType html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now if you want to get clever, you can dump a little javascript in, to make the table sortable. run this line, and then use your mouse on the headers of the table:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<script src=\"https://cdn.rawgit.com/stevesouders/5952488/raw/activetable.js\"></script>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "'<script src=\"https://cdn.rawgit.com/stevesouders/5952488/raw/activetable.js\"></script>' | Write-Jupyter -MimeType html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, a better trick would be to make that happen automatically. \n", "\n", "I'll see what I can do about that in the future, because this is starting to feel like a lot of modifications for `ConvertTo-Html` -- I'd love some feedback on this. In the meantime, you can add that script to the defaults for `ConvertTo-Html` like what we did with fragment:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "$PSDefaultParameterValues[\"ConvertTo-Html:Fragment\"] = $true\n", "$PSDefaultParameterValues[\"ConvertTo-Html:PostContent\"] = '<script src=\"https://cdn.rawgit.com/stevesouders/5952488/raw/activetable.js\"></script>'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now you can get a sortable table instantly, by just running ConvertTo-Html.\n", "\n", "When I tried this as an example, I remembered another reason why we're going to want a better ConvertTo-Html. It doesn't know anything about which columns should be visible, and it doesn't handle properties that are collections:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<table>\n", "<colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup>\n", "<tr><th>LogPipelineExecutionDetails</th><th>Name</th><th>Path</th><th>ImplementingAssembly</th><th>Definition</th><th>Description</th><th>Guid</th><th>HelpInfoUri</th><th>ModuleBase</th><th>PrivateData</th><th>Tags</th><th>ProjectUri</th><th>IconUri</th><th>LicenseUri</th><th>ReleaseNotes</th><th>RepositorySourceLocation</th><th>Version</th><th>ModuleType</th><th>Author</th><th>AccessMode</th><th>ClrVersion</th><th>CompanyName</th><th>Copyright</th><th>DotNetFrameworkVersion</th><th>ExportedFunctions</th><th>Prefix</th><th>ExportedCmdlets</th><th>ExportedCommands</th><th>FileList</th><th>CompatiblePSEditions</th><th>ModuleList</th><th>NestedModules</th><th>PowerShellHostName</th><th>PowerShellHostVersion</th><th>PowerShellVersion</th><th>ProcessorArchitecture</th><th>Scripts</th><th>RequiredAssemblies</th><th>RequiredModules</th><th>RootModule</th><th>ExportedVariables</th><th>ExportedAliases</th><th>ExportedWorkflows</th><th>ExportedDscResources</th><th>SessionState</th><th>OnRemove</th><th>ExportedFormatFiles</th><th>ExportedTypeFiles</th></tr>\n", "<tr><td>False</td><td>Microsoft.PowerShell.Management</td><td>/usr/src/jupyter-powershell/Modules/Microsoft.PowerShell.Management/Microsoft.PowerShell.Management.psd1</td><td></td><td></td><td></td><td>eefcb906-b326-4e99-9f54-8b4bb6ef3c6d</td><td>https://go.microsoft.com/fwlink/?linkid=855958</td><td>/usr/src/jupyter-powershell</td><td></td><td>System.Collections.Generic.List`1[System.String]</td><td></td><td></td><td></td><td></td><td></td><td>3.1.0.0</td><td>Manifest</td><td>PowerShell</td><td>ReadWrite</td><td></td><td>Microsoft Corporation</td><td>Copyright (c) Microsoft Corporation. All rights reserved.</td><td></td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.FunctionInfo]</td><td></td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.CmdletInfo]</td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.CommandInfo]</td><td>System.Collections.Generic.List`1[System.String]</td><td>System.Collections.Generic.List`1[System.String]</td><td>System.Collections.ObjectModel.Collection`1[System.Object]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.Management.Automation.PSModuleInfo]</td><td></td><td></td><td>3.0</td><td>None</td><td>System.Collections.Generic.List`1[System.String]</td><td>System.Collections.ObjectModel.Collection`1[System.String]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.Management.Automation.PSModuleInfo]</td><td></td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable]</td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.AliasInfo]</td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.FunctionInfo]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]</td><td>System.Management.Automation.SessionState</td><td></td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]</td></tr>\n", "<tr><td>False</td><td>Microsoft.PowerShell.Utility</td><td>/usr/src/jupyter-powershell/Modules/Microsoft.PowerShell.Utility/Microsoft.PowerShell.Utility.psd1</td><td></td><td></td><td></td><td>1da87e53-152b-403e-98dc-74d7b4d63d59</td><td>https://go.microsoft.com/fwlink/?linkid=855960</td><td>/usr/src/jupyter-powershell</td><td></td><td>System.Collections.Generic.List`1[System.String]</td><td></td><td></td><td></td><td></td><td></td><td>3.1.0.0</td><td>Manifest</td><td>PowerShell</td><td>ReadWrite</td><td></td><td>Microsoft Corporation</td><td>Copyright (c) Microsoft Corporation. All rights reserved.</td><td></td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.FunctionInfo]</td><td></td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.CmdletInfo]</td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.CommandInfo]</td><td>System.Collections.Generic.List`1[System.String]</td><td>System.Collections.Generic.List`1[System.String]</td><td>System.Collections.ObjectModel.Collection`1[System.Object]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.Management.Automation.PSModuleInfo]</td><td></td><td></td><td>3.0</td><td>None</td><td>System.Collections.Generic.List`1[System.String]</td><td>System.Collections.ObjectModel.Collection`1[System.String]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.Management.Automation.PSModuleInfo]</td><td></td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable]</td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.AliasInfo]</td><td>System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.FunctionInfo]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]</td><td>System.Management.Automation.SessionState</td><td></td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]</td><td>System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]</td></tr>\n", "</table>\n", "<script src=\"https://cdn.rawgit.com/stevesouders/5952488/raw/activetable.js\"></script>\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Get-Module | ConvertTo-Html | Out-String | Write-Jupyter -MimeType html" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" }, "metadata": { "image/png": { "width": 32 } }, "output_type": "display_data" }, { "data": { "image/png": "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" }, "metadata": { "image/png": { "width": 64 } }, "output_type": "display_data" } ], "source": [ "$imageUrl = 'https://upload.wikimedia.org/wikipedia/commons/2/2f/PowerShell_5.0_icon.png'\n", "$ImageData = @{ \"png\" = (Invoke-WebRequest $imageUrl -UseBasicParsing).RawContentStream.GetBuffer() }\n", "# $ImageData\n", "\n", "Write-Jupyter -InputObject $ImageData -Metadata @{ \"image/png\" = @{ 'width' = 32 } }\n", "Write-Jupyter -InputObject $ImageData -Metadata @{ \"image/png\" = @{ 'width' = 64 } }" ] } ], "metadata": { "kernelspec": { "display_name": "PowerShell", "language": "PowerShell", "name": "powershell" }, "language_info": { "codemirror_mode": "powershell", "file_extension": ".ps1", "mimetype": "text/powershell", "name": "PowerShell", "nbconvert_exporter": null, "pygments_lexer": "powershell", "version": "5.0" } }, "nbformat": 4, "nbformat_minor": 2 }