PowerShellの使い方でお悩みのあなたへ。この記事では、Windows PowerShellとは何か、その使い方について入門者向けにご紹介しています。これを見れば、PowerShellを使いこなせるようになれます。
Windows PowerShellとは、コマンドプロンプト(cmd.exe)の後継となるコマンドラインインタフェース(CLI)である。
テキストのコマンドを入力することで、Microsoft Windowsを操作できる。コマンドによる操作を支援する機能も含まれている。
Windows 7の場合、スタートメニューから[アクセサリ] - [Windows PowerShell] - [Windows PowerShell]を選択する。PowerShellを管理者として実行するには、右クリックメニューから「管理者として実行」を選択する。
Windows 10の場合、スタートメニューの [W] - [Windows PowerShell] から次のいずれかを選択する。
アプリケーション | 説明 |
---|---|
Windows PowerShell | 64ビット版のWindows PowerShell |
Windows PowerShell (x86) | 32ビット版のWindows PowerShell |
Windows PowerShell ISE | 64ビット版のWindows PowerShell 統合スクリプティング環境 |
Windows PowerShell ISE (x86) | 32ビット版のWindows PowerShell 統合スクリプティング環境 |
ISEとはIntegrated Scripting Environmentの略で、統合スクリプティング環境のことである。ISEではスクリプトのデバッグなどの開発環境も備えている。
Windows StoreからWindows Terminalをインストールしてあれば、Windows TerminalからもPowerShellを実行できる。
PowerShellではコマンドのことをコマンドレットと呼ぶ。PowerShellにどのようなコマンドレットがあるのか確認するには、 Get-Comannd コマンドレットを実行する。なお、PowerShellではコマンドレットの大文字と小文字を区別しない。
各コマンドレットの使用方法を調べるには、 Get-Help コマンドレットを実行するか、調べたいコマンドレットを -? オプションを指定して実行する。
Get-Help Cmdlet
または
Cmdlet -?
Cmdlet には調べたいコマンドレットの名前を指定する。
コマンドレット | 別名 | 説明 |
---|---|---|
Compare-Object | diff | オブジェクトを比較する。 |
Copy-Item | cp | 項目をコピーする。 |
ForEach-Object | コレクション内の各アイテムをループ処理する。 | |
Get-AppPackage | インストールされているアプリケーションパッケージのリストを取得する。 | |
Get-ChildItem | dir, ls | 指定した場所から項目及び子項目を取得する。 |
Get-Command | コマンドレットの一覧を表示する。 | |
Get-Content | type | 項目の内容を取得する。 |
Get-Help | ヘルプを表示する。 | |
Remove-AppxPackage | ユーザアカウントからアプリケーションパッケージを削除する。 | |
Remove-Item | del, rd, rm, rmdir | 項目を削除する。 |
Rename-Item | 項目の名前を変更する。 | |
Set-ExecutionPolicy | 実行ポリシを設定する。 | |
Set-Location | cd, chdir | 現在の作業場所を設定する。 |
Sort-Object | プロパティ値に基づいてオブジェクトを並び替える。 | |
Set-Variable | set | 変数の値を設定する。 |
Write-Host | コンソールに文字列を表示する。 | |
Write-Output | echo | オブジェクトを標準出力へ出力する。 |
Windows PowerShellはスクリプト言語の機能も提供している。PowerShellスクリプトファイルの拡張子は「.ps1」である。PowerShellスクリプトはエクスプローラからダブルクリックしても実行できない。PowerShellはカレントフォルダを検索しないため、カレントフォルダにあるPowerShellスクリプトを実行する場合にも相対パス名又は絶対パス名で指定する必要がある。
PS C:\Users\tsuka> ./Foo.ps1
または
PS C:\Users\tsuka> C:\Users\tsuka\Foo.ps1
のように指定する。
PowerShellスクリプトを実行する場合、ファイル拡張子「.ps1」は省略することができる。
PowerShellでは、セキュリティ上の理由によりデフォルトでスクリプトの実行ができないようになっている。スクリプトを実行するには、あらかじめPowerShellのスクリプト実行ポリシを設定しておく必要がある。実行ポリシを変更するには、PowerShellを管理者として実行し、Set-ExecutionPolicyコマンドレットを実行する。
PS C:\Users\tsuka> Set-ExecutionPolicy RemoteSigned
スクリプト起動時のオプション及び引数の定義方法は次のとおり。
Param ( switch,switch... attribute parameter, attribute parameter... )
[switch] $SwitchName
[Parameter(Mandatory=boolean)]
booleanには、パラメータの指定が必須の場合は$True
、パラメータの指定が省略可能な場合は$False
を指定する。
[type] $ParameterName
型演算子 | 説明 |
-is | 型が一致する |
-isnot | 型が一致しない |
-as | 型のキャスト |
PowerShellの変数名の命名規則は次のとおり。
変数に値を設定する。
var = expr
PowerShellの変数はデータ型を区別しないので、数値も文字列も設定できる。
var1 = 10
var2 = "foo"
var3 = 1 + 2
var4 = "foo" + "bar"
Get-Variable は変数の一覧を表示するコマンドレットである。
PS C:\> Get-Variable
Name Value
---- -----
$
? True
^
args {}
Import-CSVはCSVファイルをインポートするPowerShellコマンドレットである。
PS C:\> Import-CSV example.csv
Family name Given name Age
----------- ---------- ---
Shiratori Sana 16
Nonaka Kokona 15
Sato Neo 14
Out-GridViewコマンドレットを併用すると、CSVファイルの内容をビューアウィンドウで見ることができる。
PS C:\>import-CSV example.csv | Out-GridView
ユーザプロファイルにインストールされたアプリケーションパッケージのリストを取得する。
Get-AppPackage
アプリケーションパッケージ名を指定することもできる。
PS C:\> Get-AppxPackage Microsoft.Windows.Cortana
Name : Microsoft.Windows.Cortana
Publisher : CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture : Neutral
ResourceId : neutral
Version : 1.13.0.18362
PackageFullName : Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy
InstallLocation : C:\Windows\SystemApps\Microsoft.Windows.Cortana_cw5n1h2txyewy
IsFramework : False
PackageFamilyName : Microsoft.Windows.Cortana_cw5n1h2txyewy
PublisherId : cw5n1h2txyewy
IsResourcePackage : False
IsBundle : False
IsDevelopmentMode : False
NonRemovable : True
IsPartiallyStaged : False
SignatureKind : System
Status : Ok
Invoke-WebRequest コマンドレットは、Web ページまたは Web サービスに対して HTTP および HTTPS リクエストを送信する。レスポンスを解析し、リンク、画像及びその他の重要な HTML 要素のコレクションを返す。
Invoke-WebRequest [-Uri] uri [CommonParameters]
curl
wget
Remove-AppxPackageコマンドレットは、ユーザーアカウントからアプリケーションパッケージ(*.appx)を削除する。
アプリケーションパッケージのファイル名拡張子は .msix または .appx である。
Windows GUI からではアンインストールできないアプリケーションでも、PowerShell からアンインストールできる。
Remove-AppxPackageコマンドレットには、次に示すオプションを指定できる。
マップをアンインストールするには、PowerShellから次のコマンドを実行する。
Get-AppxPackage Microsoft.WindowsMaps | Remove-AppxPackage
Xbox Game Barをアンインストールするには、PowerShellから次のコマンドを実行する。
Get-AppxPackage Microsoft.XboxGamingOverlay | Remove-AppxPackage
正規表現を使って複数のファイルの名前を一括して変更する例を示す。
PS C:\> Get-ChildItem *
-a--- 2015/06/29 00:00 1000 foo_1.txt
-a--- 2015/06/29 00:00 1000 foo_2.txt
-a--- 2015/06/29 00:00 1000 foo_2.txt
PS C:\> Get-ChildItem * | Rename-Item -NewName { $_.Name -replace 'foo', 'bar' }
PS C:\> Get-ChildItem *
-a--- 2015/06/29 00:00 1000 bar_1.txt
-a--- 2015/06/29 00:00 1000 bar_2.txt
-a--- 2015/06/29 00:00 1000 bar_2.txt
指定した文字列を含む行を表示する。
Select-String -Path index.html -Pattern "<title>"
ワイルドカードを使用して、複数のファイルの中から指定した文字列を含む行を表示する。
Select-String -Path *.html -Pattern "<title>"
指定した文字列を含まない行を表示する。
Select-String -Path index.html -Pattern "<title>" -NotMatch
指定した文字列を含むファイル名のみを表示する。
Select-String -Path *.html -Pattern "<title>" | Select -u Filename
指定した文字列を含むファイルのパス名のみを表示する。
Select-String -Path *.html -Pattern "<title>" | Select -u Path
PowerShell の Set-Variable は変数に値を設定するコマンドレットである。
Set-Variable
[-Name] name
[[-Value] object]
[-Confirm]
PS C:\> Set-Variable -Name "foo" -Value "bar"
-Name オプションは省略できる。
PS C:\> Set-Variable "foo" -Value "bar"
PS C:\> Set-Variable -Name "foo" -Value "bar"
-Value オプションは省略できる。
PS C:\> Set-Variable -Name "foo" "bar"
PS C:\> Set-Variable "foo" "bar" -Confirm
確認
この操作を実行しますか?
対象 "名前: foo 値: bar" に対して操作 "変数の設定" を実行しています。
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
インターネットからダウンロードしたファイルは、コンピュータを保護するために、操作が制限されることがある。このようなファイルは、エクスプローラからファイルのプロパティを表示することで確認できる。ブロックされているファイルは「このファイルは他のコンピューターから取得したものです。このコンピューターを保護するため、このファイルへのアクセスはブロックされる可能性があります。」と表示される。ファイルのプロパティで「許可する」にチェックを入れてOKボタンをクリックすることで、ブロックを解除することができる。
PowerShellのUnblock-Fileコマンドレットを使うことで、インターネットからダウンロードしたファイルのブロックを解除することができる。
Unblock-File [-Path] String[][-WhatIf] [-Confirm] [CommonParameters]
Unblock-File -LiteralPath String[][-WhatIf] [-Confirm] [CommonParameters]
以下に示すコマンドオプションをUnblock-Fileコマンドレットに指定できる。
PS C:\Users\tsuka\Documents> unblock-file example.csv -confirm
確認
この操作を実行しますか?
対象 "C:\Users\tsuka\Documents\example.csv" に対して操作 "Unblock-File" を実行しています。
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
インターネットからダウンロードしたExcelファイルのブロックを解除する。
PS C:\> Unblock-File -Path C:\Users\tsuka\Documents\Downloads\example.xls
Write-Hostはコンソールに文字列を表示するコマンドレットである。
テキストファイルを読み込んでコンソールにその文字列を表示する例を示す。
$f = (Get-Content example.txt) -as [sring[]]
foreach ($l in $f) {
Write-Host $l
}
環境変数の値を表示する。
$Env:variable
環境変数 WINDIR の値を表示する例を次に示す。
PS C:\> $Env:windir
C:\Windows
環境設定に値を設定する。
$env:variable="value"
環境変数の値の末尾に追加する。
$env:Path+=";C:\tmp"
環境変数を削除する。
$Env:variable = ''
PowerShellにおいて、環境変数に空文字を設定することはできない。この構文は、環境変数に空文字を設定するのではなく、環境変数そのものを削除することを意味する。
$HOME 変数はホームディレクトリを示す。
PS C:\> $HOME
C:\Users\tsuka
$PID 変数はプロセスIDを示す。
PS C:\> $PID
3200
$PSHOME 変数はPowerShellのホームディレクトリを示す。
PS C:\> $PSHOME
C:\Windows\System32\WindowsPowerShell\v1.0
PowerShellの出力エンコーディング
PS C:\> $OutputEncoding
IsSingleByte : True
BodyName : us-ascii
EncodingName : US-ASCII
HeaderName : us-ascii
WebName : us-ascii
WindowsCodePage : 1252
IsBrowserDisplay : False
IsBrowserSave : False
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 20127
PowerShellの文字コードをShift JISに変更する。
PS C:\> $OutputEncoding = [Console]::OutputEncoding
PS C:\> $OutputEncoding
BodyName : iso-2022-jp
EncodingName : 日本語 (シフト JIS)
HeaderName : iso-2022-jp
WebName : shift_jis
WindowsCodePage : 932
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
IsSingleByte : False
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 932
PowerShellの文字コードをUTF-8に変更する。
PS C:\> $OutputEncoding = New-Object System.Text.UTF8Encoding
PS C:\> $OutputEncoding
BodyName : utf-8
EncodingName : Unicode (UTF-8)
HeaderName : utf-8
WebName : utf-8
WindowsCodePage : 1200
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
IsSingleByte : False
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 65001
$PSVersionTable はPowerShellのバージョンを格納している変数である。
PSVersion | Major |
Minor | |
Build | |
Revision | |
PSEdition | - |
PSCompatibleVersions | Major |
Minor | |
Build | |
Revision | |
BuildVersion | Major |
Minor | |
Build | |
Revision | |
CLRVersion | Major |
Minor | |
Build | |
Revision | |
WSManStackVersion | Major |
Minor | |
Build | |
Revision | |
PSRemotingProtocolVersion | Major |
Minor | |
Build | |
Revision | |
SerializationVersion | Major |
Minor | |
Build | |
Revision |
PowerShellのバージョン確認を行うには、$PSVersionTableを確認する。
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.19041.610
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.610
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 610
PS C:\> $PSVersionTable.PSVersion.Major
5
PS C:\> $PSVersionTable.PSCompatibleVersions
Major Minor Build Revision
----- ----- ----- --------
1 0 -1 -1
2 0 -1 -1
3 0 -1 -1
4 0 -1 -1
5 0 -1 -1
5 1 19041 1682
bootrec.exeはブートレコードの修復を行うコマンドである。
システムパーティションに新しいブートセクタを書き込む。
bootrec.exe /FixBoot
システムパーティションにマスタブートレコード(MBR)を書き込む。
bootrec.exe /FixMbr
Windowsと互換性があるインストールを探すために、すべてのディスクをスキャンする。
bootrec.exe /RebuildBcd
COMコンポーネントをシステムに登録するためには、Windows付属のコンソールプログラム regsvr32 を使用します。
regsvr32 [/u] [/s] [/n] [/i[:コマンドライン]] ファイル名
ファイル名で指定されたコンポーネント内の DllRegisterServer 関数を呼び出して、コンポーネントをシステムに登録します。
regsvr32 コマンドには次のようなオプションがあります。
Active Directoryの中のプロパティを表示する。
dsget user dn option...
表示するユーザオブジェクトの識別名(DN)を指定する。識別名の指定を省略した場合は、標準入力(stdin)から識別名を取得する。
optionには次のオプションを指定できる。
グローバルTCPパラメータを表示する。
netsh interface tcp show global
SNP (Scalable Networking Pack)を無効化する。
netsh interface tcp set global shimney=disabled
netsh interface tcp set global rss=disabled
netsh interface tcp set global netdma=disabled
NETSTATはプロトコルの統計と現在のTCP/IPネットワーク接続を表示するコマンドである。
NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p protocol] [-r] [-s] [-t] interval
TCP
、
UDP
、
TCPv6
又は
UDPv6
のいずれかを指定する。
-s
オプションと併用する場合のみ、前述のプロトコルに加えて
IP
、
ICMP
、
IPv6
又は
ICMPv6
のいずれかも指定できる。
ポート番号がどのアプリケーションで使用されているか確認するには、次のコマンドを実行する。
NETSTAT -nao
WSL (Windows Subsystem for Linux) の管理操作を実行する。
次に示すオプションをwslconfigコマンドに指定できる。
/l
/list
PS C:\> wslconfig /list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
PS C:\> cd \\wsl$\Ubuntu\home
PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu\home>
/s distributionName
/setdefault distributionName
/t distributionName
/terminate distributionName
/u distributionName
/unregister distributionName
Windows Updateスタンドアロンインストーラ(wusa.exe)は、コマンドプロンプトからWindows Updateを行うコマンドである。wusa.exeを実行するには、管理者アカウントの権限が必要である。
wusa update
wusa /uninstall update|/kb:kbno [/quiet] [/norestart|/warmrestart:second|/promptrestart|/forcerestart]
YourPhone.exeはスマートフォンをWindows 10に接続して、デスクトップ上で通知を受け取ることができるようにする。
YourPhone.exeがバックグラウンドで実行されないようにするには、次の手順で行う。