天地有情

PowerShellの変数

PowerShellの変数

■ 変数の命名規則

PowerShellでは変数名を以下の規則に従って命名する必要があります。

● 先頭文字は「$」で始まること
● 2文字目以降は任意の英数字、またはアンダースコア(_)であること

厳密には${~}のように、中カッコで変数名を囲めば任意の文字を利用できます。
例えば以下のような変数名でも構わない。

${Windows PowerShell + .NET Framework}

変数名にはできるだけ内容が類推できる程度に簡潔な名前を付けることが重要です.

■ 変数のデータ型

PowerShellは、多くのスクリプティング言語と同様にデータ型を区別しない言語です。
ただし,厳密にはデータ型を持たないわけではなく、与えられた実データに応じてPowerShellが自動的に
適切なデータ型を与えてくれます。
従って、次のようなコードもPowerShellでは正しい。

$x = 123
$x = "abc"

最初の文では変数$xには整数型が割り当てられ、次に文字列が代入されたところで$xは文字列型となります.
変数のデータ型をGetTypeメソッドで確かめてみると、

=================================================
PS > $x = 123
PS > $x.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
=================================================

System.Int32型が割り当てられていることが確認できます。

そこでPowerShellでは明示的に変数の型を宣言する方法も提供しています。
具体的には、以下のリストのように変数名の先頭に角カッコで囲んだデータ型を明示します。

=================================================
PS > [System.Int32] $x = 10
PS > $x = 13.5
PS > Write-Output $x
14 → 強制的にInt32型にキャスト
PS > $x = "abc"
値 "abc" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
発生場所 行:1 文字:3
+ $x <<<< = "abc"   → Int32型にキャストできないためエラー
=================================================

変数に型属性を明示的に宣言することで、PowerShellは代入する値を強制的にその型にキャスト(変換)
しようと試みます。上の例を見ても分かるように、Int32型として作成された変数に小数点数を格納した場合、
整数にキャストされるし、もしもInt32型に変換できないような(例えば)文字列が渡された場合にはエラーを
発生します。

このようにPowerShellでは「データ型があいまいなままに使用することも、厳密にデータ型を区別して利用する
ことも可能であること」「厳密にデータ型を指定した場合にもできるだけデータをその型に合致するように
自動変換が行われること」を覚えておくといいでしょう。


PowerShellでは.NET Frameworkで提供される型名をそのまま利用できますが、一部のよく利用するデータ型については
エイリアス(別名)が用意されており、より短い型名で表記できます。

====================================
エイリアス   .NET Frameworkの型名
---------------- -------------------
byte      System.Byte
int       System.Int32
long      System.Int64
single,float  System.Single
double     System.Double
decimal     System.Decimal
char      System.Char
bool      System.Boolean
string     System.String
array      System.Array
xml       System.Xml.XmlDocument
type      System.Type
=======================================

■ スコープ

PowerShell の変数はスコープをもっています。 普通に宣言した変数はローカルスコープを持っていて、
関数やブロックの外部からは参照できません。

: を挟んで変数名の前にスコープ名を書くことで、 ローカル以外のスコープの変数を読み書きできます。
(例えば、グローバルスコープの変数 a には、 $global:a という書き方でアクセスする。)

スコープは以下の4種類あります。


表1: スコープの種類


グローバル  global  どこからでも(スクリプトファイル外からでも)読み書き可能

スクリプト  script  同一スクリプトファイル内なら、どこからでも読み書き可能

ローカル   local   現在のブロック内か、子ブロック(ブロック中にさらにブロックを書く)から読み書き可能

プライベート private  現在のブロック内からのみ読み書き可能(子要素も除く)




スポンサーサイト
  1. 2013/06/18(火) 17:56:58|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0

PowerShell の演算子やエスケープ文字など

PowerShell の演算子やエスケープ文字など

■ 算術演算子

算術演算子は四則演算を表す演算子です.

演算子  説明
+     2つの値を加算する
-     一方の値から他方の値を減算する
-     値を負の数値に変換する
*     2つの値を乗算する
/     2つの値で除算を行う
%     除算で発生した余りを返す

また,演算子には次の優先順位があります.演算の順番を変更するには,優先したい演算を「かっこ ()」で括ります.

1.    - (負の数を表すマイナス記号)
2.    *,/,%
3.    +,- (減算を表すマイナス記号)

■ 代入演算子

代入演算子は,値を代入するための演算子です.

演算子  説明
=     指定した値を変数に設定します
+=    指定した値を変数の値に加算するか,指定した値を既存の値に追加します
-=    指定した値を変数の値から減算します
*=    指定した値で変数の値を乗算するか,指定した値を既存の値に追加します
/=    指定した値で変数の値を除算します
%=    指定した値で変数の値を除算し,余りを変数に代入します

■ 論理演算子

論理演算子は与えられた引数を評価し,1つの出力(TrueまたはFalse)を返します.

演算子  説明
-and   論理積
-or     論理和
-not   論理否定
-!     論理否定

■ 比較演算子

比較演算子は与えられた引数を評価し,1つの出力(TrueまたはFalse)を返します.

演算子    説明
-eq      等しい
-ne      等しくない
-gt      より大きい
-ge      以上
-lt      より小さい
-le      以下
-like     ワイルドカードによる比較
-notlike   ワイルドカードによる比較
-match    正規表現による比較
-notmatch   正規表現による比較
-contains   左側のコレクションに右側の値が含まれている 3,4,5 -contains 4 $true
-notcontains 左側のコレクションに右側の値が含まれていない 3,4,5 -contains 4 $true

文字列の比較はデフォルトで大文字小文字を区別しない.
明示的に区別する場合は,比較演算子の前に c をつける(例: -ceq)
明示的に区別しない場合は,比較演算子の前に i をつける(例: -ieq)

■ 置換演算子

指定した値で元の値の一部または全体を置き換えることができます.

演算子   説明
-replace  半角英字の大文字/小文字を区別しないで置換する
-ireplace 半角英字の大文字/小文字を区別しないで置換する
-creplace 半角英字の大文字/小文字を区別して置換する

置換演算子は下記のようにして使用します

"置換対象文字列" -replace "置換したい文字(列)", "置換後の文字(列)"

下記は"Hiro"という文字列を"Hero"へ置換します
PS > "Hiro" -replace "i","e"

■ 型演算子

型演算子は以下の3種類です.

演算子   説明
-is     型の比較を行う
-isnot   型の比較を行う
-as     「-as」は型のキャストを行う演算子です



■ エスケープシーケンス

PowerShell では, タブや改行などの特殊な文字を表すためのエスケープ
(後ろに続く文字に特殊な意味を持たせるもの)に ` (バッククォート,逆アポストロフィ)を使います.

`  は以下の3つの意味で使います.

1. 行末に書くと,その行と次の行を改行なしで繋いだのと同じ意味になる.
2. $, & ` " ' などの特殊な意味を持つ記号の前に書くと,これらの記号をそのまま文字として扱う.
3. ` に続けて以下の表にある文字を書くと,特殊な意味を持つエスケープシーケンスになる.


エスケープ文字  説明
`0        null
`a        alert
`b        backspace
`f        form feed
`n        new line
`r        carriage return
`t        tab
`v        vertical quote

  1. 2013/06/15(土) 13:54:14|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0

PowerShell から外部プログラムを実行する

PowerShell から外部プログラムを実行する

■ PowerShellコマンドレット以外の外部プログラムを実行

コマンドレットとスクリプトだけであらゆる処理が実行できればいいのですが,
実運用では,従来のWindowsアプリやコマンドプロンプト(command,cmd)用の
プログラム(コマンド)と組み合わせて使う方が効率がよい場合があります.

また,長年にわたって蓄積されてきたコマンドプロンプト用の従来のコマンドにも
有用なものや便利なものも多く,それらを利用しない手はありません.

■ 実行(exe)形式のコマンド

Windows標準の外部コマンドをはじめとする exe 実行ファイルであれば,コマンドプロンプトと
同様に,PowerShellプロンプトで実行ファイル名をコマンドとして入力するだけです.

たとえば,Windowsの「電卓」の実体は calc.exe という実行ファイルです.
実行する時は拡張子exeを省略できますので,calc というコマンド名で実行できます.

PS> calc

なお,コマンド名がPowerShellのコマンドレット名と同名,あるいはコマンドレット名の
一部である場合は,PowerShellはコマンドレットを優先して起動しようとします.
このようなケースでexeプログラムを実行するには[パスを明確]に指定しなければなりません.

■ 外部コマンドを実行する時のフィルタ

PowerShellの優れた点は,PowerShellオブジェクトに全く対応していない従来型フィルタプログラム
であってもフィルタとして使用できることです.

ただし,これらのコマンドプロンプト用のフィルタプログラムでは,PowerShellの[オブジェクト]の
受け渡しが出来ません.必然的にテキストデータに変換してパイプラインをつなぐことになります.

たとえば,Get-ChildItemの出力をgrepやsed,awkで処理した場合,オブジェクトとしてのファイル情報は失われ,
Get-ChildItemが表示するテキストデータのみがgrepやsed,awkに引き渡されます.

(※ grepやsed,awkは UNIXツールです.別途ユーザ側で用意する必要があります)

■ PowerShellでコマンドプロンプト用バッチコマンドを実行

コマンドプロンプト用に作成されたバッチコマンドも,パスを指定することでPowerShellスクリプトと同様に
PowerShellプロンプトから実行できます.

たとえば,カレントディレクトリに,test.bat あるいは test.cmd というバッチコマンドがあるとき,
パスを指定して「.\test」で実行されます.(パス . はカレントディレクトリを意味します)
.\ の代わりに ./ としても構いません.

■ コマンドプロンプトの内部コマンドの実行

コマンドプロンプトの内部コマンド … copy,ren,del,dirなどを … を実行する時は,cmd.exeを起動しなければ
なりません.その場合のコマンドライン書式は以下の通りです.

cmd /c '内部コマンドのコマンドライン'

/cは,内部コマンド実行後にcmd.exeを終了するオプションです./cオプション無しで実行すると,単にcmd.exeを起動して,cmd.exeのコマンドプロンプになるだけです.
そのとき,exitコマンドでcmd.exeを終了するとPowerShellプロンプトに戻ります.


■ PowerShellを起動する

逆にコマンドプロンプトからPowerShellのコマンドレットやスクリプトを実行する方法を紹介します.

コマンドレットやPowerShellスクリプトは,PowerShell環境を起動して,PowerShell環境を介して実行
しなければなりません.

PowerShellの実体は,以下のファイルです.

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

(%SystemRoot%は一般的なWindows環境では,「C:\Windows」となります)

PowerShellのパスは環境変数PATHに登録済みですので,コマンドプロンプト,あるいはスタートメニュー
などで,[powershell]と入力するだけで PowerShell を起動できます.
PowerShellのプロンプトを終了する時は,コマンドプロンプトと同様に [exit] と入力します.

コマンドプロンプトのウィンドウを開いたまま,別のウィンドウとしてPowerShellを起動したい時は,
startコマンドを使って以下のように実行します.

start powershell


■ PowerShellコマンドレットをコマンドプロンプトから実行

コマンドプロンプトからPowerShellコマンドレットやPowerShellスクリプトを実行する方法は,
PowerShellプロンプトでコマンドプロンプトの内部コマンドを実行する時とよく似ています.

PowerShellコマンドレットはWindowsのネイティブ実行プログラムではないため,
PowerShell環境内でしか実行できません.

そのため,コマンドプロンプトなどの非PowerShell環境でコマンドレットを実行するには,
PowerShellを起動する必要があり,以下のような書式になります.

powershell -Command  PowerShellで実行するコマンドライン記述

たとえば,Get-ChildItem(省略形gci)をコマンドプロンプトから実行するには,コマンドプロンプトで以下のように
実行します.

powershell -Command gci

PowerShellはGet-ChildItemコマンドレットを実行した後,PowerShellを終了してコマンドプロンプトに戻ります.

ただし,powershellコマンドに複数のオプションを指定する時,他のオプションは必ず-Commandオプションより前に
指定して下さい.-Commandオプションより後ろの部分は,PowerShellが実行するコマンドラインとして解釈されます.

PowerShellを終了せずにPowerShellプロンプトを残すには, -NoExit オプションを使います.

powershell -NoExit -Command gci

■ パイプライン記述

PowerShellのパイプラインを使用する時は,PowerShellで実行するコマンドラインをダブルクォーテーション" "で
くくって下さい.以下のような書式になります.

powershell -Command "PowerShellのコマンドライン"

たとえば,Get-ChildItem(gci)の出力をFormat-Wide(省略形fw)で整形して表示するとき…
powershell -Command "gci | fw"

このようにすれば,"gci | fw"をPowerShell内で実行します.

■ PowerShellスクリプトの実行

PowerShellスクリプトを実行する時も,コマンドレットと同様にpowershellコマンドから実行できます.

powershell -Command PowerShellスクリプトファイル名

たとえば,「Hello! World」と表示するスクリプト Hello.ps1 をカレントディレクトリに作成して実行するとき,
コマンドプロンプトからは以下のように実行します.

powershell -Command .\Hello
  1. 2013/06/14(金) 09:54:43|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0

PowerShell 制御文

PowerShell 制御文

条件分岐構文としてif ~ elseif ~ else,switch ~ case命令,
ループ構文としてfor,foreach,while,do ~ while命令と,おなじみの制御構文が提供されています.

■ if/elseif/else文

if文は,条件分岐をする上で欠かせないものです.

==========================================
if (<条件>)
{
  ifの条件が満たされた場合に実行されるコードブロック
}
elseif (<条件>)
{
  elseifの条件が満たされた場合に実行されるコードブロック
}
else
{
  前の条件がいずれも満たされない場合に実行されるコードブロック
}

==========================================

例:

$x = 100
if($x -ge 80)
{
Write-Output '変数$xは80以上です。'
}
elseif($x -ge 40)
{
Write-Output '変数$xは40以上80未満です。'
}
else
{
Write-Output '変数$xは40未満です。'
}

(注)Write-Output の代わりに Write-Host, Write, echo を使っても良いです.

結果:
変数$xは80以上です。


■ for文
forは基本的なループです.

==========================================
for (<初期化式>; <終了条件>; <増分式>)
{
  繰り返し実行するコードブロック
}

==========================================

例:

for ( $i = 0; $i -lt 5; $i++ )
{
Write-Output ("カウント" + $i)
}

結果:
カウント0
カウント1
カウント2
カウント3
カウント4


■ while文

whileは指定した条件がtrueの場合にループし続けます.

==========================================
while (条件)
{
  繰り返し実行するコードブロック
}

==========================================

例:

$i=0;
$sum=0;
$ary=@(100,120,300)
while($i -lt 3)
{
$sum += $ary[$i]
$i++
}
Write-Output $sum

結果:
520


■ do/while文

while文は最初に評価が行われるループでした.do/while文は最後に評価が行われるループです.
最後の評価が「偽」となった時点でループを終了します.よって,必ず1回は処理の実行を行います.

==========================================
do
{
  繰り返し実行するコードブロック
}
while (条件)

==========================================

例:
$i = 0
do
{
Write-Output $i
$i++
}
while ($i -lt 5)

結果:
0
1
2
3
4

■ foreah文

foreachはコレクション(集合体)に含まれるすべての項目を順番に処理します.

==========================================
foreach ($<項目> in $<コレクション>)
{
  繰り返し実行するコードブロック
}

==========================================
よく知られたコレクションの一つに配列があります.

例(1):

$ary=@(100,120,300)
foreach($dat in $ary)
{
$sum += $dat;
}
Write-Output $sum

結果:
520

例(2):
foreach ( $s in Get-Service )
{
if ($s.Status -eq "running")
{
Write-Output $s.ServiceName
}
}


■ break文とcontinue文

breakはループ制御(foreach,for,while,do)およびswitchのコードブロック内で出現した場合,
そこでそのコードブロックを終了します.


例:
for ( $i = 0; $i -lt 5; $i++ )
{
if ( $i -eq 3 )
{
break
}
Write-Output $i
}

結果:
0
1
2

continueが実行されると,実行フローはループの先頭へ移動し,次の反復処理を行います.
breakと異なるのは,ループを終了しないことです.

例:
for ( $i = 0; $i -lt 10; $i++ )
{
if ( $i % 2 )
{
continue
}
Write-Output $i
}

結果:
0
2
4
6
8

■ switch文

他の言語同様,処理を分岐するほか,パターン照合や反復を行うことも可能です.

==========================================
switch -options (評価する式)
{
<パターン> {実行するコマンドブロック}
<パターン> {実行するコマンドブロック}
   :
default {実行するコマンドブロック}
}

==========================================

例(1):
$Year = 2013
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳" }
2014 { Write-Output "午" }
}

結果:


例(2):
$Year = 2013
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳" }
2013 { Write-Output "This Year!"}
2014 { Write-Output "午" }
}

結果:

This Year!

例(3):
$Year = 2013
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳"; break }
2013 { Write-Output "This Year!"}
2014 { Write-Output "午" }
}

結果:


例(4):
$Year = 2011
switch ( $Year )
{
2012 { Write-Output "辰" }
2013 { Write-Output "巳" }
2014 { Write-Output "午" }
default { Write-Output "一致パターンなし" }
}

結果:
一致パターンなし

例(5):
switch -case ("SCRIPT")
{
"script" {"小文字の方に一致"}
"SCRIPT" {"大文字の方に一致"}
default {"一致なし"}
}

結果:
大文字の方に一致

通常,switch文は大文字と小文字を区別しません.大文字と小文字を区別するには,
-casesensitiveオプションを使用します


例(6):
switch -wildcard ("Windows")
{
"W*" { Write-Output "Wで始まる"}
"*s" { Write-Output "sで終わる" }
}

結果:
Wで始まる
sで終わる

-wildcardオプションを使用すると,ワイルドカードによるパターン一致の評価を行うことができます.

例(7):
switch -regex ("Windows")
{
"(^W)" {"Windows"}
}

結果:
Windows

-regexオプションを使用すると,正規表現によるパターン一致の評価を行うことができます.
  1. 2013/06/13(木) 07:47:49|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0

PowerShell の関数定義

PowerShell の関数定義

一連の処理(プログラム)に名前を付けて,コマンドレッド(cmdlet)のように
使えるようにするのが関数(Function)です.

あらかじめシステム側で定義済みの関数名の種類とユーザ側で関数を定義する方法について説明します.

■システム側で定義済みの関数名

一覧を表示させるには次のようにコマンドラインで入力します.

PS> Get-ChaildItem function:
あるいはエイリアス名を使って
PS> ls function: または dir function:

代表的な関数名を挙げておきます.
help
mkdir
more
prompt
cd..
cd\
A: ~ Z:


■ユーザ側で関数を定義する

先ずは関数の構文規則をまとめておきます.

==================================================
function 関数名 [(引数[=デフォルト値] , ...)]
{
関数本体
[return 戻り値]
}
実行は
関数名 引数1 引数2 ~ のように空白区切りとします.
==================================================

なお,引数が存在しない(あるいは引数名を明示的に宣言しない)場合には,関数名の後ろのカッコは省略できます.

簡単な例として三角形の面積を求める Triangle関数 で説明します.
※ 変数 $width=底辺,$height=高さ

(1)
   function Triangle($width=1,$height=1){
   return $width * $height / 2
   }
   実行: Triangle 5 7 → 17.5
   引数値が与えられなかった場合はデフォルト値が作用します.
   実行: Triangle  → 0.5

(2)
   引数を明示的に指定した呼び出しもできます.
   実行: Triangle -width 5 -height 7
   この形式では引数の指定に順番は関係ありません.

(3)
   パラメータ文 param を使うこともできます.
   function Triangle{
   param($width,$height)
   return $width * $height / 2
   }
   実行: Triangle 5 7 → 17.5

(4)
   先述は $width や $height のように引数に名前がありましたが,
   名前なし引数を使って定義します.
   
   function Triangle{
   return $args[0] * $args[1] / 2
   }
   実行: Triangle 5 7 → 17.5
   引数は自動変数 $args(配列)を介して取得することができます.
   
   ※ (1)~(4)のいずれか一つをシェルファイル(sample01.ps1)に記述した場合は
     PS> ./sample01.ps1
     ps> Triangle 5 7
   のようにして実行します.残念ながら次のようなエラーメッセージが表示されます.
   
   ----------------------------------------------------------------------------------
   用語 'Triangle'は、コマンドレット、関数、スクリプト ファイル、または操作可能な
   プログラムの名前として認識されません。....
   ----------------------------------------------------------------------------------
   
   この問題を解決するには[変数のスコープ](変数の有効範囲)を意識する必要があります.
   詳細は後述しますが, Global:Triangle のように[グローバル・スコープ]に設定します.
   (4)の例で示せば,
   
   function Global:Triangle{
   return $args[0] * $args[1] / 2
   }
   
   実行:
   PS> ./sample01.ps1
   PS Triangle 5 7  → 17.5
   
(5)変数のスコープ
   関数が登場すると,いよいよ意識しなければならなくなるのが変数のスコープです.
   スコープとは,プログラム中での変数の有効範囲のことです.
   つぎの3種のスコープがあります.
   
   ● すべてのスコープから参照できる[グローバル・スコープ](Global:)
   ● 関数内部でのみ有効な[ローカル・スコープ](Local:)
   ● スクリプトファイル内のすべてのスコープから参照可能な[スクリプト・スコープ
   
   (4)で述べたエラーは sample01.ps1 の中で定義された Triangle 関数は,スクリプト・スコープ
   に属するため,スクリプト外のスコープからは参照できないことから起こるのが原因でした.
   
(6)スコープ修飾子
   このスコープ修飾子は変数に対しても有効です.
   $Global:width (グローバル変数)
   $Local:width(ローカル変数)
   
(7)PowerShell ではプロファイルという機能を提供しており,起動時に決められたスクリプトを読み込み
   実行することができます.よく使う関数やエイリアスなどは,このプロファイル機能を利用して登録
   しておくと便利です.
   なお,profile.ps1 の内容はすべて[グローバル・スコープ]で登録されます.従って,
   スコープ修飾子によるスコープ宣言を行う必要はありません.

   
   
   
  1. 2013/06/11(火) 13:31:15|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0

PowerShell ツマミある記 TOP20

PowerShell ツマミある記 TOP20
最近の Windows には新しいコマンドシェルとして UNIX のシェルに匹敵する PowerShell が標準搭載されています.

PowerShellは,高機能なコマンドライン操作体系と本格的なプログラミングに耐えられる言語体系を両立し,
コマンドライン操作とスクリプトに対して同じ環境を提供します.

この記事では特徴的な20項目を順不同で列挙します.

 1: PowerShellは次の2つの機能を提供します.
 
  ● 対話式シェルによるオペレーション
  ● シェルスクリプトの実行(スクリプト言語)
 
  PoweShellでは,シェルスクリプトは[.ps1ファイル]として記述して実行しますが,
  その内容は対話式シェルで直接入力しても実行できるし,対話式シェルで実行する一連のコマンドを
  1つのシェルスクリプトとして記述し,1つのコマンドとして実行することもできる.

 2: 実行する命令をコマンドでなく,コマンドレッドと呼びます.

  約130種以上の cmdlet が用意され,命名規則があり[動詞ー名詞(目的語)]の形式となっている.
  cmdlet の先頭文字は大文字,エイリアス名は小文字とするのが PowerShell のルールのようであるが,
  実行にあたっては大文字,小文字は区別されない.

  ・Get-Command で一覧が取得できる.
 
  cmdlet の一部を挙げる(エイリアスについては 4項 を参照)

ps01

 3: 大文字,小文字は区別されません.

  前述したとおり cmdlet の実行に際しては大文字,小文字は区別されない.
 
 4: Alias機能があります.

  PowerShell の cmdlet は[動詞ー名詞(目的語)]の一貫性のある命名規則に沿っていることから
  直感てきに理解しやすく,覚えやすくなっているのが特徴であるが,次のような難点もある.

  ● 名前が冗長であるため(後述のTAB補完機能を利用が可能)タイピングが面倒
  ● コマンドプロンプトに馴れてきたユーザにとっては新規にコマンドを覚える必要がある

  しかし心配することはない. PowerShell では,主要な cmdlet に対してエイリアス(別名)
  提供している.

  ・PS> Get-Alias でエイリアスの一覧が取得できる.

  ・自分で登録するには,
  PS> Set-Alias r Remove-Item のように記述する.

  ・エイリアスの削除は,
  PS> Remove-Item Alias:r

 5: パス区切りとオプション記号

  ファイルのパス区切りは /(スラシュ)である.ただし,従来からの \(逆スラシュ)もつかえる.
  なお,オプション指定は -(マイナス)である.

 6: 入出力リダイレクト機能があります.
(標準入力,標準出力,標準エラー)


  通常の入出力は標準入力(キーボード),標準出力および標準エラー(CRTディスプレイ)が使われますが
  リダイレクトは標準入力出力先を変更する操作で[>]や[<]の記号が使われる.

  ・PS> cat *.txt > sample.txt (> リダイレクト)
  ・PS> cat *.txt >> sample.txt (>> 追加リダイレクト)
  ・PS> command 2> error.log (2と>の間はスペースをあけてはなりません)

 7: パイプ機能があります.

  システムには,2つのコマンドを一緒に効率よく連結する機能がある.
  この連結はパイプ(pipe)機能と呼ばれ,あるコマンドの出力を受け取り,直接に別のコマンドへ入力として
  与えることを可能にします.

  パイプ機能は2つのコマンド間に文字 [](縦棒) を挿入することで設定されます.
  ・PS> Get-ChildItem | Format-List *

 8: ヒストリ機能があります.(コマンドの再実行)

  ヒストリの表示は Get-History(Alias: h,history,ghy)コマンドを使います.
  このコマンドは,最後に実行された 32 個のコマンドを取得します.

  既定では,各コマンドと ID が表示されます.ID は実行された順番を示します.
  また,履歴からコマンドを実行するにはInvoke-History(Alias: r,ihy)コマンドを使います.

  Clear-History(Alias:clhy)コマンドは履歴からエントリを削除します.

  ビジュアル操作は次の通りです.
 
  ・ ↑キー 後方表示(一つ前の行)
  ・ ↓キー 前方表示(一つ次の行)
  ・ F7キー ヒストリ ウインドウで選択実行
  ・ F8キー 一つ以上の文字を入力してF8を押すと該当検索可
  ・ F9キー ヒストリIDを入力して実行

 9: コマンドラインの入力には補完機能があります.

  入力途中のコマンド名を補完する[タブ補完機能]が用意されている.

  入力途中で[Tab]キーを押すと,押すたびに正しい候補が表示され,[Enter]キーを押すと
  確定させることができる.
 
10: コマンドラインでの計算機能があります.(電卓代用)

  コマンドラインに[20*5+10/3]などのように数式を入力すると,演算の優先順位を正しく評価する.

  さらに,次のように入力すると算術関数が使える.
  【 [math]::算術関数名

  例えば,10の平方根は [math]::sqrt(10) で計算できる.
 
  算術関数名を挙げておきます.
  定数:
        E , PI
  三角関数:
        Sin , Asin , Sinh
        Cos , Acos , Cosh
        Tan , Atan , Tanh
  数式処理:
        Max/Min , Celing/Floor , Round , Sqrt , Pow ,Exp
  対数  :
        Log , Log10
 
11: ヒア・ドキュメント機能があります.
(記号 @" <改行> ~ <改行> "@)


  例
  PS> @"
  >> Hello
  >> World
  >> Bye
  >> "@
  (>> は2次プロンプトを示す)
 
12: コメントは[#]記号で表します.

  ● シングルラインコメント(#)
  行の先頭に#が有ると,その行は行末までコメントとなる.
  また,行の途中に#があると,それ以降は行末までコメントとなる.
 
  ● マルチラインコメント(<# ~ #>)
  <#
  複数行に渡る
  コメントです
  #>
 
13: プロフィル機能があります.(profile.ps1)

  ● システムプロフィル
    C:\Windows\System32\WindowsPowerShell\v1.0\Examples\profile.ps1
    コマンドラインで $profile で確認できる
    (主に,エイリアス名が登録されている)
 
  ● ユーザプロフィル
    C:\Users\hayato\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    (ユーザ関数やエイリアス名などが登録できる)
 
14: 数値,文字列,などはオブジェクトとして扱われます.

  UNIXシェルやWindowsのコマンド・プロンプトで実行されるコマンドの多くは,その実行結果を
  テキストデータとして返す.これに対して PowerShell ではコマンド(cmdlet)の実行結果は
  すべてオブジェクトである.これはメソッドやプロパティをもったオブジェクトである.
 
15: 制御文が用意されています.

  ● if ~ elseif ~ else
     if(条件){....}
     
     if(条件){....}
     else{....}
     
     if(条件){....}
     elseif(条件){....}
     
  ● while(条件){....}
 
  ● do{....}while(条件)
 
  ● for(初期値式 ; 終了条件 ; 増分式){....}
 
  ● foreach(一時変数 in 配列){....}
 
  ● switch(選択変数){
     1 {....}
     2 {....}
     3 {....}
     default {....}
   }
 
16: 関数(function)が定義できます.

  ● function 関数名[([引数[=デフォルト値])] {
    関数本体の定義
    [return 戻り値]
    }
 
  ● 関数の呼び出し方
     関数名 引数1 引数2 ... (スペースで区切る)
 
17: 実行のシミュレーション機能あります.( -WhatIf)

  ワイルドカードでファイル名を指定して削除を実行する場合 -WhatIf オプションを付加すると
  シミュレーション実行してくれる.安全の確認がとる.

  -WhatIf を外せば削除されます.

  例: PS> rm *.png *.bmp -WhatIF
 
18: 実行の確認メッセージの表示機能.(-Confirm)

  rm *.tmp *.bak 削除しても特にメッセージは表示されない.確認メッセージを表示させるには
  -Confirm オプションを付加する.

  例: PS> rm *.png *.bmp -Confirm
 
19: プロバイダ(ドライブのイメージ)とは

  PowerShell は操作対象の世界を意味するプロバイダという新しい概念があります.
  今まで操作の対象がファイルやディレクトリだったのは,ファイルシステムが既定のプロバイダ
  だったからです.

  プロバイダを切り替えることによって,同じ cmdlet でファイルやディレクトリだけでなく,
  レジストリや環境変数なども操作できます.プロバイダは従来のファイルシステムのドライブ
  と似た感覚で使用できます.
 
  プロバイダを一覧するには Get-PSProvider のようにします.
 
ps04
 
20: スクリプトファイル の実行

  デフォルトの実行ポリシーではスクリプトの実行は不許可であるため,以下のようにポリシーを変更しておく.
  一般的には RemoteSigned にするとよいでしょう.
 
  (RemoteSignedはローカルにあるスクリプトファイルは無条件で実行可,リモートにある
  スクリプトファイルは署名付きのもののみ実行可)
 
  ● 実行ポリシーを設定する
  PS> Set-ExecutionPolicy RemoteSigned (通常は RemoteSigned を指定)
    (アイコン→プロパティ→「管理者として実行」に設定要)
   
   ※ 設定内容はレジストリに書き込まれるので操作は初回のみでよい.

  ● 実行ポリシーを確認する
  PS> Get-ExecutionPolicy
 
ps02

 スクリプト/コマンドを実行するにはコマンドラインで次のようにする.

 ■コマンドを実行する[()内はAlias名]
 PS> Get-ChildItem(ls) C:\

 ■ファイルを実行する
 PS> ./script[.ps1 ] #.ps1 は省略可.

 ※ <実行に関する注意>
  (1) PowerShellはカレント・フォルダを検索しない
  (2) スクリプト[実行ポリシー]が設定してあること

  1. 2013/06/09(日) 10:57:43|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0