「PowerShell」
PowerShell 「Core」
Windowsの伝統的なCLIシェルと言えばコマンドプロンプト
先日のUbuntu Weekly Topicsでも紹介しているように、
PowerShellは.NET Frameworkベースのソフトウェアです。それに対して今回GitHub上に公開された
Debファイルをインストールするだけ
実際にPowerShellをインストールしてみましょう。といってもGitHub上に公開されているDebファイルをインストールするだけです。DebファイルはUbuntu 14.
まずリリースページを参考に、
$ wget "https://github.com/PowerShell/PowerShell/releases/download/\ v6.0.0-alpha.9/powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb"
Debファイルをインストールしたら、
$ dpkg-deb --info powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb 新形式 debian パッケージ、バージョン 2.0。 サイズ 40928824 バイト: コントロールアーカイブ = 14690 バイト。 468 バイト、 13 行 control 51279 バイト、 463 行 md5sums Package: powershell Version: 6.0.0-alpha.9-1 License: MIT License Vendor: Microsoft Corporation Architecture: amd64 Maintainer: PowerShell Team <PowerShellTeam@hotmail.com> Installed-Size: 123969 Depends: libunwind8, libicu55 Section: shells Priority: extra Homepage: https://microsoft.com/powershell Description: PowerShell is an automation and configuration management platform. It consists of a cross-platform command-line shell and associated scripting language.
「--contents」
$ dpkg-deb --contents powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb drwx------ 0/0 0 2016-08-16 07:04 ./ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./opt/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./opt/microsoft/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./opt/microsoft/powershell/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./opt/microsoft/powershell/6.0.0-alpha.9/ -rw-r--r-- 0/0 36744 2016-08-12 09:47 ./opt/microsoft/powershell/6.0.0-alpha.9/System.Xml.XPath.XDocument.dll (中略) -rw-r--r-- 0/0 74120 2016-06-12 08:14 ./opt/microsoft/powershell/6.0.0-alpha.9/System.Runtime.Extensions.dll drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/bin/ lrwxrwxrwx 0/0 0 2016-08-16 07:04 ./usr/bin/powershell -> /opt/microsoft/powershell/6.0.0-alpha.9/powershell drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/local/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/local/share/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/local/share/man/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/local/share/man/man1/ -rw-r--r-- 0/0 1924 2016-08-16 07:04 ./usr/local/share/man/man1/powershell.1.gz drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/share/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/share/doc/ drwxr-xr-x 0/0 0 2016-08-16 07:04 ./usr/share/doc/powershell/ -rw-r--r-- 0/0 160 2016-08-16 07:04 ./usr/share/doc/powershell/changelog.gz
Debianパッケージは、
$ dpkg-deb --control powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb control ls control/ control md5sums
Debファイルの中身に不審な点がなければ、
$ sudo apt install ./powershell_6.0.0-alpha.9-1ubuntu1.16.04.1_amd64.deb
Ubuntu 14.
$ sudo dpkg -i powershell_6.0.0-alpha.9-1ubuntu1.14.04.1_amd64.deb $ sudo apt-get install -f
うまくインストールできたらPowerShellを起動してみましょう。
$ powershell PowerShell Copyright (C) 2016 Microsoft Corporation. All rights reserved. PS /home/ubuntu> $PSVersionTable Name Value ---- ----- PSVersion 6.0.0-alpha PSEdition Core PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 3.0.0.0 GitCommitId v6.0.0-alpha.9 CLRVersion WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 PS /home/ubuntu> lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04 Codename: xenial PS /home/ubuntu> uname -a Linux powershell 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux PS /home/ubuntu>
とっても簡単でしたね。
PowerShellの基本のキ
PowerShellは単体で動かすと、
コマンドレットは
PS /home/ubuntu> Get-Command CommandType Name Version Source ----------- ---- ------- ------ Function Add-NodeKeys 0.0 PSDesiredStateConfiguration Function AddDscResourceProperty 0.0 PSDesiredStateConfiguration Function AddDscResourcePropertyFromMetadata 0.0 PSDesiredStateConfiguration (中略) Cmdlet Write-Output 3.1.0.0 Microsoft.PowerShell.Utility Cmdlet Write-Progress 3.1.0.0 Microsoft.PowerShell.Utility Cmdlet Write-Verbose 3.1.0.0 Microsoft.PowerShell.Utility Cmdlet Write-Warning 3.1.0.0 Microsoft.PowerShell.Utility PS /home/ubuntu> Get-Command *-Location CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Get-Location 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Pop-Location 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Push-Location 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Set-Location 3.1.0.0 Microsoft.PowerShell.Management
タブ補完もサポートしているので、
特定のコマンドのヘルプは
PS /home/ubuntu> Get-Help Set-Location NAME Set-Location SYNOPSIS Sets the current working location to a specified location. (後略)
PowerShellにもエイリアス機能があります。たとえばディレクトリを移動する
エイリアスの一覧は
PS /home/ubuntu> Get-Alias CommandType Name Version Source ----------- ---- ------- ------ Alias ? -> Where-Object Alias % -> ForEach-Object Alias cd -> Set-Location Alias chdir -> Set-Location Alias clc -> Clear-Content Alias clear -> Clear-Host Alias clhy -> Clear-History (後略)
変数や制御構造、
(bashの中でpowershellを実行し、その中でさらにbashとpowsershellを実行した場合) PS /home/ubuntu> ps -ejH (中略) 433 399 399 ? 00:00:03 sshd 434 434 434 pts/0 00:00:00 bash 682 682 434 pts/0 00:00:39 powershell 2009 2009 434 pts/0 00:00:00 bash 2019 2019 434 pts/0 00:00:19 powershell 2060 2019 434 pts/0 00:00:00 ps (後略)
しかしながら
PS /home/ubuntu> $pro = Get-Process -Name powershell PS /home/ubuntu> $pro.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False Process System.Object PS /home/ubuntu> $pro.Id 682 PS /home/ubuntu> $pro.Modules Size(K) ModuleName FileName ------- ---------- -------- 100 powershell /opt/microsoft/powershell/6.0.0-alpha.9/powershell 44 libnss_nis-2.23.so /lib/x86_64-linux-gnu/libnss_nis-2.23.so 88 libnsl-2.23.so /lib/x86_64-linux-gnu/libnsl-2.23.so 32 libnss_compat-2.23.so /lib/x86_64-linux-gnu/libnss_compat-2.23.so 92 libresolv-2.23.so /lib/x86_64-linux-gnu/libresolv-2.23.so 20 libnss_dns-2.23.so /lib/x86_64-linux-gnu/libnss_dns-2.23.so 8 libnss_mdns4_minimal.so.2 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 44 libnss_files-2.23.so /lib/x86_64-linux-gnu/libnss_files-2.23.so (後略)
さらに
PowerShellをビルドする
ソースコードが公開されているので、
まずはPowerShellのソースコードをクローンします。
$ git clone --recursive https://github.com/PowerShell/PowerShell $ cd PowerShell/
まずはビルドに必要なパッケージやツールをインストールします。といってもPowerShellのソースコードにはそれを実行するためのPowerShellスクリプトモジュールが存在します。つまりPowerShellをビルドするなら、
$ ./tools/download.sh
以降はPowerShellを用いたビルド方法を説明します。PowerShellを起動した上で、
PS /home/ubuntu/src/PowerShell> Import-Module ./build.psm1 PS /home/ubuntu/src/PowerShell> Start-PSBootstrap Installing PowerShell build dependencies Submodule path '../src/libpsl-native/test/googletest': checked out 'c99458533a9b4c743ed51537e25989ea55944908' (後略)
もしくはpowershellコマンドから直接スクリプトモジュールを読み込んで実行する方法でもかまいません。
powershell -noprofile -c "Import-Module ./build.psm1; Start-PSBootstrap"
PowerShellのスクリプトファイルは、
「Start-PSBootstrap」
- curl、
g++、 cmake、 make、 libunwind8、 libicu55パッケージのインストール - (パッケージ作成する場合は)
ruby-devパッケージのインストールとgemコマンドを使ったfpm、 ronnのインストール - .NET CLIのリポジトリから.NET CLIパッケージのアンインストールスクリプトのダウンロード
[6] と実行 - .NET CLIのリポジトリから.NET CLIのインストールスクリプトのダウンロードと実行
内部的に
$ ls ~/.dotnet/ LICENSE.txt ThirdPartyNotices.txt dotnet host sdk shared $ ~/.dotnet/dotnet --version 1.0.0-preview3-003223
さて、
PS /home/ubuntu/src/PowerShell> Import-Module ./build.psm1 PS /home/ubuntu/src/PowerShell> Start-PSBuild WARNING: Could not find 'dotnet', appending /home/ubuntu/.dotnet to PATH. VERBOSE: Using configuration 'Linux' VERBOSE: Top project directory is /home/ubuntu/src/PowerShell/src/powershell-unix VERBOSE: Using framework 'netcoreapp1.0' VERBOSE: Using runtime 'ubuntu.16.04-x64' Run dotnet restore (後略)
もしくはpowershellコマンドから直接スクリプトモジュールを読み込んで実行する方法でもかまいません。
powershell -noprofile -c "Import-Module ./build.psm1; Start-PSBuild"
ちなみにPowerShellのソースコードに含まれる、
しばらく待てばビルドが完了します。ビルドされたPowerShell本体は以下のパスに存在しますので、
$ ./src/powershell-unix/bin/Linux/netcoreapp1.0/ubuntu.16.04-x64/powershell PS /home/ubuntu/src/PowerShell> $PSVersionTable Name Value ---- ----- PSVersion 6.0.0-alpha PSEdition Core PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 3.0.0.0 GitCommitId v6.0.0-alpha.9-146-gd57530812e437a5fb265179c89783565d55a2004 CLRVersion WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
パッケージを作りたい場合は、
PS /home/ubuntu/src/PowerShell> Import-Module ./build.psm1 PS /home/ubuntu/src/PowerShell> Start-PSBootstrap -Package (中略) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /var/lib/gems/2.3.0 directory. (中略)
そこで別途手動でgemをインストールします。ここではsudoを使って/var/
$ sudo gem install fpm ronn
gemをインストールできたら、
PS /home/ubuntu/src/PowerShell> Start-PSBuild -Publish PS /home/ubuntu/src/PowerShell> Start-PSPackage WARNING: Please ensure you have previously run Start-PSBuild -Clean -CrossGen! WARNING: -Types was not specified, continuing with deb! WARNING: Building for Ubuntu 16.04! WARNING: Suffix not given, building primary PowerShell package! roff: /home/ubuntu/src/PowerShell/assets/powershell.1 Directory: /home/ubuntu/src/PowerShell Mode LastWriteTime Length Name ---- ------------- ------ ---- ------ 2016/08/28 2:35 31632896 powershell_6.0.0-alpha.9-146-gd575308-1ubuntu1.16.04.1_amd64.deb
あとはカレントディレクトリに作られたパッケージファイルを本Recipeの最初に説明した方法でインストールすれば、