Windows PowerShell は、[コマンドレット=言葉]で、Windowsパソコンに様々な動きをさせることができるツール。
Graphical User Interface (画像を指やマウスで操作してパソコンに指示を与える方法)では難しい 同種作業一括指示ができるのは、[コマンドプロンプト]と同じ。
スタート 左クリック→ すべてのアプリ クリック→[Windows PowerShell]フォルダ クリック→[Windows PowerShell]ファイル をクリックすれば、[Windows PowerShell]が起動する。
スタート 右クリック→ メニュー 内の[Windows PowerShell]をクリックしても、[Windows PowerShell]が起動する。
スタート 右クリック→ メニュー 内の[ファイル名を指定して実行]クリック→[PowerShell]入力→ OK をクリックしても、[Windows PowerShell]が起動する。



コマンドレット実行例 PowerShellのバージョン確認
[$PSVersionTable]と入力して[Enter]キーを押せば、PowerShellバージョンに関する情報が表示される。


 PowerShellの操作方法だが、コマンドプロンプトと大体同じ。使えるコマンドも同じようになっている。実は、コマンドプロンプトと同じコマンドは「エイリアス」で、PowerShellのネイティブのものは「コマンドレット」と呼ばれる「動詞-対象」形式のもの。
 エイリアス一覧は、下記のように、alias (またはget-alias)コマンドで表示できる。
CommandType Name->Module Name
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
コマンドプロンプト互換のエイリアスだけでなく、Unix互換のものも用意されている。さらに自分でエイリアスを定義することも可能。
Unix互換のエイリアスも含め、大文字と小文字の区別はされない。例えば、ls も LS もLsもフォルダの内容一覧を表表示する。
コマンド履歴を表示するには、F7キーを押す。あるいはhistory (あるいはget-history)コマンドを実行する。
また、上下矢印キーで履歴バッファのコマンドを現在のプロンプト位置に呼び出すこともできる。
場所を移動するとき便利なエクスプローラからのドラッグ&ドロップも可能。(管理者モードでは不可)
PowerShellに組み込まれているコマンドレットだけでなく、一般のWindowsアプリケーション、Javaアプリケーション、WSH(VBScriptなど)やPowerShellのスクリプトなども実行できる。
基本的なコマンドレット
操作 : コマンドレット(エイリアス) 操作 : コマンドレット(エイリアス)
フォルダの内容一覧 : Get-ChildItem(dir, ls)
場所を移動する。 : Set-Location(cd, chdir)
文字列を表示する。 : Write-Host, Write-Output(echo)
テキストファイルの内容を表示する。 : Get-Content(type, cat)
ファイルのコピー : Copy-Item(copy, cp)
ファイルの削除 : Remove-Item(del, rm)
ファイルのリネーム : Rename-Item(ren, mv)
ディレクトリの作成 : New-Item(md, mkdir)
ディレクトリの削除 : Remove-Item(rd, rmdir)
履歴の表示 : Get-History(history)
履歴コマンドの実行 : Invoke-History(F7キー)
エイリアスの表示 : Get-Alias(alias)
ヘルプの表示 : Get-Help(help)
画面のクリア : Clear-Host(cls)
参考
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
PS C:\>
[エイリアス]は、コマンドレットの名前を別名で定義する機能
エイリアス一覧
コマンド名 : エイリアス名 コマンド名 : エイリアス名 コマンド名 : エイリアス名
Add-Content : ac
Add-PSSnapIn : asnp
Clear-Content : clc
Clear-History : clhy
Clear-Host : clear, cls
Clear-Item : cli
Clear-ItemProperty : clp
Clear-Variable : clv
Compare-Object : compare, diff
Connect-PSSession : cnsn
ConvertFrom-String : CFS
Convert-Path : cvpa
Copy-Item : copy, cp, cpi
Copy-ItemProperty : cpp
Disable-PSBreakpoint : dbp
Disconnect-PSSession : dnsn
Enable-PSBreakpoint : ebp
Enter-PSSession : etsn
Exit-PSSession : exsn
Export-Alias : epal
Export-Csv : epcsv
Export-PSSession : epsn
ForEach-Object : %, foreach
Format-Custom : fc
Format-Hex : fhx
Format-List : fl
Format-Table : ft
Format-Wide : fw
Get-Alias : gal
Get-ChildItem : dir, gci, ls
Get-Clipboard : gcb
Get-Command : gcm
Get-ComputerInfo : gin
Get-Content : cat, gc, type
Get-History : ghy, h, history
Get-Item : gi
Get-ItemProperty : gp
Get-ItemPropertyValue : gpv
Get-Job : gjb
Get-Location : gl, pwd
Get-Member : gm
Get-Module : gmo
Get-Process : gps, ps
Get-PSBreakpoint : gbp
Get-PSCallStack : gcs
Get-PSDrive : gdr
Get-PSSession : gsn
Get-PSSnapIn : gsnp
Get-Service : gsv
Get-TimeZone : gtz
Get-Unique : gu
Get-Variable : gv
Get-WmiObject : gwmi
Group-Object : group
help : man
Import-Alias : ipal
Import-Csv : ipcsv
Import-Module : ipmo
Import-PSSession : ipsn
Invoke-Command : icm
Invoke-Expression : iex
Invoke-History : ihy, r
Invoke-Item : ii
Invoke-RestMethod : irm
Invoke-WebRequest : curl, iwr, wget
Invoke-WMIMethod : iwmi
Measure-Object : measure
mkdir : md
Move-Item : mi, move, mv
Move-ItemProperty : mp
New-Alias : nal
New-Item : ni
New-Module : nmo
New-PSDrive : mount, ndr
New-PSSession : nsn
New-PSSessionConfigura… : npssc
New-Variable : nv
Out-GridView : ogv
Out-Host : oh
Out-Printer : lp
Pop-Location : popd
powershell_ise.exe : ise
Push-Location : pushd
Receive-Job : rcjb
Receive-PSSession : rcsn
Remove-Item : del, erase, rd, ri, rm, rmdir
Remove-ItemProperty : rp
Remove-Job : rjb
Remove-Module : rmo
Remove-PSBreakpoint : rbp
Remove-PSDrive : rdr
Remove-PSSession : rsn
Remove-PSSnapin : rsnp
Remove-Variable : rv
Remove-WMIObject : rwmi
Rename-Item : ren, rni
Rename-ItemProperty : rnp
Resolve-Path : rvpa
Resume-Job : rujb
Select-Object : select
Select-String : sls
Set-Alias : sal
Set-Clipboard : scb
Set-Content : sc
Set-Item : si
Set-ItemProperty : sp
Set-Location : cd, chdir, sl
Set-PSBreakpoint : sbp
Set-TimeZone : stz
Set-Variable : set, sv
Set-WMIInstance : swmi
Show-Command : shcm
Sort-Object : sort
Start-Job : sajb
Start-Process : saps, start
Start-Service : sasv
Start-Sleep : sleep
Stop-Job : spjb
Stop-Process : kill, spps
Stop-Service : spsv
Suspend-Job : sujb
Tee-Object : tee
Trace-Command : trcm
Wait-Job : wjb
Where-Object : ?, where
Write-Output : echo, write
〔注:エイリアス名が複数存在する場合は、カンマ区切りで記述した。〕
例: フォルダ内(サブフォルダを含む)のcsvファイルを1つにまとめる
コマンドレット    > Get-ChildItem -Recurse *.csv | Get-Content | Set-Content merge.csv
エイリアス    > ls -R *.csv | cat | sc merge.csv

PowerShellのスクリプトファイル(.ps1)を実行するための準備
PowerShellの初期設定では、PowerShellのスクリプトファイル(拡張子.ps1)を実行することができない。
[Get-ExecutionPolicy]と入力して[Enter]キーを押して、[Restricted(スクリプト実行禁止)]と表示されるようなら、実行ポリシーを変更する必要がある。
[Windows PowerShell(管理者)]で起動し、[Set-ExecutionPolicy RemoteSigned]と入力して[Enter]キーを押せば、実行ポリシーが変更される。
再度、[Get-ExecutionPolicy]と入力して[Enter]キーを押し、[RemoteSigned]と表示されたら、PowerShellのスクリプトファイル(.ps1)実行準備が整ったことが分かる。
PowerShellスクリプトファイル(.ps1)の作成と実行
エディターに[1+2]と記入し、拡張子を「.ps1」として保存する。
[Windows PowerShell]を起動し、スクリプトファイル名を打ち込み、[3]が表示されたら、スクリプトファイル(.ps1)実行は成功!
文字列・ファイルのテキスト検索
都道府県の一覧ファイル[ Prefectures.txt ]から[Select-String]を使って検索する。
[Select-String "都" G:\PC\Prefectures.txt]と入力して[Enter]キーを押せば、画像のような結果が出る。

Powershellの正規表現
「^」:行頭
「$」:行末
「*」:直前文字の0回以上の繰り返し
「+」:直前文字の1回以上の繰り返し
「?」:直前文字の0回か1回の繰り返し
「{n}」:直前の文字のn回の繰り返し
「{n,}」:直前の文字のn回以上の繰り返し
「{n,m}」:直前の文字のn回からm回までの繰り返し
「.」:改行を除く任意の文字
「|」:または(例:x|yはxかyにマッチ)
「[ ]」:[ ]で囲まれた文字のどれかにマッチ
 (例:[xyz」はxかyかzの文字にマッチ)
「^」:[^]で囲まれた文字以外の文字にマッチ
 (例:[^xyz」はx、y、z以外の文字にマッチ)
「( )」:サブパターン
「\d」:数字
「\D」:\d以外
「\s」:空白、改行、タブなどの空白文字
「\S」:\s以外
「\w」:英数字および、アンダーバー
「\W」:\w以外の文字
「\b」:単語境界
「\B」:非単語境界
「\」:\nや\t等のエスケープシーケンス
「[a-z]」:aからzまでのアルファベット
「[A-Z]」:AからZまでのアルファベット
「[0-9]」:0から9までの数字
Prefectures.txt から 「山」で始まる行を検索
 Select-String “^山” G:\PC\Prefectures.txt
または、
 Select-String -Path “G:\PC\Prefectures.txt” -Pattern “^山”
実行結果 〔注:「test\」は「G:\PC\」と、「都道府県.txt」は「Prefectures.txt」と読み替えてください〕
test\Prefectures.txt:6:山形県
test\Prefectures.txt:19:山梨県
test\Prefectures.txt:35:山口県
Prefectures.txt から 「島.県」 を含む行を検索(.は任意の文字)
 Select-String “島.県” G:\PC\Prefectures.txt
または、
 Select-String -Path “G:\PC\Prefectures.txt” -Pattern “島.県”
実行結果
test\Prefectures.txt:32:島根県
Prefectures.txt から 「島」か「鳥」 を含む行を検索(OR検索)
 Select-String “島”,”鳥” G:\PC\Prefectures.txt
または、
 Select-String -Path “G:\PC\Prefectures.txt” -Pattern “島”,”鳥”
実行結果
test\Prefectures.txt:7:福島県
test\Prefectures.txt:31:鳥取県
test\Prefectures.txt:32:島根県
test\Prefectures.txt:34:広島県
test\Prefectures.txt:36:徳島県
test\Prefectures.txt:46:鹿児島県
Prefectures.txt から 「京」と「都」 を含む行を検索(AND検索)
 Select-String “京” G:\PC\Prefectures.txt | Select-String “都”
または、
 Select-String -Path “G:\PC\Prefectures.txt” -Pattern “京” | Select-String “都”
実行結果
test\Prefectures.txt:13:東京都
test\Prefectures.txt:26:京都府
Prefectures.txt から 「県」を含まない行を検索(NOT検索)
 Select-String -Path “G:\PC\Prefectures.txt” -NotMatch -Pattern “県”
または、
 Select-String “県” G:\PC\Prefectures.txt -NotMatch
実行結果
test\Prefectures.txt:1:北海道
test\Prefectures.txt:13:東京都
test\Prefectures.txt:26:京都府
test\Prefectures.txt:27:大阪府
Prefectures.txt から 「道」と「県」を含まない行を検索(NOT検索)
 Select-String -Path “G:\PC\Prefectures.txt” -NotMatch -Pattern “道”,”県”
または、
 Select-String “道”,”県” G:\PC\Prefectures.txt -NotMatch
実行結果
test\Prefectures.txt:13:東京都
test\Prefectures.txt:26:京都府
test\Prefectures.txt:27:大阪府
Prefectures.txt から 「道」と「県」を含まず、「都」を含む行を検索
 Select-String -Path “G:\PC\Prefectures.txt” -NotMatch “道”,”県” | Select-String “都”
または、
 Select-String “都” G:\PC\Prefectures.txt | Select-String “道”,”県” -NotMatch
実行結果
test\Prefectures.txt:13:東京都
test\Prefectures.txt:26:京都府

少し実践的に
たとえばアクセスログファイル「C:\access.log」から 「GET index.html」 を含む行を検索したい場合は、
 Select-String “GET index.html” C:\access.log
さらに、特定のIPアドレスを含む行を検索結果から除きたい場合は、
Select-String “GET index.html” C:\access.log | Select-String “10.90.xx.xx”,”192.168.xx.xx” -notmatch
などとする。
PowerShellのスクリプトをタスクスケジューラから実行 タスクスケジューラライブラリからタスクを作成する際、
[プログラム/スクリプト]に
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe を、
[引数の追加(オプション)]に
-Command c:\test.ps1 を記入する
(c:\test.ps1のところは、実行するスクリプトファイルをフルパスで指定)。
inserted by FC2 system