Simple Hierarchy in PowerShell - developing PowerShell provider got so much easier
Switch branches/tags
Nothing to show
Clone or download

README.md

Simple Hierarchy in PowerShell (SHiPS)

A PowerShell provider allows any data store to be exposed like a file system as if it were a mounted drive. In other words, the data in your data store can be treated like files and directories so that a user can navigate data via cd or dir. SHiPS is a PowerShell provider. To be more precise it's a provider utility that simplifies developing PowerShell providers.

Build Status

Development branch

AppVeyor (Windows) Travis CI (Linux / macOS)
av-image-dev tv-image-dev

Master branch

AppVeyor (Windows) Travis CI (Linux / macOS)
av-image-master tv-image-master

Nightly run Master branch

AppVeyor (Windows)
av-image-master-n

Supported Platform

Downloading the Source Code

git clone https://github.com/PowerShell/SHiPS.git

Building the Source Code

cd <yourclonefolder>\SHiPS\src\
# get the dotnet CLI tool
# and Windows10 SDK if you are running on Windows
.\bootstrap.ps1

# build SHiPS
.\build.ps1 Release

Installing SHiPS

  • You can install SHiPS from the PowerShell Gallery
  • Install SHiPS' binaries which you just built on your box:
    # you need to launch PowerShell as Administrator
    cd <yourclonefolder>\SHiPS
    Import-Module .\tools\setup.psm1
    Install-SHiPS

Running Unit Tests

Import-Module .\tools\setup.psm1
Invoke-SHiPSTest

Try It Out

Let's take the FamilyTree module as our example here. Assuming you have done the above steps, i.e., git clone, build, and run Install-SHiPS, now try the following.

Import-Module SHiPS
Import-Module  .\samples\FamilyTree

# create a PowerShell drive.
new-psdrive -name Austin -psprovider SHiPS -root 'FamilyTree#Austin'
cd Austin:

dir
cd Ben
dir

The output looks like below.

PS Austin:\> dir
    Container: Microsoft.PowerShell.SHiPS\SHiPS::FamilyTree#Austin
Type       Name
----       ----
+          Ben
.          Bill

PS Austin:\> cd .\Ben\
PS Austin:\Ben> dir
    Container: Microsoft.PowerShell.SHiPS\SHiPS::FamilyTree#Austin

Type       Name
----       ----
.          Chris
.          Cathy

PS Austin:\Ben> dir | %{$_.Data}
Name  DOB  Gender
----  ---  ------
Chris 5034 M
Cathy 5050 F

In fact, we can create a drive at any level. Let's say we are interested in Ben only, we can do something like this:

new-psdrive -name son -psprovider SHiPS -root 'FamilyTree#Ben'
cd son:
dir

In addition, this can be useful for the isolated testing.

See more samples under sample folder to try out.

Get Started with Writing a PowerShell Provider

If you'd like to try out writing a SHiPS-based provider in PowerShell, we recommend reviewing the getting started documentation.

SHiPS Architecture

See here for design details.

FAQ

See known issues, FAQ, etc.

Developing and Contributing

Please follow the PowerShell Contribution Guide for how to contribute.

Legal and Licensing

SHiPS is under the MIT license.