en-us/about_PSWebGui.help.txt

TOPIC
    about_pswebgui
 
SHORT DESCRIPTION
    A fast way to create and display PowerShell graphical interfaces using HTML
 
LONG DESCRIPTION
    This PowerShell module is a set of tools that allows you to quickly create
    and display fancy HTML graphical user interfaces. The module allows to
    interact with PowerShell cmdlets, functions, or scripts and join the result
    to the graphic design in HTML.
    PowerShell acts, in this module, as a web server language, like PHP. You can
    define custom routes or navigate through your file system.
    The HTML is styled with Bootstrap CSS framework to provide better look and
    responsive content in a fast way.
     
    Important note!
    To use this module, you must
    *run PowerShell as an Administrator*.
 
CREATING A GRAPHIC INTERFACE
    To display a graphic interface, the structure and content needs to be
    created first, saved into a variable (hashtable) and then, passed to the
    main funtion `Show-PSWebGui`.
    This is a basic structure:
 
    $routes = @{
     
        "/" = {
            "
            <h1>Index</h1>
            <a href='/getdate'>Show date</a>
            "
        }
         
        "/getdate" = {
            "<h1>Date</h1>"
            "Today is:" Get-Date
        }
    }
 
    "$routes" is a PowerShell hastable object ("@{}") where all the content will be saved.
    Inside the main hashtable, the different urls for the pages are defined as
    hashtable keys. The associated values ​​will be the HTML and PowerShell
    code, always between braces "{}". HTML code must be between quotes.
     
    Once the structure and content has been created, the main function
    "Show-PSWebGui"must be invoked with the defined object passed as parameter.
 
    PS> Show-PSWebGui -InputObject $routes
 
$_GET AND $_POST VARIABLES
    The module has "$_GET[]" and "$_POST[]" variables defined in global scope
    to store HTTP GET and POST request methods. The data are stored in these
    variables when you submit a form or specify the data within the URL (GET method only).
    These variables work the same as in PHP, they are hashtables and you can
    access the stored values by specifing their names in brackets.
    You have this form in HTML:
 
    <form method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    </form>
 
    Once the form is sent, this is the way to access the data in PowerShell:
 
    $_POST["username"]
    $_POST["password"]
 
$_SERVER VARIABLE
    "$_SERVER[]" is a hashtable variable defined in global scope to store information about
    server environment and execution.
     
    List of "$_SERVER[]" index:
    - PORT: The port number that is using by the server.
    - DOCUMENT_ROOT: The document root directory under which the server is executing.
    - PID: Process ID number of the PowerShell server.
    - URL: URL and port on wich the server is listening.
    - REQUEST_METHOD: Which request method was used to access the page; 'GET' or 'POST'.
    - REQUEST_URI: The URI which was given in order to access this page; for instance, '/services/get'.
 
STOPPING SERVER
    When you execute the "Show-PSWebGui" function, a simple web server starts
    and a GUI window appears displaying the content. There are some ways to stop
    the server and close the GUI:
     
    - Closing GUI window clicking X button: This action will close the GUI
    window and oderly stop the server. This is the recomended way to stop the
    server when the GUI is displaying.
     
    - Sending "/stop()" or "/exit()" to the server: This will stop the web server,
    but will not close the GUI window. This is the recomended way to stop the server
    when the GUI is not displaying.
     
    - Executing "Stop-PsWebGui" function in another PowerShell process: This will stop
    the web server, but will not close the GUI window. This way is usefull when the
    GUI window is not displaying and you do not have access to any web browser.
 
    - Executing "Stop-PsWebGui -Force" function in another PowerShell process: This function
    will try to orderly stop the server and kill the PowerShell process. This way is usefull when
    you need to completely close an unresponsive instance or an open GUI window
    in a non-inteactive enviorement.
     
    - Killing PowerShell process: This is not a recomended action because the server
    will not stop correctly, the changes made may not be saved and another thread may
    still be running in background.
 
$_CLOSESCRIPT VARIABLE
    $_CLOSESCRIPT
 
    is an empty scriptblock, defined in global scope, that will be invoked just
    before the web server is closed. If you need some code to be executed just
    when the server stops, put the code inside this scriptblock and, if it loads
    during runtime, it will invoked just before the server stops.
    Having this structure:
 
    $routes = @{
     
        "/" = {
            "
            <h1>Index</h1>
            <a href='/getdate'>Show date</a>
            "
        }
         
        "/getdate" = {
            "<h1>Date</h1>"
            "Today is:" Get-Date
            $_CLOSESCRIPT={
                Write-Host "Saying this before server stops"
            }
        }
    }
 
    the code inside "$_CLOSESCRIPT" will only be invoked if you send
    "/getdate" to the server before stopping it.
 
ISE SNIPPETS
    This module has some snippets for using them with PowerShell ISE.
     
    To import the snippets in this session, enter the following cmdlet in PowerShell ISE:
 
    PS> Import-IseSnippet -Module PSWebGui -ListAvailable
 
    Or copy them from "Snippets" module folder to
     
    "%userprofile%\Documents\WindowsPowerShell\Snippets"
 
    if you want them to be imported every time you open PowerShell ISE
 
HIDE AND SHOW CONSOLE
    This module brings two functions for hidding and showing the current
    PowerShell console window.
    Get more information about these functions.
 
    PS> Get-Help Show-PSConsole
    PS> Get-Help Hide-PSConsole
 
SYSTEM TRAY
    From version 0.19.0, it is posible to minimize the GUI and PowerShell
    windows to the system tray to continue working in the background and restore
    them when need it.
    To do that run:
 
    PS> Show-PSWebGUI -Display Systray [...]
 
    The function will display the same icon as the GUI window on the system tray
    and add a context menu to it. The context menu, by default, will have these
    options:
     
    - Show GUI: Displays the GUI window. Use close (X) button on the
    GUI itself to hide the GUI again.
     
    - Show/Hide PS console: Show or hide the PowerShell console. Use this option
    to show or hide the console, do not use the buttons on the console itself.
     
    - Exit: Close the GUI, PowerShell console, stop the server and close
    PowerShell process.
 
SEE ALSO
    Reading main function help is recomended.
 
    PS> Get-Help Show-PSWebGui -Detailed