PowerShell入門
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[PowerShell入門]]
#contents
* 1.基礎 [#dc935575]
** 表示 [#r900c2b4]
コンソールに文字列を表示。
"Hello world"
コマンドレット(後述)を使用した場合。
Write-Host "Hello world"
** コマンドレット [#f8d38376]
PowerShellはコマンドレットと呼ばれる100種類以上のコマンド...
# コマンドレットの一覧表示
Get-Command
# サービスの一覧を表示
Get-Service
# アプリケーション イベントログの最新15個のエントリを表示
Get-EventLog -logName Application -newest 15
** パイプライン [#x583fa85]
コマンドレットが値を返却する場合、.NET Frameworkのオブジ...
# プロセスのリスト(System.Diagnostics.Processオブジェク...
# Where-Objectコマンドレットでハンドル数(handlesプロパ...
# Select-Objectコマンドレットで最初の5つのオブジェクトだ...
Get-Process | Where-Object {$_.handles -gt 500} | Select...
# C:\Windows 配下のフォルダ、ファイルの一覧(System.IO.D...
# ForEach-Objectコマンドレットで配列を列挙しすべてのオブ...
Get-ChildItem C:\Windows | ForEach-Object {$_.FullName}
# 通常の配列に関してもパイプラインを使用可能。
# 重複を取り除き、ソートをかける
@(3,5,10,1,2,1,1,1,2,6,4,4)|Sort-Object|Get-Unique
** コメント [#yae07c13]
# コメント
マルチラインコメント(★2.0)
<#
複数行に渡る
コメントです
#>
** 変数の宣言 [#x861e161]
PowerShellは変数の宣言をしなくても変数を使用可能。以下の...
$a = 1
$a = $b = $c = 1 #複数変数に一度に同じ値を代入する場合
$items = Get-ChildItem # コマンドレットの戻り値を格納
変数の型を指定することは可能。以下のようにするとint型のみ...
[int]$a = 1
あるいは、コマンドレットを用いて$aという変数を宣言するこ...
New-Variable -name a
変数のスコープ
# どのスコープからも読み書き可能
$global:a = 1
# 現在のスコープからのみ読み書き可能
$private:a = 1
# 現在のスクリプトからのみ読み書き可能
$script:a = 1
** 文法チェック [#c93e35dc]
以下を実行することで未定義の変数を参照するとエラーが出る...
Set-PSDebug -strict
スクリプトの実行
デフォルトの実行ポリシーではスクリプトの実行は不許可であ...
Set-ExecutionPolicy RemoteSigned
スクリプト/コマンドを実行するにはコマンドラインで次のよう...
コマンドを実行する
powershell -command {Get-ChildItem C:\}
ファイルを実行する
powershell .\script.ps1
ドットソース(スクリプトの内容をグローバルスコープに読み...
powershell . .\script.ps1
ファイルを実行する(★2.0)
powershell -file script.ps1
PowerShellスクリプトから別のスクリプトを実行する場合(関...
.\script.ps1
. .\script.ps1 # ドットソース
** デバッガの起動 [#bc014c3b]
Set-PSDebug -trace 2
ステップ実行
Set-PSDebug -step
* 2.数値 [#v7d6cda2]
** 数値の表現 [#k695864c]
PowerShellにおける数値は.NET Frameworkの数値を表す構造体...
# int型(System.Int32型)
$int = 1
# System.Double型
$double = 1.001
** 四則演算 [#i58ff1c7]
# 足し算
$i = 1 + 1
# 引き算
$i = 1 - 1
# 掛け算
$i = 1 * 1
# 割り算
$i = 1 / 1
余りと商の求め方
# 割り算の余り
$mod = 7 % 3
# 上記の場合の商
$div = (7 - 7 % 3) / 3
べき乗
# 2の8乗
$i = [math]::Pow(2,8)
** インクリメントとデクリメント [#see23cb2]
# インクリメント
$i++
# デクリメント
$i--
* 3.文字列 [#ze1f8033]
PowerShellにおける文字列は.NET Frameworkの System.String...
** 文字列の表現 [#pf9aeac0]
文字列はシングルクォーテーションかダブルクォーテーション...
$str1 = 'abc'
$str2 = "def"
$str3 = "a`tbc`r`n"
#変数展開(結果は abc def)
$str4 = "$str1 def"
** 文字列操作 [#x6330693]
各種文字列操作
# 結合
$join1 = "aaa" + "bbb"
$join2 = [string]::Join(",",@("aaa","bbb","ccc") )
# 結合(★2.0)
$join2 = @("aaa","bbb","ccc") -join ","
# 分割
$record1 = "aaa,bbb,ccc".Split(",")
# 分割(★2.0)
$record2 = "aaa,bbb,ccc" -split ","
# 長さ
$length = "abcdef".Length
# 切り出し
$substr = "abcd".SubString(0,2) # ab
** 正規表現検索 [#ec13ea54]
# hitした場合はTrue,しなかった場合はFalse
$result = "abcd" -match "cd"
# 最初に見つかった文字列。添え字の1,2…には()内のサブ式に...
$matches[0]
** 正規表現置換 [#ef02044e]
$result = "abc" -replace "c","d"
* 4.配列 [#ecd694e1]
PowerShellにおける配列は.NET Frameworkの System.Arrayクラ...
** 配列の参照と代入 [#o825c9e7]
# 5個の要素を持つ配列宣言と代入
$arr1 = @(1,3,5,7,9)
# 以下のようにも記述できる
$arr1 = 1,3,5,7,9
# 型指定する場合
[int[]]$arr1 = @(1,3,5,7,9)
# 1~10までの要素を持つ配列宣言と代入
$arr2 = @(1..10)
# 1要素の配列宣言と代入
$arr3 = @(1)
$arr3 = ,1
# 空の配列宣言と代入
$arr4 = @()
** 配列の要素の参照と代入 [#rd7d5f55]
# 4番目の要素を参照
$ret = $arr2[3]
# 6~9番目の要素を含んだ配列を参照
$ret = $arr2[5..8]
# 1~4番目と8番目の要素を含んだ配列を参照
$ret = $arr2[0..3+7]
# 配列の末尾の要素を取り出す
$ret = $arr2[-1]
# 5番目の要素に値を代入
$arr2[4] = 11
# 3より小さな要素を含んだ配列を返す
$ret = $arr2 -lt 3
** 配列の個数 [#lec7e621]
$arr1_num = $arr1.Length
** 配列の操作 [#w8582a99]
$arr1 = @(1,3,5,7,9)
$arr2 = @(1..10)
# 配列の末尾に要素を加える(push)
$arr2 += 50
# 配列を結合し新しい配列を作成
$arr5 = $arr1 + $arr2
# 配列にある要素が含まれるかどうか(ここではTrue)
$arr2 -contains 2
* 5.ハッシュ [#aec6b0e1]
PowerShellにおけるハッシュは.NET Frameworkの System.Colle...
** ハッシュ変数の宣言と代入 [#o72105cf]
# 3つの要素を持つハッシュの宣言と代入
$hash1 = @{a=1;b=2;c=3}
# 空のハッシュの宣言と代入
$hash2 = @{}
** ハッシュの要素の参照と代入 [#d8de8bcc]
# 要素の参照
$hash1.a
$hash1["a"]
#要素の代入
$hash1.b = 5
$hash1["b"] = 5
** ハッシュの操作 [#m7a4c0c7]
# ハッシュに要素を追加
$hash1.d = 4
$hash1.Add("e",5)
# ハッシュの要素の削除
$hash1.Remove("a")
# ハッシュのキーの取得
$keys = $hash1.Keys
# ハッシュの値の取得
$values = $hash1.Values
# ハッシュの要素を列挙
foreach ($key in $hash1.Keys)
{
$key + ":" + $hash1[$key]
}
# キーの存在確認
$hash1.Contains("b")
* 6.制御文 [#r028b08f]
** if文 [#wc5f5525]
if (条件) {
}
** if ~ else文 [#xf959f67]
if (条件) {
}
else{
}
** if ~ elsif 文 [#hcaab336]
if (条件) {
}
elseif (条件) {
}
** while/do文 [#yf770f38]
while (条件) {
}
do {
} while (条件)
** for文 [#ub379dbd]
for ($i = 0; $i -lt 5; $i++) {
}
** foreach文 [#z6f5b994]
foreach ($item in $items) {
}
** switch文 [#ua6648f7]
case を書かないのが特徴的。またスクリプトブロックを条件文...
switch ($i) {
1 {"1";break}
2 {"2";break}
{$_ -lt 5} {"5より小さい";break}
default {"default句";break}
}
# ここで$iに配列を指定すると配列要素すべてに対してswitch...
** 比較演算子 [#l21ce49e]
比較演算子の一覧。PowerShellではPerlの文字列比較演算子の...
$num1 -eq $num2 # $num1は$num2と等しい
$num1 -ne $num2 # $num1は$num2は等しくない
$num1 -lt $num2 # $num1は$num2より小さい
$num1 -gt $num2 # $num1は$num2より大きい
$num1 -le $num2 # $num1は$num2以下
$num1 -ge $num2 # $num1は$num2以上
** 論理演算子 [#w05afbf0]
# 論理否定
$ret = -not $true
$ret = !$true
# 論理積
$ret = $true -and $false
# 論理和
$ret = $true -or $false
# 排他的論理和
$ret = $true -xor $false
** ビット演算子 [#b1322129]
# ビット単位の否定
$ret = -bnot 0x14F4
# ビット単位の積
$ret = 0x14F4 -band 0xFF00
# 上記結果を16進数で表示する場合
$ret = (0x14F4 -band 0xFF00).ToString("X")
# ビット単位の和
$ret = 0x14F4 -bor 0xFF00
# ビット単位の排他的論理和
$ret = 0x14F4 -bxor 0xFF00
* 7.サブルーチン [#c2efad4f]
PowerShellのサブルーチンには関数とフィルタがある。関数と...
# 関数宣言の基本
function Get-Test {
return "test"
}
# 注:returnを付けなくても関数内で出力された値はすべて呼...
# 引数を指定する場合
function Get-Test {
param($param1,$param2)
return $param1 + $param2
}
# 引数を指定する場合の簡易的な記述法
function Get-Test($param1,$param2) {
return $param1 + $param2
}
# 引数の型を指定する場合
function Get-Test {
param([string]$param1,[string]$param2)
return $param1 + $param2
}
# 関数の呼び出し方(,区切りではなくスペース区切りであるこ...
Get-Test "引数1" "引数2"
# 引数の順序はパラメータ名(引数名)を指定すると自由に指...
Get-Test -param2 "引数2" -param1 "引数1"
# フィルタ宣言の基本
filter Get-Odd {
if($_ % 2 -eq 1){
return $_
}else{
return
}
}
# フィルタの使用
@(1..10) | Get-Odd
* 8.テキストファイル入出力 [#j1ddff96]
コマンドレットで可能。エンコーディングは日本語環境のデフ...
$str1 = "testテスト"
Set-Content test.txt $str1 # 書き込み
Add-Content test.txt "追記" # 追記
$str2 = Get-Content test.txt # 読み込み
Set-Content test.txt $str1 -encoding UTF8 # UTF-8で書き...
# リダイレクト
Get-Process > test.txt # 書き込み
Get-Process >> test.txt # 追記
Get-Process | Out-File test.txt -encoding UTF8 # エンコ...
* 9.例外 [#b17f598d]
PowerShellで例外が発生すると、デフォルトではエラーメッセ...
# すべてのエラーをトラップ
trap {
}
# エラーの型名を指定してトラップ
trap [System.Management.Automation.CommandNotFoundExcept...
}
# エラーを発生させる
throw "エラー"
throw New-Object NullReferenceException
** 構造化例外処理(★2.0) [#ic75bf12]
# 基本
try{
}
catch{
}
finally{
}
# エラーの型を指定してcatch
try{
}
catch [System.Net.WebException],[System.IO.IOException]{
}
* 10.知っておいたほうがよい文法 [#y83d3ad9]
** 行継続文字 [#w7110d36]
1行にすると長いコードを複数行に書くには行継続文字`を用い...
$items = Get-ChildItem a*,b*,c*,d*,e* `
-force -recurce
ただし以下のような場合は`を使用しなくてもよい
$items =
Get-ChildItem a*,b*,c*,d*,e* -force –recurse
Get-Process |
Where-Object {$_.handles -gt 500} |
Select-Object -first 5
** ステートメント分割 [#s4d5f6c6]
ステートメントを分割するには改行コードもしくは;を使用する...
$i = 1; $j = 5; $k = $i + $j
** ヒア文字列 [#k0acf231]
複数行の文字列を記述する方法。
$str = @"
aaaaaa
bbbbb
cccc
ddd
ee
"@
** .NET Frameworkクラスの利用 [#jc344492]
.NET Frameworkに含まれているクラスのプロパティやメソッド...
# スタティックメンバの使用
[System.Math]::Pow(2,8)
# インスタンスの生成とメソッドの実行
$arrayList = New-Object System.Collections.ArrayList
$arrayList.Add("a")
# コンストラクタがある場合。複数ある場合は配列として指定
$message = New-Object System.Net.Mail.Message from@examp...
# COMオブジェクトの生成
$wshShell = New-Object -com WScript.Shell
# デフォルトで読み込まれていないアセンブリを読み込む
[void] [System.Reflection.Assembly]::LoadWithPartialName...
[System.Windows.Forms.MessageBox]::Show("hello!")
# クラスにどんなメンバがあるかの確認
# インスタンスメンバ
Get-ChildItem | Get-Member
# スタティックメンバ
[math] | Get-Member -static
** キャスト [#gd72ca7e]
-asを使った場合はキャスト失敗時もエラーにならずNullが格納...
$dt = [System.DateTime]"2010/02/13"
$dt = "2010/02/13" -as [System.DateTime]
** ユーザー定義オブジェクト [#g2a7a21e]
PowerShellにはクラスを定義する構文はないが、空のオブジェ...
$obj = New-Object PSObject
$property = New-Object System.Management.Automation.PSNo...
$obj.PSObject.Members.Add($property)
** シェル変数 [#ta1f7f77]
あらかじめ定義されている変数。シェル変数には自動変数(変...
$_ :現在パイプラインにわたっているオブジェクト
$args :関数やスクリプトに与えられたパラメータの配列
$pshome :PowerShellがインストールされているフォルダのフ...
$MyInvocation :スクリプトの実行情報。$myInvocation.Scrip...
$true :true。
$false :false。
$null :null。
** サブ式 [#c81f0eae]
$()内には複数行のコードが記述できる。
$arr = $(1;2;1+4)
** 式モードとコマンドモード [#t95901b4]
PowerShellの構文解析は式モードとコマンドモードがある。式...
$i = 1 + 1 # 式モード
Write-Host aaa # コマンドモード(表示:aaa)
Write-Host aaa bbb # コマンドモード(表示:aaa bbb)
Write-Host 1+1 # コマンドモード(表示:1+1)
Write-Host (1+1) # 式モード(表示:2)
$itemCount = @(Get-ChildItem).Length # 式モード
** 実行演算子とスクリプトブロック [#m3cbb80a]
&演算子を用いるとスクリプトブロック{}の内容を実行できる。...
$script = {$i = 1+6; Write-Host $i}
&$script
& 'C:\Program Files\Internet Explorer\iexplore.exe' # パ...
** フォーマット演算子 [#l3db0bf4]
-f演算子を使うと、.NET Frameworkのカスタム書式が使用可能。
"{0:#,##0}Bytes" -f 38731362 # 表示:38,731,362Bytes
** バイト数の簡易表記 [#jecf659c]
$i = 1KB # 1024が代入される
$i = 1MB # 1048576が代入される
$i = 1GB # 1073741824が代入される
* そのほかの基礎文法最速マスターへのリンク [#m039dc79]
プログラミング基礎文法最速マスターまとめ - ネットサービス...
http://d.hatena.ne.jp/seikenn/20100203/programmingMaster
PowerShellの詳しい機能解説についてはこちらの記事を参照し...
PowerShell的システム管理入門 ―― PowerShell 2.0で始める、...
進化したPowerShell 2.0 ─ @IT
文法や機能について詳しく学びたい方には書籍もあります
Windows PowerShellポケットリファレンス
PowerShellによるWindowsサーバ管理術
元記事:http://blogs.wankuma.com/mutaguchi/archive/2010/0...
終了行:
[[PowerShell入門]]
#contents
* 1.基礎 [#dc935575]
** 表示 [#r900c2b4]
コンソールに文字列を表示。
"Hello world"
コマンドレット(後述)を使用した場合。
Write-Host "Hello world"
** コマンドレット [#f8d38376]
PowerShellはコマンドレットと呼ばれる100種類以上のコマンド...
# コマンドレットの一覧表示
Get-Command
# サービスの一覧を表示
Get-Service
# アプリケーション イベントログの最新15個のエントリを表示
Get-EventLog -logName Application -newest 15
** パイプライン [#x583fa85]
コマンドレットが値を返却する場合、.NET Frameworkのオブジ...
# プロセスのリスト(System.Diagnostics.Processオブジェク...
# Where-Objectコマンドレットでハンドル数(handlesプロパ...
# Select-Objectコマンドレットで最初の5つのオブジェクトだ...
Get-Process | Where-Object {$_.handles -gt 500} | Select...
# C:\Windows 配下のフォルダ、ファイルの一覧(System.IO.D...
# ForEach-Objectコマンドレットで配列を列挙しすべてのオブ...
Get-ChildItem C:\Windows | ForEach-Object {$_.FullName}
# 通常の配列に関してもパイプラインを使用可能。
# 重複を取り除き、ソートをかける
@(3,5,10,1,2,1,1,1,2,6,4,4)|Sort-Object|Get-Unique
** コメント [#yae07c13]
# コメント
マルチラインコメント(★2.0)
<#
複数行に渡る
コメントです
#>
** 変数の宣言 [#x861e161]
PowerShellは変数の宣言をしなくても変数を使用可能。以下の...
$a = 1
$a = $b = $c = 1 #複数変数に一度に同じ値を代入する場合
$items = Get-ChildItem # コマンドレットの戻り値を格納
変数の型を指定することは可能。以下のようにするとint型のみ...
[int]$a = 1
あるいは、コマンドレットを用いて$aという変数を宣言するこ...
New-Variable -name a
変数のスコープ
# どのスコープからも読み書き可能
$global:a = 1
# 現在のスコープからのみ読み書き可能
$private:a = 1
# 現在のスクリプトからのみ読み書き可能
$script:a = 1
** 文法チェック [#c93e35dc]
以下を実行することで未定義の変数を参照するとエラーが出る...
Set-PSDebug -strict
スクリプトの実行
デフォルトの実行ポリシーではスクリプトの実行は不許可であ...
Set-ExecutionPolicy RemoteSigned
スクリプト/コマンドを実行するにはコマンドラインで次のよう...
コマンドを実行する
powershell -command {Get-ChildItem C:\}
ファイルを実行する
powershell .\script.ps1
ドットソース(スクリプトの内容をグローバルスコープに読み...
powershell . .\script.ps1
ファイルを実行する(★2.0)
powershell -file script.ps1
PowerShellスクリプトから別のスクリプトを実行する場合(関...
.\script.ps1
. .\script.ps1 # ドットソース
** デバッガの起動 [#bc014c3b]
Set-PSDebug -trace 2
ステップ実行
Set-PSDebug -step
* 2.数値 [#v7d6cda2]
** 数値の表現 [#k695864c]
PowerShellにおける数値は.NET Frameworkの数値を表す構造体...
# int型(System.Int32型)
$int = 1
# System.Double型
$double = 1.001
** 四則演算 [#i58ff1c7]
# 足し算
$i = 1 + 1
# 引き算
$i = 1 - 1
# 掛け算
$i = 1 * 1
# 割り算
$i = 1 / 1
余りと商の求め方
# 割り算の余り
$mod = 7 % 3
# 上記の場合の商
$div = (7 - 7 % 3) / 3
べき乗
# 2の8乗
$i = [math]::Pow(2,8)
** インクリメントとデクリメント [#see23cb2]
# インクリメント
$i++
# デクリメント
$i--
* 3.文字列 [#ze1f8033]
PowerShellにおける文字列は.NET Frameworkの System.String...
** 文字列の表現 [#pf9aeac0]
文字列はシングルクォーテーションかダブルクォーテーション...
$str1 = 'abc'
$str2 = "def"
$str3 = "a`tbc`r`n"
#変数展開(結果は abc def)
$str4 = "$str1 def"
** 文字列操作 [#x6330693]
各種文字列操作
# 結合
$join1 = "aaa" + "bbb"
$join2 = [string]::Join(",",@("aaa","bbb","ccc") )
# 結合(★2.0)
$join2 = @("aaa","bbb","ccc") -join ","
# 分割
$record1 = "aaa,bbb,ccc".Split(",")
# 分割(★2.0)
$record2 = "aaa,bbb,ccc" -split ","
# 長さ
$length = "abcdef".Length
# 切り出し
$substr = "abcd".SubString(0,2) # ab
** 正規表現検索 [#ec13ea54]
# hitした場合はTrue,しなかった場合はFalse
$result = "abcd" -match "cd"
# 最初に見つかった文字列。添え字の1,2…には()内のサブ式に...
$matches[0]
** 正規表現置換 [#ef02044e]
$result = "abc" -replace "c","d"
* 4.配列 [#ecd694e1]
PowerShellにおける配列は.NET Frameworkの System.Arrayクラ...
** 配列の参照と代入 [#o825c9e7]
# 5個の要素を持つ配列宣言と代入
$arr1 = @(1,3,5,7,9)
# 以下のようにも記述できる
$arr1 = 1,3,5,7,9
# 型指定する場合
[int[]]$arr1 = @(1,3,5,7,9)
# 1~10までの要素を持つ配列宣言と代入
$arr2 = @(1..10)
# 1要素の配列宣言と代入
$arr3 = @(1)
$arr3 = ,1
# 空の配列宣言と代入
$arr4 = @()
** 配列の要素の参照と代入 [#rd7d5f55]
# 4番目の要素を参照
$ret = $arr2[3]
# 6~9番目の要素を含んだ配列を参照
$ret = $arr2[5..8]
# 1~4番目と8番目の要素を含んだ配列を参照
$ret = $arr2[0..3+7]
# 配列の末尾の要素を取り出す
$ret = $arr2[-1]
# 5番目の要素に値を代入
$arr2[4] = 11
# 3より小さな要素を含んだ配列を返す
$ret = $arr2 -lt 3
** 配列の個数 [#lec7e621]
$arr1_num = $arr1.Length
** 配列の操作 [#w8582a99]
$arr1 = @(1,3,5,7,9)
$arr2 = @(1..10)
# 配列の末尾に要素を加える(push)
$arr2 += 50
# 配列を結合し新しい配列を作成
$arr5 = $arr1 + $arr2
# 配列にある要素が含まれるかどうか(ここではTrue)
$arr2 -contains 2
* 5.ハッシュ [#aec6b0e1]
PowerShellにおけるハッシュは.NET Frameworkの System.Colle...
** ハッシュ変数の宣言と代入 [#o72105cf]
# 3つの要素を持つハッシュの宣言と代入
$hash1 = @{a=1;b=2;c=3}
# 空のハッシュの宣言と代入
$hash2 = @{}
** ハッシュの要素の参照と代入 [#d8de8bcc]
# 要素の参照
$hash1.a
$hash1["a"]
#要素の代入
$hash1.b = 5
$hash1["b"] = 5
** ハッシュの操作 [#m7a4c0c7]
# ハッシュに要素を追加
$hash1.d = 4
$hash1.Add("e",5)
# ハッシュの要素の削除
$hash1.Remove("a")
# ハッシュのキーの取得
$keys = $hash1.Keys
# ハッシュの値の取得
$values = $hash1.Values
# ハッシュの要素を列挙
foreach ($key in $hash1.Keys)
{
$key + ":" + $hash1[$key]
}
# キーの存在確認
$hash1.Contains("b")
* 6.制御文 [#r028b08f]
** if文 [#wc5f5525]
if (条件) {
}
** if ~ else文 [#xf959f67]
if (条件) {
}
else{
}
** if ~ elsif 文 [#hcaab336]
if (条件) {
}
elseif (条件) {
}
** while/do文 [#yf770f38]
while (条件) {
}
do {
} while (条件)
** for文 [#ub379dbd]
for ($i = 0; $i -lt 5; $i++) {
}
** foreach文 [#z6f5b994]
foreach ($item in $items) {
}
** switch文 [#ua6648f7]
case を書かないのが特徴的。またスクリプトブロックを条件文...
switch ($i) {
1 {"1";break}
2 {"2";break}
{$_ -lt 5} {"5より小さい";break}
default {"default句";break}
}
# ここで$iに配列を指定すると配列要素すべてに対してswitch...
** 比較演算子 [#l21ce49e]
比較演算子の一覧。PowerShellではPerlの文字列比較演算子の...
$num1 -eq $num2 # $num1は$num2と等しい
$num1 -ne $num2 # $num1は$num2は等しくない
$num1 -lt $num2 # $num1は$num2より小さい
$num1 -gt $num2 # $num1は$num2より大きい
$num1 -le $num2 # $num1は$num2以下
$num1 -ge $num2 # $num1は$num2以上
** 論理演算子 [#w05afbf0]
# 論理否定
$ret = -not $true
$ret = !$true
# 論理積
$ret = $true -and $false
# 論理和
$ret = $true -or $false
# 排他的論理和
$ret = $true -xor $false
** ビット演算子 [#b1322129]
# ビット単位の否定
$ret = -bnot 0x14F4
# ビット単位の積
$ret = 0x14F4 -band 0xFF00
# 上記結果を16進数で表示する場合
$ret = (0x14F4 -band 0xFF00).ToString("X")
# ビット単位の和
$ret = 0x14F4 -bor 0xFF00
# ビット単位の排他的論理和
$ret = 0x14F4 -bxor 0xFF00
* 7.サブルーチン [#c2efad4f]
PowerShellのサブルーチンには関数とフィルタがある。関数と...
# 関数宣言の基本
function Get-Test {
return "test"
}
# 注:returnを付けなくても関数内で出力された値はすべて呼...
# 引数を指定する場合
function Get-Test {
param($param1,$param2)
return $param1 + $param2
}
# 引数を指定する場合の簡易的な記述法
function Get-Test($param1,$param2) {
return $param1 + $param2
}
# 引数の型を指定する場合
function Get-Test {
param([string]$param1,[string]$param2)
return $param1 + $param2
}
# 関数の呼び出し方(,区切りではなくスペース区切りであるこ...
Get-Test "引数1" "引数2"
# 引数の順序はパラメータ名(引数名)を指定すると自由に指...
Get-Test -param2 "引数2" -param1 "引数1"
# フィルタ宣言の基本
filter Get-Odd {
if($_ % 2 -eq 1){
return $_
}else{
return
}
}
# フィルタの使用
@(1..10) | Get-Odd
* 8.テキストファイル入出力 [#j1ddff96]
コマンドレットで可能。エンコーディングは日本語環境のデフ...
$str1 = "testテスト"
Set-Content test.txt $str1 # 書き込み
Add-Content test.txt "追記" # 追記
$str2 = Get-Content test.txt # 読み込み
Set-Content test.txt $str1 -encoding UTF8 # UTF-8で書き...
# リダイレクト
Get-Process > test.txt # 書き込み
Get-Process >> test.txt # 追記
Get-Process | Out-File test.txt -encoding UTF8 # エンコ...
* 9.例外 [#b17f598d]
PowerShellで例外が発生すると、デフォルトではエラーメッセ...
# すべてのエラーをトラップ
trap {
}
# エラーの型名を指定してトラップ
trap [System.Management.Automation.CommandNotFoundExcept...
}
# エラーを発生させる
throw "エラー"
throw New-Object NullReferenceException
** 構造化例外処理(★2.0) [#ic75bf12]
# 基本
try{
}
catch{
}
finally{
}
# エラーの型を指定してcatch
try{
}
catch [System.Net.WebException],[System.IO.IOException]{
}
* 10.知っておいたほうがよい文法 [#y83d3ad9]
** 行継続文字 [#w7110d36]
1行にすると長いコードを複数行に書くには行継続文字`を用い...
$items = Get-ChildItem a*,b*,c*,d*,e* `
-force -recurce
ただし以下のような場合は`を使用しなくてもよい
$items =
Get-ChildItem a*,b*,c*,d*,e* -force –recurse
Get-Process |
Where-Object {$_.handles -gt 500} |
Select-Object -first 5
** ステートメント分割 [#s4d5f6c6]
ステートメントを分割するには改行コードもしくは;を使用する...
$i = 1; $j = 5; $k = $i + $j
** ヒア文字列 [#k0acf231]
複数行の文字列を記述する方法。
$str = @"
aaaaaa
bbbbb
cccc
ddd
ee
"@
** .NET Frameworkクラスの利用 [#jc344492]
.NET Frameworkに含まれているクラスのプロパティやメソッド...
# スタティックメンバの使用
[System.Math]::Pow(2,8)
# インスタンスの生成とメソッドの実行
$arrayList = New-Object System.Collections.ArrayList
$arrayList.Add("a")
# コンストラクタがある場合。複数ある場合は配列として指定
$message = New-Object System.Net.Mail.Message from@examp...
# COMオブジェクトの生成
$wshShell = New-Object -com WScript.Shell
# デフォルトで読み込まれていないアセンブリを読み込む
[void] [System.Reflection.Assembly]::LoadWithPartialName...
[System.Windows.Forms.MessageBox]::Show("hello!")
# クラスにどんなメンバがあるかの確認
# インスタンスメンバ
Get-ChildItem | Get-Member
# スタティックメンバ
[math] | Get-Member -static
** キャスト [#gd72ca7e]
-asを使った場合はキャスト失敗時もエラーにならずNullが格納...
$dt = [System.DateTime]"2010/02/13"
$dt = "2010/02/13" -as [System.DateTime]
** ユーザー定義オブジェクト [#g2a7a21e]
PowerShellにはクラスを定義する構文はないが、空のオブジェ...
$obj = New-Object PSObject
$property = New-Object System.Management.Automation.PSNo...
$obj.PSObject.Members.Add($property)
** シェル変数 [#ta1f7f77]
あらかじめ定義されている変数。シェル変数には自動変数(変...
$_ :現在パイプラインにわたっているオブジェクト
$args :関数やスクリプトに与えられたパラメータの配列
$pshome :PowerShellがインストールされているフォルダのフ...
$MyInvocation :スクリプトの実行情報。$myInvocation.Scrip...
$true :true。
$false :false。
$null :null。
** サブ式 [#c81f0eae]
$()内には複数行のコードが記述できる。
$arr = $(1;2;1+4)
** 式モードとコマンドモード [#t95901b4]
PowerShellの構文解析は式モードとコマンドモードがある。式...
$i = 1 + 1 # 式モード
Write-Host aaa # コマンドモード(表示:aaa)
Write-Host aaa bbb # コマンドモード(表示:aaa bbb)
Write-Host 1+1 # コマンドモード(表示:1+1)
Write-Host (1+1) # 式モード(表示:2)
$itemCount = @(Get-ChildItem).Length # 式モード
** 実行演算子とスクリプトブロック [#m3cbb80a]
&演算子を用いるとスクリプトブロック{}の内容を実行できる。...
$script = {$i = 1+6; Write-Host $i}
&$script
& 'C:\Program Files\Internet Explorer\iexplore.exe' # パ...
** フォーマット演算子 [#l3db0bf4]
-f演算子を使うと、.NET Frameworkのカスタム書式が使用可能。
"{0:#,##0}Bytes" -f 38731362 # 表示:38,731,362Bytes
** バイト数の簡易表記 [#jecf659c]
$i = 1KB # 1024が代入される
$i = 1MB # 1048576が代入される
$i = 1GB # 1073741824が代入される
* そのほかの基礎文法最速マスターへのリンク [#m039dc79]
プログラミング基礎文法最速マスターまとめ - ネットサービス...
http://d.hatena.ne.jp/seikenn/20100203/programmingMaster
PowerShellの詳しい機能解説についてはこちらの記事を参照し...
PowerShell的システム管理入門 ―― PowerShell 2.0で始める、...
進化したPowerShell 2.0 ─ @IT
文法や機能について詳しく学びたい方には書籍もあります
Windows PowerShellポケットリファレンス
PowerShellによるWindowsサーバ管理術
元記事:http://blogs.wankuma.com/mutaguchi/archive/2010/0...
ページ名: