しばたテックブログ

気分で書いている技術ブログです。

Visual Studio Code PowerShell拡張で使えるコマンドまとめ

前回前々回に続いて今回はPowerShell拡張で利用可能なコマンドをまとめました。

各コマンドがどのバージョンから利用可能になったか調査するのが難しい部分があったため、単純に現在最新のバージョン(Ver.0.11)で利用可能なものをリストアップする形としています。

1. コマンドパレットで使えるコマンド

最初にコマンドパレットで利用可能なコマンドについて記載します。

コマンドパレットはCtrl+Shift+Pで開くことができ、Powershell:で始まるコマンドがPowerShell拡張で使えるコマンドになります。

f:id:stknohg:20170328210828p:plain

以下に一覧を記載します。

コマンド 内容
PowerShell: Create New Project from Plaster Template Plasterを使いテンプレートからプロジェクトを生成します。
PowerShell: Expand Alias (Shift+Alt+E) スクリプト中のエイリアスを展開します。
PowerShell: Find/Install PowerShell Modules from the gallery (Ctrl+K Ctrl+F) PowerShell Galleryからモジュールを検索しインストールします。
PowerShell: Get online help for Commands (Ctrl+F1) 選択されたコマンドのオンラインヘルプを表示します。
PowerShell: Open current file in PowerShell ISE (Ctrl+Shift+I) 現在のファイルをPowerShell ISEで開きます。
PowerShell: Open Examples Folder Examplesフォルダを開きます。
PowerShell: Open PowerShell Extension logs Folder PowerShell拡張のログフォルダを開きます。
PowerShell: Restart Current Session 現在のPowerShell Sessionを再起動します。
PowerShell: Run selecton (F8) 選択部分を実行します。
PowerShell: Select PSScriptAnalyzer Rules PSScriptAnalyzerで適用するルールを設定します。
PowerShell: Show additional commands from PowerShell modules PowerShell拡張に追加したコマンドを表示します。
PowerShell: Show Integrated Console Integrated Consoleを表示します。
PowerShell: Open PowerShell Extension logs PowerShell拡張のログを出力に表示します。
PowerShell: Open Show Session Menu セッションメニューを表示します。

PowerShell: Create New Project from Plaster Template

Plasterを使いテンプレートからプロジェクトを生成します。
Plasterでは独自のテンプレートを作ることができますが、現時点ではNew PowerShell Manifest Moduleというマニフェストモジュールを作るテンプレートのみ登録されています。

f:id:stknohg:20170328020411p:plain

動作を確認してみたところ、Integrated Consoleとの相性が悪いのか、このコマンドを実行してもキャレットの制御が上手くいかずモジュールの生成がかなり面倒なことになっていました…
これはそのうち改善されると思います。

PowerShell: Expand Alias

スクリプト中のエイリアスを展開し元の関数に戻してくれます。
例えば、

echo "Hello World"

というスクリプトであれば、

Write-Output "Hello World"

と変換してくれます。
非常に便利な機能な上Shift+Alt+Eのショートカットキーも割り当てられていますので覚えておくとスクリプトの作成が捗るでしょう。

PowerShell: Find/Install PowerShell Modules from the gallery

PowerShell Galleryからモジュールを検索しインストールすることができます。

f:id:stknohg:20170328022653p:plain

Install-Module -Name [モジュール名] -Scope CurrnetUser

と同等の機能ですが、一旦すべてのモジュール情報をローカルにキャッシュしている様で初回実行時はレスポンスが非常に悪いです…
率直に言ってこれならIntegrated Consoleから直接Find-ModuleInstall-Moduleを実行した方がマシだと思います。

PowerShell: Get online help for Commands

選択されたコマンドのオンラインヘルプ(MSDN)を表示します。
残念ながらブラウザを起動して該当のページを開いてくれるだけで、PowerShell ISEのコマンドアドオンの様に至れり尽くせりな感じではないです…

PowerShell: Open current file in PowerShell ISE

現在のファイルをPowerShell ISEで開きます。
機能としては面白いですが、正直使いどころがわかりません…

PowerShell: Open Examples Folder

新しいVisual Studio Codeを起動し、Examplesフォルダを開きます。

f:id:stknohg:20170328022410p:plain

PowerShell: Open PowerShell Extension logs Folder

新しいVisual Studio Codeを起動し、PowerShell拡張のログフォルダを開きます。

f:id:stknohg:20170328023020p:plain

PowerShell: Restart Current Session

現在のPowerShellセッションを再起動します。
このコマンドは実質PowerShell拡張の再起動コマンドとなります。

前回触れたとおり、powershell.startAutomatically=falseの場合はこのコマンドを使ってPowerShell拡張を有効にする必要があります。

PowerShell: Run selecton

ファイル中で選択された部分を実行します。

このコマンドはコマンドパレットからよりF8キーを押して実行する方が多いかと思います。

PowerShell: Select PSScriptAnalyzer Rules

PSScriptAnalyzerで適用するルールを設定します。

f:id:stknohg:20170328023728p:plain

チェックを付けたルールが有効になりconfirmをクリックすると反映されます。

この設定は永続化しませんので、永続化させたい場合はpowershell.scriptAnalysis.settingsPathパラメーターに独自の設定ファイルを記述する必要があります。

PowerShell: Show additional commands from PowerShell modules

PowerShell拡張に追加したコマンドを表示・実行します。

ここでコマンドを表示するには、あらかじめRegister-EditorCommandを使いコマンドを追加しておく必要があります。
細かい手順については Extending the Host Editor を参考にしてください。*1

PowerShell: Show Integrated Console

Integrated Consoleを表示します。
おおむねCtrl+@と同等の動作をしますが、細かい違いとしてはIntegrated Terminalに複数の端末がある場合にIntegrated Consoleを選択して表示してくれます。
(Ctrl+@の場合は直近に開かれていた端末を表示するだけです)

PowerShell: Open PowerShell Extension logs

PowerShell拡張のログを出力に表示します。

f:id:stknohg:20170328024640p:plain

PowerShell: Open Show Session Menu

セッションメニューを表示します。

f:id:stknohg:20170328024754p:plain

セッションメニューでは、

  • Restart Current Session
  • Open Session Logs Folder

コマンドと、このメニューにのみ存在する

  • Switch to Windows PowerShell [(x86)|(x64)]

コマンドが提供されています。
Switch to Windows PowerShellコマンドは意外と使いどころがありそうなので独立したコマンドにしてほしい感じです。


【2017/07/13追記】

Ver.1.2.0よりこのメニューが拡張され、Switch to Windows PowerShell [(x86)|(x64)]に加え、追加でインストールされたPowerShell*2に切り替えることが出来る様になりました。

f:id:stknohg:20170713190247p:plain

2. Integrated Consoleで使えるコマンド

  • 2017/07/13 Ver.1.4.0で追加されたコマンドに対する説明を追記

続けてIntegrated Consoleで使える独自コマンド*3について説明します。

現時点ではまだpseditの1コマンドしかありません。

コマンド 内容
psedit 指定したファイルをVisual Studio Codeで表示します。
Out-CurrentFile フォーマットされた文字列を現在開いているファイルに出力します。
New-VSCodeHtmlContentView 新しいHTMLコンテンツビューを作成します。
Set-VSCodeHtmlContentView 指定されたHTMLコンテンツビューにHTMLを上書きします。
Write-VSCodeHtmlContentView 指定されたHTMLコンテンツビューにHTMLを追記します。
Show-VSCodeHtmlContentView 指定されたHTMLコンテンツビューをアクティブにして表示します。
Close-VSCodeHtmlContentView 指定されたHTMLコンテンツビューを非表示にします。

psedit

pseditは指定したファイルをVisual Studio Codeで開くコマンドです。
PowerShell ISEに同名のコマンドが存在しますが、Ver.0.11になってPowerShell拡張にも実装されました。

PowerShell ISEとはパラメーター名が異なり-FilePathsとなっています。*4

実行例は以下の様な感じです。

> psedit -FilePaths .\hello.ps1, .\world.ps1

f:id:stknohg:20170328214905p:plain

Out-CurrentFile (Ver.1.4.0より利用可)

コマンドなどを実行した結果の文字列を現在開いているファイルに文字列として出力します。
下の画像を見ていただければイメージは一発で掴めるかと思います。

実行例)

ls c:\ -Directory | select -ExpandProperty name | Out-CurrentFile

f:id:stknohg:20170713212416p:plain

New-VSCodeHtmlContentView (Ver.1.4.0より利用可)

Ver.1.4.0より、HTMLコンテンツビュー(チェンジログなどの表示に使われているHTML形式のビュー)を扱うためのコマンドレットが追加されました。

現状これらのコマンドが何に使えるのかといえば答えに窮するのですが、PowerShell TeamとしてもUI拡張のための機能をとりあえず作ってみたといった感じの様です。
そんな感じなのでこのHTMLコンテンツビューに関する機能については今後いろいろと変化するものと予想されます。

で、このNew-VSCodeHtmlContentViewでは新しいHTMLコンテンツビューを作成します。
次に説明するSet-VSCodeHtmlContentViewWrite-VSCodeHtmlContentViewと合わせて、GitHubに記載されている例を見ればイメージは掴めるかと思います。

実行例)

$view = New-VSCodeHtmlContentView -Title "My Custom View" -ShowInColumn One
Set-VSCodeHtmlContentView -View $view -Content "<h1>Hello world!</h1>"
Write-VSCodeHtmlContentView $view -Content "<b>I'm adding new content!</b><br />"

https://user-images.githubusercontent.com/79405/27394133-f96c38cc-565f-11e7-8102-a3727014ea5a.GIF

(上図は https://github.com/PowerShell/vscode-powershell/releases より)

ちなみに、現時点でHTMLコンテンツビューにJavaScriptを差し込むことはできません。

Set-VSCodeHtmlContentView (Ver.1.4.0より利用可)

指定されたHTMLコンテンツビューにHTMLを上書きします。
実行例は上記参照。

Write-VSCodeHtmlContentView (Ver.1.4.0より利用可)

指定されたHTMLコンテンツビューにHTMLを追記します。
実行例は上記参照。

Show-VSCodeHtmlContentView (Ver.1.4.0より利用可)

指定されたHTMLコンテンツビューをアクティブにして表示します。

実行例)

Show-VSCodeHtmlContentView -View $view

Close-VSCodeHtmlContentView (Ver.1.4.0より利用可)

指定されたHTMLコンテンツビューを非表示にします。

実行例)

Close-VSCodeHtmlContentView -View $view

最後に

とりあえずこんな感じです。

率直に言ってあまりぱっとしないコマンドもありますが、便利なコマンドもありますので覚えておいて損はないかと思います。

*1:こちらについては時間をとって別記事を書こうと思います。

*2:基本的にはPowerShell 6.0の各バージョンになるはずですが…

*3:というか関数ですね…

*4:PowerShell ISEのpseditのパラメーター名は-filenamesです。

Visual Studio Code PowerShell拡張の設定まとめ

前回のエントリでコードフォーマットに関する設定をまとめましたが、折角なのでほかの設定もまとめてみました。

stknohg.hatenablog.jp

今回説明する設定はすべてsettings.jsonの項目になります。

1. 拡張機能に関する設定

最初に拡張機能そのものに関する設定について記載します。

powershell.startAutomatically (Ver.0.11より)

PowerShellのスクリプトファイルを開いた際にPowerShell拡張を自動的に開始するか否かを設定します。
デフォルトtrueです。

この設定をfalseにした場合、

> PowerShell: Restart Current Session

コマンドを明示的に実行しないと拡張が有効になりません。

このオプションはマシンスペックの低い環境や、拡張の起動よりもファイルの内容を参照することを優先させたい場合に使う事を想定しているそうです。

powershell.useX86Host (Ver.0.5より)

64bit OSの環境で32bit版の拡張機能を利用するか否かを設定します。
デフォルトfalseです。

32bit OSの環境でこのパラメーターを設定しても何も起きません。

powershell.enableProfileLoading (Ver.0.6より)

Powershell拡張の起動時にプロファイル(profile.ps1Microsoft.VSCode_profile.ps1)をロードするか否かを設定します。
Ver.0.6.1からデフォルト値がtrueになっています。(Issue #180)

プロファイルについての詳細は、

stknohg.hatenablog.jp

のエントリを参考にしてください。

なお、デバッガはこの設定の影響を受けません。

powershell.developer.powerShellExePath (Ver.0.7.1より)

デフォルトでないPowerShellを使う場合にその実行ファイルのパスを指定します。
デフォルト値は""(デフォルトのPowerShellを使う)です。

このパラメーターはVer.1.4.0よりpowershell.powerShellExePathに移行され、非推奨となりました。

powershell.powerShellExePath (Ver.1.4.0より)

デフォルトでないPowerShellを使う場合にその実行ファイルのパスを指定します。
デフォルト値は""(デフォルトのPowerShellを使う)です。

powershell.developer.editorServicesLogLevel (Ver.0.4より)

PowerShell Editor Servicesのログレベルを設定します。
設定可能な値はVerboseNormalWarningErrorで、デフォルト値はNormalです。

この設定はPowerShell拡張でエラーが出た場合の調査用ですので、通常この内容を変える必要はありません。

ちなみにログフォルダは、

> PowerShell: Open PowerShell Extension Logs Folder

コマンドで開くことができます。

2. Integrated Terminal(Integrated Console)に関する設定

PowerShell拡張Ver.0.10より統合ターミナル(Integrated Terminal)にPowershell拡張独自のコンソール(Integrated Console)が使える様になりました。
ここではIntegrated Consoleに関わる設定について記載します。

powershell.integratedConsole.showOnStartup (Ver.0.11より)

PowerShell拡張の起動時にIntegrated Consoleを起動するか否かを設定します。
デフォルトtrueです。

powershell.integratedConsole.focusConsoleOnExecute (Ver.0.11より)

スクリプト実行時にIntegrated Consoleにフォーカスを移すか否かを設定します。
デフォルトtrueです。

3. コード支援に関する設定

PowerShell Script Analyzer等のコード支援機能にかかわる設定について記載します。

powershell.scriptAnalysis.enable (Ver.0.2より)

PowerShell Script Analyzerによるリアルタイムコード分析を有効にするか否かを設定します。
デフォルトtrueです。

powershell.scriptAnalysis.settingsPath (Ver.0.6より)

ユーザー独自のPowerShell Script Analyzer設定ファイルを指定します。
デフォルト""です。

この設定により既定の動作を上書きできる様になります。
設定例についてはこちらをご覧ください。

4. その他の設定

最後にその他の、おもに中の人向けの設定について記載します。

ここで説明する内容ついては自信の無い部分もありますので、もし間違いがあればご指摘いただけると助かります。

powershell.developer.editorServicesWaitForDebugger (Ver.0.2より)

この設定をtrueにするとPowerShell Editor Serviceを/waitForDebuggerパラメーター付きで起動します。
細かいところはよくわからないのですが、ざっとソースを調べた限りではこのパラメーターが指定されるとPowerShell Editor Serviceの起動時にデバッガからアタッチされるのを待ち続ける様です。

おそらく中の人向けの機能だと思われます。

powershell.developer.bundledModulesPath (Ver.0.7.1より)

リリースノートに明記されていないのですが、コミットログを追う限りVer.0.7.1から導入されている様です。

もともとはPowerShell拡張で使われるモジュール(PowerShell Editor ServicesPowerShell Script AnalyzerPlasterなど)のパスを設定するものだったのですが、Ver.0.10から中の人向けの機能になった様です。

デフォルト値は"../modules/"から""に変更されています。

powershell.developer.featureFlags (Ver.0.11より)

PowerShell拡張で実験的な機能を有効にするためのフラグを設定するそうです。
デフォルト値は空の配列です。

ただ、現時点でここに設定可能なフラグはない様で今後のリリースで増えていくものと思われます。
この設定はStart-EditorServices.ps1-FeatureFlagsパラメーターとしてPowerShell Editor Serviceに渡されるのですが、ソースを見ればわかりますが、現時点ではスクリプト内で全く使われていません。

powershell.developer.powerShellExeIsWindowsDevBuild (Ver.0.9より)

実行しているPowerShellが開発者向けビルドであることを明示するための設定です。
デフォルトfalseです。

完全に中の人向けの設定で、この設定により何が起こるのかは全くわかりません。

最後に

ざっとですがPowerShell拡張の設定をまとめてみました。
フォーマットに関する設定同様このエントリの内容は随時更新していきたいと思います。

Visual Studio Code PowerShell拡張で設定可能なコードフォーマットまとめ

Visual Studio Code PowerShell拡張のVersion 0.9からコードフォーマッターの機能が追加されコードの自動フォーマットができる様になりました。

marketplace.visualstudio.com

本エントリでは設定可能なフォーマットスタイルをまとめます。
以降で説明する設定はすべてsettings.jsonで設定する項目になります。

1. Visual Studio Code全体の設定と共有される設定

はじめにVisual Studio Code全体とPowerShell拡張で共有される設定について記載します。

editor.tabSize

1タブ当たりのスペース数です。
デフォルト4タブです。

editor.formatOnSave (Ver.0.9より使用可)

ファイルの保存時に自動フォーマットするか否かの設定です。
デフォルトfalseです。

editor.formatOnType (Ver.0.10より使用可)

エディター入力時に自動フォーマットするか否かの設定です。
デフォルトfalseです。
Ver.0.10で利用可能になりました。

editor.formatOnPaste (Ver.0.9より使用可)

エディターにペーストした際に自動フォーマットするか否かの設定です。
デフォルトfalseです。

この設定に関してはリリースノートに明記されていなかったのですがVer.0.9から利用可能だった様です。
ただバグがあった様で実質Ver.0.10から使える様になった感じです。

2. 【2017/07/13追加】スタイルのプリセット

ここからはPowerShell拡張の設定になります。

powershell.codeFormatting.preset (Ver.1.4.0より使用可)

Ver.1.4.0よりコードフォーマットに関する設定が大きく変わり、基本的なスタイルをあらかじめ定義済みのものから選び、細かい部分を個別に設定する様に変更されました。
このpowershell.codeFormatting.presetでは以下のスタイルを選択することができます。

1. OTBS(One True Brace Style)
# } の後に改行を入れない cuddled else ができるスタイル
if ($var -eq $true) {
    # Do the thing
} else {
    # Do something else
}
2. Stroustrup
# } の後に改行が必ず入るスタイル
if ($var -eq $true) {
    # Do the thing
}
else {
    # Do something else
}
3. Allman
# { と } を改行して入れるスタイル
if ($var -eq $true)
{
    # Do the thing
}
else
{
    # Do something else
}
4. Custom

すべての設定を自分でカスタマイズするスタイル。
デフォルトはこのスタイルです。

3. ブレーススタイルに関する設定

powershell.codeFormatting.openBraceOnSameLine (Ver.0.9より使用可)

オープンブレース({)を関連する文と同じ行に記載するか否かの設定です。
デフォルトtrueです。

コード例)

# trueの場合
if ($true) {
    
}

# falseの場合
if ($true)
{
    
}

powershell.codeFormatting.newLineAfterOpenBrace (Ver.0.9より使用可)

オープンブレース({)の後は改行するかどうかを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   { の後は強制的に改行される
if ($true) {
    Write-Output "Hello"
}

# falseの場合
#   以下の様な書き方が許容される
if ($true) { Write-Output "Hello"
}

powershell.codeFormatting.newLineAfterCloseBrace (Ver.0.10より使用可)

クローズブレース(})の後は改行するかどうかを設定します。 デフォルトtrueです。

コード例)

# trueの場合
#   } の後は強制的に改行される
if ($true) {
    
}
else {
    
}

# falseの場合
#   } の後改行されないので、cuddled elseが許容される
if ($true) {
    
} else {
    
}

4. スペースに関する設定

powershell.codeFormatting.whitespaceBeforeOpenBrace (Ver.0.10より使用可)

各種キーワードとオープンブレース({)の間にスペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   { の前に1スペースが強制される
if ($true) {
}

# falseの場合
#   以下の様な書き方が許容される
if ($true){
}
if ($true)     {
}

powershell.codeFormatting.whitespaceBeforeOpenParen (Ver.0.10より使用可)

ifelseifwhileswitchなどのキーワードとその条件式(()の部分)の間にスペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   if の後に1スペースが強制される
if ($true) {
}

# falseの場合
#   以下の様な書き方が許容される
if($true) {
}
if      ($true) {
}

powershell.codeFormatting.whitespaceAroundOperator (Ver.0.10より使用可)

二項演算子および代入演算子の両側に1スペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   = や * の間に1スペースが強制される
$y = $x * 2

# falseの場合
#   以下の様な書き方が許容される
$y=$x*2
$y   =   $x   *   2

powershell.codeFormatting.whitespaceAfterSeparator (Ver.0.10より使用可)

セパレーター(,;)の後に1スペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   ;の後に1スペースが強制される
Write-Output "Hello"; Write-Output "World"

# falseの場合
#   以下の様な書き方が許容される。
Write-Output "Hello";Write-Output "World"
Write-Output "Hello";      Write-Output "World"

powershell.codeFormatting.ignoreOneLineBlock (Ver.0.10より使用可)

1行で収まるif文やスクリプトブロックはフォーマットの対象外にするか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   以下の様に1行で収まるif文はコードフォーマットされない
$result = if ($cond) { Write-Output "True" } else { Write-Output "False" }

# falseの場合
#   1行で収まろうともコードフォーマットが強制される
$result = if ($cond) {
    Write-Output "True" 
}
else {
    Write-Output "False" 
}

powershell.codeFormatting.alignPropertyValuePairs (Ver.1.0より使用可)

  • 2017/05/11追加

ハッシュテーブル内でキーと値を縦並びに記述した場合に、=の位置を縦に揃えるか否かを設定します。
デフォルトtrueです。

この設定は主にDSC Cofigurationを記述する際のハッシュテーブルのフォーマットを想定しているそうです。

コード例)

# trueの場合
#   ハッシュテーブル内の = の位置が縦に揃う様にフォーマットされる
#   ネストしたハッシュテーブルにも対応している
$formatTest = @{
    Apple     = 4
    Banana    = 3
    Tangerine = @{
        Orange         = 2
        CornflowerBlue = 6
    }
}

# falseの場合
#   ハッシュテーブル内の = の位置はフォーマットされない
#   powershell.codeFormatting.whitespaceAroundOperator の設定に従う
$formatTest = @{
    Apple = 4
    Banana = 3
    Tangerine = @{
        Orange = 2
        CornflowerBlue = 6
    }
}

最後に

普段からコードフォーマットはIDEに任せっきりにな自分にとってこの機能追加はほんとうに助かります。

GitHubのIssueなどを見る限りまだまだフォーマットに関する設定は増えそうですのでこのエントリの内容は随時更新していきたいと思います。