Windows PowerShell の基本


 [Home]  [Index] 投稿 2015/04/19


 

 PowerShell を起動するには

Windows PowerShell は "C:\Windows\System32\WindowsPowerShell\v1.0" の下にあります。Windows 7 ではスタートメニューからも起動できますが、Windows 8.x ではスタート画面にピン留めしたほうが便利です。 powershell.exe は一般用、powershell_ise.exe は開発用として便利です。 ところで、このディレクトリのパスに v1.0 という文字が含まれていますが、実際に入っているのはもっと新しいバージョンのはずです。

PowerShell ISE

[Top]

 

 スクリプトを実行できるようにするには

PowerShell はデフォルトでの実行ポリシーが "Restricted" になっています。これはすべてのスクリプトの実行が禁止されている状態です(画面から入力したコマンドは実行できる)。

ポリシーは4種類あって下のようになっています。

現在のポリシーがどうなっているかは Get-ExecutionPolicy で知ることができます。

※ PowerShell のコマンド(コマンドレット)は大文字と小文字を区別しないので、get-executionpolicy としても問題ありません。

Get-ExecutionPolicy
Restricted

これ (Restricted) を解除するには、管理者として PowerShell を起動して Set-ExecutionPolicy RemoteSigned を実行します。 管理者でない場合は、この制限を解除することはできません。ただ、ファイルに保存されたスクリプトが実行できないだけで、PowerShell の画面にスクリプトをコピー&貼り付ければ実行できます。

[Top]

 

 バージョンの確認

PowerShell のフォルダのパス名には "v1.0" が含まれていますが、実際のバージョンは普通 1.0 ではありません。実際のバージョンは、以下のようにして確認できます。

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

あるいは、Get-Host コマンドを実行してもバージョンが表示されます。

PS C:\> Get-Host


Name             : ConsoleHost
Version          : 4.0
InstanceId       : 1257afa1-24ac-44be-8562-9ac7c9cd2f12
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : ja-JP
CurrentUICulture : ja-JP
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

[Top]

 

 プロファイル

「プロファイル」とは PowerShell を開いたとき、自動的に実行されるスクリプトファイルです。その場所とファイル名ですが、組み込み変数 $Profile を内容を表示すると知ることができます。ただ、そのファイルが実際に存在しないことがあるので、普通はユーザが作成します。

※ 必要なければ以下の操作は不要です。

プロファイルの場所の例

PS C:\> $profile
C:\Users\user\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

ドキュメントフォルダへ移動し、WindowsPowerShell フォルダを作成します(ない場合)。エディタで Microsoft.PowerShell_profile.ps1 を作成して保存します。内容はユーザが起動時に実行させたいコマンドレットを記述します。下の例は、起動後の場所を C:\Script にするものです。

cd c:\Script

[Top]


 ヘルプの表示

PowerShell のヘルプは、Get-Help で表示できます。Get-Help の代わりに help を使っても同じです。help は Get-Help のエイリアス(別名)です。Get-Help とだけ入力すると PowerShell のヘルプシステムの説明が表示されます。Get-Help の後にコマンド名を付けるとそのコマンドの説明が表示されます。次の例は、Get-Host コマンドレットのヘルプを表示したものです。

-full オプションを付けるとより詳しいヘルプが表示されます。

-online オプションを付けるとオンラインのヘルプをブラウザに表示します。

Update-Help コマンドを実行するとヘルプの更新を行います。また、ヘルプの一部しか表示されない場合も同様に Update-Help を実行します。

PS C:\> get-help get-host

名前
    Get-Host

構文
    Get-Host  []


エイリアス
    なし


注釈
    Get-Help を実行しましたが、このコンピューターにこのコマンドレットのヘルプ ファイルは見つかりませんでした。ヘルプの
    一部だけが表示されています。
        -- このコマンドレットを含むモジュールのヘルプ ファイルをダウンロードしてインストールするには、Update-Help を使
    用してください。
        -- このコマンドレットのヘルプ トピックをオンラインで確認するには、「Get-Help Get-Host -Online」と入力するか、
           http://go.microsoft.com/fwlink/?LinkID=113318 を参照してください。

Get-Help コマンドのパラメータにはワイルドカードも使用できます。下の例は、Write-* を指定してコマンドの候補を表示したものです。(Get-Help の代わりにエイリアスの help を使用しています)

PS C:\> help write-*

Name                              Category  Module                    Synopsis
----                              --------  ------                    --------
Write-EventLog                    Cmdlet    Microsoft.PowerShell.M... ...
Write-Debug                       Cmdlet    Microsoft.PowerShell.U... ...
Write-Error                       Cmdlet    Microsoft.PowerShell.U... ...
Write-Host                        Cmdlet    Microsoft.PowerShell.U... ...
Write-Output                      Cmdlet    Microsoft.PowerShell.U... ...
Write-Progress                    Cmdlet    Microsoft.PowerShell.U... ...
Write-Verbose                     Cmdlet    Microsoft.PowerShell.U... ...
Write-Warning                     Cmdlet    Microsoft.PowerShell.U... ...
Write-DtcTransactionsTraceSession Function  MsDtc                     ...
Write-PrinterNfcTag               Function  PrintManagement           ...
Write-VolumeCache                 Function  Storage                   ...

ヘルプはブラウザにも表示できます。その方が見やすく詳しい内容が表示されます。ブラウザに表示するには -online オプションを追加します。

get-help new-object -online

[Top]

 

 基本コマンドとエイリアス

概要

PowerShell のコマンドは「コマンドレット」と呼ばれ、動詞+オブジェクトの形式をしています。例えば、Get-Host のような形式です。実際にコマンドを入力するときは、大文字小文字の区別をしないので、全部小文字あるいは大文字でも構いません。

また、既存のシステムのコマンドに合わせた「エイリアス」が定義されています。例えば、Get-Date の代わりに date を使うという具合です。

PS C:\> get-date

2015年4月19日 17:44:47


PS C:\> date

2015年4月19日 17:44:48

エイリアス一覧は Get-Alias (あるいは alias) コマンドで知ることができます。

PS C:\> get-alias

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           asnp -> Add-PSSnapin
Alias           cat -> Get-Content
Alias           cd -> Set-Location
Alias           chdir -> Set-Location
Alias           clc -> Clear-Content
Alias           clear -> Clear-Host
Alias           clhy -> Clear-History
Alias           cli -> Clear-Item
  .....

たくさんあるので絞り込みたいときはワイルドカードを使用できます。

PS C:\> alias t*

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Alias           tee -> Tee-Object
Alias           trcm -> Trace-Command
Alias           type -> Get-Content

[Top]


画面に表示するには

PowerShell 画面に文字列を表示するには Write-Host や Write-Output (エイリアスは echo) を使います。ただし、変数あるいは文字列のみだけ入力するとその内容が表示されます。

PS C:\> "そのまま表示される。"
そのまま表示される。
PS C:\> $x = "変数の内容"
PS C:\> $x
変数の内容
PS C:\>

Write-Host と Write-Output の違いですが、改行の入り方です。write-host では最後だけ改行が入りますが、write-output では項目ごとに改行が入ります。項目の区切りは、空白でもカンマでもかまいません。文字列は引用符で囲む必要はありません。

PS C:\> write-host "An" "Apple"
An Apple
PS C:\> write-host "An", "Apple"
An Apple
PS C:\>
PS C:\> write-host An apple
An apple
PS C:\> write-host An   apple
An apple
PS C:\> write-output An apple
An
apple
PS C:\> write-output "An","Apple"
An
Apple
PS C:\> write-output "An" "Apple"
An
Apple
PS C:\> write-output An Apple
An
Apple
PS C:\> write-output An,Apple
An
Apple

配列でも同様に改行が適用されます。

PS C:\> $a = 1,2,3,4
PS C:\> write-host $a
1 2 3 4
PS C:\> write-output $a
1
2
3
4
PS C:\>

(注意) 演算子は演算子と解釈されません。

PS C:\> write-host 1+2
1+2
PS C:\> write-output 1+2
1+2

[Top]


ディレクトリの内容一覧を表示するには

コマンドプロンプト同様に dir コマンド (ls, gci も) が使用できます。

PS C:\> dir c:\windows


    ディレクトリ: C:\windows


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2013/08/23      0:36            addins
d----        2013/08/23      0:36            ADFS
d----        2015/04/18     16:39            AppCompat
d----        2015/04/17      7:18            apppatch
d----        2015/04/11     18:44            AppReadiness
d-r-s        2015/04/19     11:17            assembly

dir は下のようにすると、Get-ChildItem のエイリアスであることがわかります。

PS C:\> get-alias dir

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Alias           dir -> Get-ChildItem

Get-ChildItem はディレクトリ一覧の取得だけでなく、様々なコンテナ (レジストリや .NET のコレクション) の要素の一覧の取得に使用できます。一般的な書式は下の通りです。

Get-ChildItem <String[]> [options]

よく使われると思われるオプションを下記に示します。

[Top]


ファイルを削除するには

Remove-Item コマンドレットを使用します。エイリアスは del または rm または erase です。このコマンドは、ファイルだけでなく一般にオブジェクトを削除できます。具体的には、ファイル、ディレクトリ、レジストリ キー、変数、エイリアス、関数などです。

一般的な書式は

Remove-Item [-Path] <String[]> [options]

です。よく使われる (と思われる) オプションを下記に示します。

[Top]


ファイルをリネームするには

Rename-Item コマンドレットを使用します。エイリアスは ren または ri です。

一般的な書式は

Rename-Item [-Path] <String> [-NewName] <String> [options]

です。よく使われる (と思われる) オプションを下記に示します。

[Top]


ファイルをコピーするには

Copy-Item コマンドレットを使用します。エイリアスは copy または cp または cpi です。

一般的な書式は

Copy-Item [-Path] <String[]> [[-Destination] <String> ] [options]

です。よく使われる (と思われる) オプションを下記に示します。

[Top]


ファイルを移動するには

Move-Item コマンドレットを使用します。エイリアスは move または mv です。

一般的な書式は

Move-Item [-Path] <String[]> [[-Destination] <String> ] [options]

です。よく使われる (と思われる) オプションを下記に示します。

[Top]


テキストファイルの内容を表示するには

Get-Content コマンドレットを使用します。エイリアスは type または cat です。

一般的な書式は

Get-Content [-Path] <String[]> [options]

です。よく使われる (と思われる) オプションを下記に示します。

[Top]


ディレクトリを作成するには

New-Item コマンドレットを使用します。エイリアスは mkdir または md です。

一般的な書式は

New-Item [-Path] <string[]> [options]

です。よく使われる (と思われる) オプションを下記に示します。

[Top]


ディレクトリを削除するには

Remove-Item コマンドレットを使用します。エイリアスは rmdir です。

[Top]


ディレクトリをリネームするには

Rename-Item コマンドレットを使用します。エイリアスは ri, ren です。

[Top]


場所を移動するには

場所を移動するにはSet-Location コマンドレットを使用します。エイリアスは chdir, cd です。

一般的な書式は

Set-Location [[-Path] ] [options]

です。使用例を下に示します。コマンドプロンプト同様に "c:" などと入力してドライブを変更することもできます。

Set-Location d:
Set-Location c:\windows
c:

場所を移動する前に、現在の場所を覚えておきたい場合は、Push-Location (エイリアスは pushd) を使います。元の場所に戻る場合は、Pop-Location (エイリアスは popd) を使います。

PS C:\> Push-Location c:\temp

PS C:\temp> Pop-Location

PS C:\>

[Top]


画面をクリアするには

Clear-Host コマンドレットを使用します。エイリアスは cls です。

cls

[Top]


コマンド履歴を表示するには

Get-History コマンドレットを使用します。エイリアスは history です。また、コマンドプロンプト同様、F7 キーを押すと履歴一覧が表示できます。

[Top]


画面に文字列を出力するには

Write-Host コマンドレットあるいは Write-Output コマンドレットを使います。Write-Output のエイリアスは echo です。

PS C:\> Write-Host Hello
Hello

※ 変数やコマンドレットの実行結果は echo なしで表示できます。

PS C:\> $x =12345
PS C:\> $x
12345
PS C:\>

Write-Host と Write-Output の違いですが、複数の項目を表示したとき横に表示するか縦に表示するかの違いがあります。

PS C:\> $a = @(1,2,3)
PS C:\> write-host $a
1 2 3
PS C:\> write-output $a
1
2
3

[Top]


キーボードから文字列を入力するには

Read-Host コマンドレットを使います。

PS C:\powershell> $x = read-host
abcd
PS C:\powershell> echo $x
abcd

[Top]



Unix コマンドの機能をコマンドレットで実現するには

下記のページに詳しい解説があります。

「 Linux ならできるのに、だから Windows は...」「それ PowerShell でできるよ」

ざっくり内容を紹介すると下のような感じです。

[Top]

 

 リダイレクトとパイプライン

Unix シェルと同じようにリダイレクト > , 2> およびパイプライン | が使えます。(注意) < は予約されていますが使用できません。

get-childitem c:\work > work.txt
get-childitem c:\work | select-string "Y"

[Top]

 

プロンプト

コマンドプロンプトを変更するには function prompt { } を実行します。{ } 内に $null を指定するとデフォルトのプロンプト "PS>" が表示されます。$null の代わりにコマンドレットや文字列を使って各種のプロンプトを設定できます。

PS C:\> function prompt { $null }
PS>

場所を表示するプロンプトに戻すには下のようにします。

PS>>function prompt { "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) " }
PS C:\>

[Top]

 

画面の設定

PowerShell のウィンドウのタイトルバー左のアイコンをクリックするとシステムメニューが表示されます。一番下の「プロパティ」メニューを実行すると下のようなダイアログが開きます。このダイアログで画面のサイズ、色など各種設定を行うことができます。

[Top]

 

 トラブルシュート

 

 役に立つウェブページ