2016-01-18 00:25:48 +01:00
|
|
|
# PowerShell on Linux / OS X / Windows
|
2015-07-02 00:06:29 +02:00
|
|
|
|
2016-01-22 20:36:23 +01:00
|
|
|
| |Ubuntu 14.04 |Windows |
|
|
|
|
|---------|:------:|:------:|
|
2016-02-05 19:18:23 +01:00
|
|
|
|master|[![Build Status](https://travis-ci.com/PowerShell/PowerShell.svg?token=31YifM4jfyVpBmEGitCm&branch=master)](https://travis-ci.com/PowerShell/PowerShell)|[![Build status](https://ci.appveyor.com/api/projects/status/wb0a0apbn4aiccp1/branch/master?svg=true)](https://ci.appveyor.com/project/PowerShell/powershell-linux/branch/master)|
|
2016-01-22 20:36:23 +01:00
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
## [Waffle.io scrum board](https://waffle.io/PowerShell/PowerShell)
|
2016-01-22 20:36:23 +01:00
|
|
|
|
2015-10-08 22:44:37 +02:00
|
|
|
## Obtain the source code
|
2015-07-02 00:06:29 +02:00
|
|
|
|
2015-10-08 22:44:37 +02:00
|
|
|
### Setup Git
|
2015-07-02 00:06:29 +02:00
|
|
|
|
2016-01-21 21:25:48 +01:00
|
|
|
Install [Git][], the version control system.
|
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
See the [Contributing Guidelines](CONTRIBUTING.md) for more Git
|
|
|
|
information, such as our installation instructions, contributing
|
|
|
|
rules, and Git best practices.
|
2016-03-09 23:24:15 +01:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
[Git]: https://git-scm.com/documentation
|
2016-03-09 23:24:15 +01:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
### Download source code
|
2016-01-21 21:25:48 +01:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
Clone this repository. It is a "superproject" and has a number of
|
|
|
|
other repositories embedded within it as submodules. *Please* see the
|
|
|
|
contributing guidelines and learn about submodules.
|
2016-01-15 20:56:08 +01:00
|
|
|
|
|
|
|
```sh
|
2016-03-14 20:03:04 +01:00
|
|
|
git clone https://github.com/PowerShell/PowerShell.git
|
|
|
|
cd PowerShell
|
2016-01-15 20:56:08 +01:00
|
|
|
```
|
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
#### Linux
|
2015-07-02 00:06:29 +02:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
Linux will need every submodule, so update them recursively:
|
2015-07-02 00:06:29 +02:00
|
|
|
|
|
|
|
```sh
|
2016-03-14 20:03:04 +01:00
|
|
|
git submodule update --init --recursive
|
2015-07-02 00:06:29 +02:00
|
|
|
```
|
|
|
|
|
2016-01-20 20:33:57 +01:00
|
|
|
The `src/omi` submodule requires your GitHub user to have joined the Microsoft
|
|
|
|
organization. If it fails to check out, Git will bail and not check out further
|
2016-02-18 21:45:53 +01:00
|
|
|
submodules either. Please follow the instructions on the [Open Source Hub][].
|
2016-01-20 20:33:57 +01:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
[Open Source Hub]: https://opensourcehub.microsoft.com/articles/how-to-join-microsoft-github-org-self-service
|
2016-01-20 20:33:57 +01:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
#### Windows
|
2016-01-20 01:10:19 +01:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
On Windows, many fewer submodules are needed, so specify them:
|
2016-01-20 01:10:19 +01:00
|
|
|
|
2016-03-14 20:03:04 +01:00
|
|
|
```sh
|
2016-02-25 00:57:38 +01:00
|
|
|
git submodule update --init --recursive -- src/monad src/windows-build src/Microsoft.PowerShell.Linux.Host/Modules/Pester
|
2016-01-20 01:10:19 +01:00
|
|
|
```
|
|
|
|
|
2015-10-08 22:44:37 +02:00
|
|
|
## Setup build environment
|
2015-07-06 20:56:29 +02:00
|
|
|
|
2016-03-17 07:49:26 +01:00
|
|
|
We use the [.NET Command Line Interface][dotnet-cli] (`dotnet`) to
|
|
|
|
build the managed components, and [CMake][] to build the native
|
|
|
|
components (on non-Windows platforms). Install `dotnet` by following
|
|
|
|
their [documentation][cli-docs].
|
2016-02-17 21:59:47 +01:00
|
|
|
|
2016-02-18 03:11:19 +01:00
|
|
|
The version of .NET CLI is very important, you want a recent 1.0.0 beta
|
2016-02-18 21:45:53 +01:00
|
|
|
(**not** 1.0.1). The following instructions will install precisely
|
2016-03-14 18:49:31 +01:00
|
|
|
1.0.0.001718, though any 1.0.0 version *should* work.
|
2016-02-18 03:11:19 +01:00
|
|
|
|
2016-02-18 21:45:53 +01:00
|
|
|
> Previous installations of DNX, `dnvm`, or older installations of .NET CLI
|
|
|
|
> can cause odd failures when running. Please check your version.
|
2016-02-18 03:11:19 +01:00
|
|
|
|
2016-03-17 07:49:26 +01:00
|
|
|
[dotnet-cli]: https://github.com/dotnet/cli#new-to-net-cli
|
|
|
|
[cli-docs]: https://dotnet.github.io/getting-started/
|
2016-01-21 21:25:48 +01:00
|
|
|
[CMake]: https://cmake.org/cmake/help/v2.8.12/cmake.html
|
|
|
|
|
2016-01-18 00:25:48 +01:00
|
|
|
### Linux
|
|
|
|
|
2016-01-21 21:25:48 +01:00
|
|
|
Tested on Ubuntu 14.04.
|
2016-01-18 00:25:48 +01:00
|
|
|
|
2016-03-14 18:49:31 +01:00
|
|
|
This installs the .NET CLI package feed. The benefit to this is that
|
|
|
|
installing `dotnet` using `apt-get` will also install all of its
|
|
|
|
dependencies automatically.
|
|
|
|
|
2016-01-21 21:25:48 +01:00
|
|
|
```sh
|
|
|
|
sudo sh -c 'echo "deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
|
|
|
|
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
|
|
|
|
sudo apt-get update
|
2016-03-16 05:14:58 +01:00
|
|
|
sudo apt-get install dotnet=1.0.0.001675-1
|
2016-01-21 21:25:48 +01:00
|
|
|
```
|
|
|
|
|
2016-03-14 18:49:31 +01:00
|
|
|
The drawback of using the feed is that it gets out of date. The pinned
|
|
|
|
version is the most recent package published to the feed, but newer
|
|
|
|
packages are available. To upgrade the package, install it by
|
|
|
|
hand. Unfortunately, `dpkg` does not handle dependency resolution, so
|
|
|
|
it is recommended to first install the older version from the feed,
|
|
|
|
and then upgrade it.
|
2016-02-05 19:18:23 +01:00
|
|
|
|
2015-12-09 22:38:03 +01:00
|
|
|
```sh
|
2016-03-14 18:49:31 +01:00
|
|
|
wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-ubuntu-x64.latest.deb
|
|
|
|
sudo dpkg -i ./dotnet-ubuntu-x64.latest.deb
|
2015-12-09 22:38:03 +01:00
|
|
|
```
|
2015-07-06 20:56:29 +02:00
|
|
|
|
2016-03-14 19:20:46 +01:00
|
|
|
Additionally, PowerShell on Linux builds a native library, so install
|
|
|
|
the following additional build / debug tools.
|
2015-07-06 20:56:29 +02:00
|
|
|
|
2015-12-09 22:38:03 +01:00
|
|
|
```sh
|
2016-03-14 19:20:46 +01:00
|
|
|
sudo apt-get install g++ cmake make lldb-3.6 strace
|
2015-12-09 22:38:03 +01:00
|
|
|
```
|
2015-07-06 20:56:29 +02:00
|
|
|
|
2016-02-18 21:45:53 +01:00
|
|
|
### Windows
|
|
|
|
|
|
|
|
Tested on Windows 10 and Windows Server 2012 R2.
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
Invoke-WebRequest -Uri https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0/scripts/obtain/install.ps1 -OutFile install.ps1
|
2016-03-14 18:49:31 +01:00
|
|
|
./install.ps1 -version 1.0.0.001718 -channel beta
|
2016-02-18 21:45:53 +01:00
|
|
|
```
|
|
|
|
|
2016-03-08 19:12:03 +01:00
|
|
|
If you meet `Unable to cast COM object of type 'System.__ComObject' to
|
|
|
|
interface type 'Microsoft.Cci.ISymUnmanagedWriter5'`, please install
|
|
|
|
[Visual C++ Redistributable for Visual Studio 2015][redist].
|
2016-02-27 12:51:53 +01:00
|
|
|
|
2016-03-08 19:12:03 +01:00
|
|
|
[redist]: https://www.microsoft.com/en-hk/download/details.aspx?id=48145
|
2016-02-27 12:51:53 +01:00
|
|
|
|
2016-02-18 21:45:53 +01:00
|
|
|
### OS X
|
|
|
|
|
|
|
|
The OS X dependency installation instructions are not yet documented. You can
|
|
|
|
try their PKG installer, or their [obtain script][]. We do not (yet) routinely
|
|
|
|
test on OS X, but some developers use PowerShell on 10.10 and 10.11.
|
|
|
|
|
|
|
|
[obtain script]: https://github.com/dotnet/cli/blob/rel/1.0.0/scripts/obtain/install.sh
|
|
|
|
|
2015-10-08 22:44:37 +02:00
|
|
|
## Building
|
2015-07-02 00:06:29 +02:00
|
|
|
|
2016-01-20 20:33:57 +01:00
|
|
|
**The command `dotnet restore` must be done at least once from the top directory
|
|
|
|
to obtain all the necessary .NET packages.**
|
2015-12-17 20:29:12 +01:00
|
|
|
|
2016-03-12 01:19:05 +01:00
|
|
|
Build with `./build.sh` on Linux and OS X.
|
|
|
|
|
2016-03-14 19:19:56 +01:00
|
|
|
`Start-PSBuild` from module `./PowerShellGitHubDev.psm1` on Windows
|
2016-03-14 20:07:19 +01:00
|
|
|
and Linux / OS X, if you are self-hosting PowerShell.
|
2015-12-17 20:29:12 +01:00
|
|
|
|
2016-01-20 21:29:06 +01:00
|
|
|
Specifically:
|
|
|
|
|
|
|
|
### Linux
|
|
|
|
|
2016-01-21 21:25:48 +01:00
|
|
|
In Bash:
|
2016-03-14 20:07:19 +01:00
|
|
|
|
2016-01-20 21:29:06 +01:00
|
|
|
```sh
|
2016-02-05 19:18:23 +01:00
|
|
|
cd PowerShell
|
2016-01-20 21:29:06 +01:00
|
|
|
dotnet restore
|
|
|
|
./build.sh
|
|
|
|
```
|
|
|
|
|
|
|
|
### Windows
|
|
|
|
|
2016-01-21 21:25:48 +01:00
|
|
|
In PowerShell:
|
2016-03-14 20:07:19 +01:00
|
|
|
|
2016-01-20 21:29:06 +01:00
|
|
|
```powershell
|
2016-02-05 19:18:23 +01:00
|
|
|
cd PowerShell
|
2016-01-20 21:29:06 +01:00
|
|
|
dotnet restore
|
2016-03-12 01:19:05 +01:00
|
|
|
Import-Module .\PowerShellGitHubDev.psm1
|
|
|
|
Start-PSBuild # build CoreCLR version
|
|
|
|
Start-PSBuild -FullCLR # build FullCLR version
|
2016-01-20 21:29:06 +01:00
|
|
|
```
|
|
|
|
|
2016-03-14 19:19:56 +01:00
|
|
|
**Tip:** use `Start-PSBuild -Verbose` switch to see more information
|
|
|
|
about build process.
|
2016-03-08 19:12:03 +01:00
|
|
|
|
2016-01-18 00:25:48 +01:00
|
|
|
## Running
|
|
|
|
|
2016-01-20 21:33:42 +01:00
|
|
|
If you encounter any problems, see the [known issues](KNOWNISSUES.md),
|
|
|
|
otherwise open a new issue on GitHub.
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
The local managed host has built-in documentation via `--help`.
|
|
|
|
|
2016-01-18 00:25:48 +01:00
|
|
|
### Linux / OS X
|
|
|
|
|
|
|
|
- launch local shell with `./bin/powershell`
|
2016-02-05 19:18:23 +01:00
|
|
|
- run tests with `./pester.sh`
|
2016-01-18 00:25:48 +01:00
|
|
|
|
|
|
|
### Windows
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
- launch `./bin/powershell.exe`
|
|
|
|
- run tests with `./bin/powershell.exe -c "Invoke-Pester test/powershell"`
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-03-11 22:01:58 +01:00
|
|
|
## Debugging
|
|
|
|
|
|
|
|
To enable debugging on Linux, follow the installation instructions for
|
|
|
|
[Experimental .NET Core Debugging in VS Code][VS Code]. You will also
|
|
|
|
want to review their [detailed instructions][vscclrdebugger].
|
|
|
|
|
|
|
|
VS Code will place a `.vscode` directory in the PowerShell folder.
|
|
|
|
This contains the `launch.json` file, which you will customize using
|
|
|
|
the instructions below. You will also be prompted to create a
|
|
|
|
`tasks.json` file.
|
|
|
|
|
|
|
|
Currently, debugging supports attaching to a currently running
|
|
|
|
powershell process. Assuming you've created a `launch.json` file
|
|
|
|
correctly, within the "configuration" section, use the below settings:
|
|
|
|
|
|
|
|
```json
|
|
|
|
"configurations": [
|
|
|
|
{
|
|
|
|
"name": "powershell",
|
|
|
|
"type": "coreclr",
|
|
|
|
"request": "attach",
|
|
|
|
"processName": "powershell"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
```
|
|
|
|
|
|
|
|
VS Code will now attach to a running `powershell` process. Start
|
|
|
|
powershell, then (in VS Code) press `F5` to begin the debugger.
|
|
|
|
|
|
|
|
[VS Code]: https://blogs.msdn.microsoft.com/visualstudioalm/2016/03/10/experimental-net-core-debugging-in-vs-code/
|
|
|
|
[vscclrdebugger]: http://aka.ms/vscclrdebugger
|
|
|
|
|
2016-01-20 21:29:06 +01:00
|
|
|
## PowerShell Remoting Protocol
|
|
|
|
|
|
|
|
PSRP communication is tunneled through OMI using the `omi-provider`.
|
|
|
|
|
|
|
|
> PSRP has been observed working on OS X, but the changes made to OMI to
|
|
|
|
> accomplish this are not even beta-ready and need to be done correctly. They
|
|
|
|
> exist on the `andschwa-osx` branch of the OMI repository.
|
|
|
|
|
2016-03-14 19:20:46 +01:00
|
|
|
PSRP support is *not* built automatically. See the detailed notes on
|
|
|
|
how to enable it.
|
2016-01-20 21:29:06 +01:00
|
|
|
|
|
|
|
### Running
|
|
|
|
|
|
|
|
Some initial setup on Windows is required. Open an administrative command
|
|
|
|
prompt and execute the following:
|
|
|
|
|
|
|
|
```cmd
|
|
|
|
winrm set winrm/config/Client @{AllowUnencrypted="true"}
|
|
|
|
winrm set winrm/config/Client @{TrustedHosts="*"}
|
|
|
|
```
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
> You can also set the `TrustedHosts` to include the target's IP address.
|
|
|
|
|
2016-01-20 21:29:06 +01:00
|
|
|
Then on Linux, launch `omiserver` in the debugger (after building with the
|
|
|
|
instructions above):
|
|
|
|
|
|
|
|
```sh
|
|
|
|
./psrp.sh
|
|
|
|
run
|
|
|
|
```
|
|
|
|
|
|
|
|
> The `run` command is executed inside of LLDB (the debugger) to start the
|
|
|
|
`omiserver` process.
|
|
|
|
|
|
|
|
Now in a PowerShell prompt on Windows (opened after setting the WinRM client
|
|
|
|
configurations):
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
Enter-PSSession -ComputerName <IP address of Linux machine> -Credential $cred -Authentication basic
|
|
|
|
```
|
2016-01-18 00:25:48 +01:00
|
|
|
|
2016-01-20 21:29:06 +01:00
|
|
|
> The `$cred` variable can be empty; a credentials prompt will appear, enter
|
|
|
|
> any fake credentials you wish as authentication is not yet implemented.
|
2016-01-18 00:25:48 +01:00
|
|
|
|
2016-01-21 21:25:48 +01:00
|
|
|
The IP address of the Linux machine can be obtained with:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
ip -f inet addr show dev eth0
|
|
|
|
```
|
|
|
|
|
2016-01-20 21:29:06 +01:00
|
|
|
## Detailed Build Script Notes
|
2016-01-18 00:25:48 +01:00
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
> This sections explains the build scripts.
|
2016-01-18 00:25:48 +01:00
|
|
|
|
|
|
|
The variable `$BIN` is the output directory, `bin`.
|
2015-12-16 22:57:13 +01:00
|
|
|
|
2016-01-15 20:56:08 +01:00
|
|
|
### Managed
|
|
|
|
|
2016-02-18 21:45:53 +01:00
|
|
|
Builds with `dotnet`. Publishes all dependencies into the `bin` directory.
|
2016-02-05 19:18:23 +01:00
|
|
|
Emits its own native host as `bin/powershell`. Uses a `Linux` configuration to
|
|
|
|
add a preprocessor definition. The `CORECLR` definition is added only when
|
2016-02-18 21:45:53 +01:00
|
|
|
targeting the `netstandard1.5` framework. The `LINUX` definition is added only
|
|
|
|
when `--configuration Linux` is used.
|
2016-01-15 20:56:08 +01:00
|
|
|
|
|
|
|
```sh
|
|
|
|
cd src/Microsoft.PowerShell.Linux.Host
|
2016-02-18 21:45:53 +01:00
|
|
|
dotnet publish --configuration Linux
|
2016-01-15 20:56:08 +01:00
|
|
|
```
|
|
|
|
|
2015-12-09 22:38:03 +01:00
|
|
|
### Native
|
|
|
|
|
2016-02-18 21:45:53 +01:00
|
|
|
The `libpsl-native.so` library consists of native functions that
|
|
|
|
`CorePsPlatform.cs` P/Invokes.
|
2015-12-16 22:57:13 +01:00
|
|
|
|
2016-01-15 20:56:08 +01:00
|
|
|
#### libpsl-native
|
2015-12-16 22:57:13 +01:00
|
|
|
|
|
|
|
Driven by CMake, with its own unit tests using Google Test.
|
|
|
|
|
2015-12-09 22:38:03 +01:00
|
|
|
```sh
|
2016-01-15 20:56:08 +01:00
|
|
|
cd src/libpsl-native
|
2015-12-09 22:38:03 +01:00
|
|
|
cmake -DCMAKE_BUILD_TYPE=Debug .
|
2015-12-16 22:57:13 +01:00
|
|
|
make -j
|
2015-12-09 22:38:03 +01:00
|
|
|
ctest -V
|
2016-01-15 20:56:08 +01:00
|
|
|
# Deploy development copy of libpsl-native
|
|
|
|
cp native/libpsl-native.* $BIN
|
2015-12-16 22:57:13 +01:00
|
|
|
```
|
|
|
|
|
2016-01-20 20:33:57 +01:00
|
|
|
The output is a `.so` on Linux and `.dylib` on OS X. It is unnecessary for Windows.
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
### PSRP
|
|
|
|
|
|
|
|
#### OMI
|
|
|
|
|
2016-03-14 19:20:46 +01:00
|
|
|
**PSRP support is not built by `./build.sh`**
|
|
|
|
|
|
|
|
To develop on the PowerShell Remoting Protocol (PSRP) for Linux, you'll need to
|
|
|
|
be able to compile OMI, which additionally requires:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo apt-get install libpam0g-dev libssl-dev libcurl4-openssl-dev libboost-filesystem-dev
|
|
|
|
```
|
|
|
|
|
|
|
|
Note that the OMI build steps can be done with `./omibuild.sh`.
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
Build OMI from source in developer mode:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
cd src/omi/Unix
|
|
|
|
./configure --dev
|
|
|
|
make -j
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Provider
|
|
|
|
|
|
|
|
The provider uses CMake to build, link, and register with OMI.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
cd src/omi-provider
|
|
|
|
cmake .
|
|
|
|
make -j
|
|
|
|
```
|
|
|
|
|
|
|
|
The provider also maintains its own native host library to initialize the CLR,
|
|
|
|
but there are plans to refactor .NET's packaged host as a shared library.
|
|
|
|
|
2016-03-14 20:07:19 +01:00
|
|
|
### FullCLR PowerShell
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
On Windows, we also build Full PowerShell for .NET 4.5.1
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-03-14 20:07:19 +01:00
|
|
|
#### Setup environment
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-03-17 07:49:26 +01:00
|
|
|
* Install the Visual C++ Compiler via Visual Studio 2015.
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-03-17 07:49:26 +01:00
|
|
|
This component is required to compile the native `powershell.exe` host.
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-03-17 07:49:26 +01:00
|
|
|
This is an optionally installed component, so you may need to run the
|
|
|
|
Visual Studio installer again.
|
2016-03-17 01:23:52 +01:00
|
|
|
|
2016-03-17 07:49:26 +01:00
|
|
|
If you don't have any Visual Studio installed, you can use
|
|
|
|
[Visual Studio 2015 Community Edition][vs].
|
|
|
|
|
|
|
|
> Compiling with older versions should work, but we don't test it.
|
|
|
|
|
|
|
|
**Troubleshooting note:** If `cmake` says that it cannot determine the
|
|
|
|
`C` and `CXX` compilers, you either don't have Visual Studio, or you
|
|
|
|
don't have the Visual C++ Compiler component installed.
|
|
|
|
|
|
|
|
* Add `msbuild` to `PATH`, or create a PowerShell alias to it.
|
2016-02-05 19:18:23 +01:00
|
|
|
|
2016-02-18 22:29:10 +01:00
|
|
|
```powershell
|
|
|
|
Set-Alias msbuild C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
|
|
|
|
```
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
* Install CMake and add it to `PATH.`
|
|
|
|
|
|
|
|
You can install it from [Chocolatey][] or [manually][].
|
2016-02-04 04:07:36 +01:00
|
|
|
|
|
|
|
```
|
|
|
|
choco install cmake.portable
|
|
|
|
```
|
2016-02-05 19:18:23 +01:00
|
|
|
|
2016-03-17 07:49:26 +01:00
|
|
|
* Install .NET CLI via their [documentation][cli-docs]
|
2016-02-05 19:18:23 +01:00
|
|
|
|
2016-03-15 21:24:32 +01:00
|
|
|
[vs]: https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
|
|
|
|
[Chocolatey]: https://chocolatey.org/packages/cmake.portable
|
2016-02-05 19:18:23 +01:00
|
|
|
[manually]: https://cmake.org/download/
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-03-14 20:07:19 +01:00
|
|
|
#### Building
|
2016-02-04 04:07:36 +01:00
|
|
|
|
|
|
|
```powershell
|
2016-03-14 20:07:19 +01:00
|
|
|
Start-PSBuild -FullCLR
|
2016-02-04 04:07:36 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
**Troubleshooting:** the build logic is relatively simple and contains following steps:
|
2016-03-14 20:07:19 +01:00
|
|
|
- building managed DLLs: `dotnet publish --runtime net451`
|
2016-02-04 04:07:36 +01:00
|
|
|
- generating Visual Studio project: `cmake -G "$cmakeGenerator"`
|
2016-02-05 19:18:23 +01:00
|
|
|
- building `powershell.exe` from generated solution: `msbuild powershell.sln`
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-03-14 20:07:19 +01:00
|
|
|
All this steps can be run separately from `Start-PSBuild`, don't
|
|
|
|
hesitate to experiment.
|
2016-02-04 04:07:36 +01:00
|
|
|
|
|
|
|
## Running
|
|
|
|
|
|
|
|
Running FullCLR version is not as simple as CoreCLR version.
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
If you just run ~~`.\binFull\powershell.exe`~~, you will get a `powershell`
|
|
|
|
process, but all the interesting DLLs (i.e. `System.Management.Automation.dll`)
|
|
|
|
would be loaded from the GAC, not your `binFull` build directory.
|
2016-02-04 04:07:36 +01:00
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
[@lzybkr](https://github.com/lzybkr) wrote a module to deal with it and run
|
|
|
|
side-by-side.
|
2016-02-04 04:07:36 +01:00
|
|
|
|
|
|
|
```powershell
|
|
|
|
Import-Module .\PowerShellGithubDev.psm1
|
|
|
|
Start-DevPSGithub -binDir $pwd\binFull
|
|
|
|
```
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
**Troubleshooting:** default for `powershell.exe` that **we build** is x86.
|
|
|
|
|
|
|
|
There is a separate execution policy registry key for x86, and it's likely that
|
|
|
|
you didn't ~~bypass~~ enable it. From **powershell.exe (x86)** run:
|
2016-02-04 04:07:36 +01:00
|
|
|
|
|
|
|
```
|
|
|
|
Set-ExecutionPolicy Bypass
|
|
|
|
```
|
|
|
|
|
|
|
|
## Running from CI server
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
We publish an archive with FullCLR bits on every CI build with [AppVeyor][].
|
2016-02-04 04:07:36 +01:00
|
|
|
|
|
|
|
* Download zip package from **artifacts** tab of the particular build.
|
2016-02-05 19:18:23 +01:00
|
|
|
* Unblock zip file: right-click in file explorer -> properties -> check
|
|
|
|
'Unblock' checkbox -> apply
|
2016-02-04 04:07:36 +01:00
|
|
|
* Extract zip file to `$bin` directory
|
|
|
|
* `Start-DevPSGithub -binDir $bin`
|
|
|
|
|
2016-02-05 19:18:23 +01:00
|
|
|
[appveyor]: https://ci.appveyor.com/project/PowerShell/powershell-linux
|