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) |
---|---|
Master branch
AppVeyor (Windows) | Travis CI (Linux / macOS) |
---|---|
Nightly run Master branch
AppVeyor (Windows) |
---|
Supported Platform
- Windows
- PowerShell v5 (or later), which is shipped in Win10, Windows Server 2016, or WMF 5.1
- .Net Framework 4.7.1
- Linux or Mac
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
Developing and Contributing
Please follow the PowerShell Contribution Guide for how to contribute.
Legal and Licensing
SHiPS is under the MIT license.