Skip to content
forked from PowerShell/SHiPS

Simple Hierarchy in PowerShell - developing PowerShell provider got so much easier

License

Notifications You must be signed in to change notification settings

liampkemp/SHiPS

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

Supported Platform

  • Windows
    • PowerShell v5 (or later), which is shipped in Win10, Windows Server 2016, or WMF 5.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 fullclr
.\build.ps1 net46

# or build SHiPS on .Net CoreCLR
.\build.ps1 netcoreapp2.0

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.

About

Simple Hierarchy in PowerShell - developing PowerShell provider got so much easier

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 67.6%
  • PowerShell 32.4%