Simple Hierarchy in PowerShell - developing PowerShell provider got so much easier
Switch branches/tags
Nothing to show
Clone or download
glennsarti and jianyunt (GH-103) Convert all text encoding to UTF8 without BOM (#124)
* (GH-103) Convert all text encoding to UTF8 without BOM in /src

Previously the source files had wildly divergent text encodings, including
UTF16 which git sees as a binary file. This commit converts all text files to
UTF8 without BOM to standardise on a cross platform text file encoding format.

* (GH-103) Convert all text encoding to UTF8 without BOM in /test

Previously the source files had wildly divergent text encodings, including
UTF16 which git sees as a binary file. This commit converts all text files to
UTF8 without BOM to standardise on a cross platform text file encoding format.

* (GH-103) Convert all text encoding to UTF8 without BOM in /doc and /samples

Previously the source files had wildly divergent text encodings, including
UTF16 which git sees as a binary file. This commit converts all text files to
UTF8 without BOM to standardise on a cross platform text file encoding format.

* (GH-103) Convert all text encoding to UTF8 without BOM in /vs2015

Previously the source files had wildly divergent text encodings, including
UTF16 which git sees as a binary file. This commit converts all text files to
UTF8 without BOM to standardise on a cross platform text file encoding format.

* (maint) Ignore generated test fixtures

This commit ignores files which are automatically generated when testing. They
should not be commited or staged.

* (GH-103) Delete UTF16-LE binary files

Three UTF16-LE files have been committed however they appear as binary files,
which means diffs are in essence pointless.  This commit removes the files in
preparation to be readded as text files

* (GH-103) Re-add UTF16-LE binary files as UTF8

Three UTF16-LE files have been committed however they appear as binary files,
which means diffs are in essence pointless.  This commit re-adds the files as
text files (UTF8 no BOM).
Latest commit 19b466b Dec 13, 2018

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.