これは、私の同僚と私が仕事で役に立つと思った項目のリストです。 百科事典のような意図はなく、むしろ初心者が役に立つと思うもの、特に理解するのに時間がかかりそうなものを記録する場所です。
このページは O’Reilly が Lee Holmes による Windows PowerShell Cookbook を出版する前に始まりました。 O’Reilly の本はお勧めですが、このページはそれとは無関係です。
See also PowerShell gotchas.
- Outline
- はじめに/インストール
- PowerShell のインストール
- Community Extensions library のインストール
- 「スクリプトの実行は無効です」というメッセージを取り除く
- Configure your command prompt
- その他の作業
- 画面に書き出す
- Prompt user for input
- Manipulate dates
- Send email
- Sleep
- List a directory (recursively)
- Test if a file exists
- ファイルの行を配列に読み込む
- ファイルへの書き込み
- Rename a file
- Delete a file
- 正規表現を使う
- Split and join strings
- Web ページをつかむ
- Read and Write to registry
- Understand quotes
- Time a command
- Text to speech
- Access the Windows clipboard
- .NETアセンブリを読み込む
- ランタイムに作成したコードを実行
- パスにスペースがあるプログラムを実行する
Outline
- Getting started/installation
- Install PowerShell
- Install Community Extensions library
- Get rid of “execution of scripts is disabled” message
- set up your “scripts:”. PowerShell ドライブの場所
- コマンド プロンプトの設定
- その他のタスク
- 画面に書き込む
- ユーザーに入力するよう促す
- 日付を操作する
- メールを送る
- 寝る
- ディレクトリを一覧する(再帰的に)
- ファイルが存在するかテストする
- ファイル行を読み込み 配列
- ファイルへの書き込み
- ファイル名変更
- ファイルの削除
- 正規表現を使う
- 文字列の分割と結合
- Web ページを取得する ページ
- レジストリの読み込みと書き込み
- 引用符を理解する
- コマンドのタイムアウト
- テキストからスピーチ
- Windowsクリップボードへのアクセス
- .NET Frameworkの読み込み
- .NET Frameworkの読み込み
- .NET Frameworkの読み込み
。
….NET アセンブリ
- ランタイムで作成されたコードの実行
- パスにスペースを含むプログラムの実行
はじめに/インストール
PowerShell のインストール
PowerShell は以下より入手可能です。
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
top
Community Extensions library のインストール
PowerShell Community Extensions (PSCX) library はこちらから入手可能です:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX
これは、コマンドレットと関数の便利なコレクションです。 WindowsExplorer に「PowerShell Here」コンテキスト メニューをインストールし、右クリックしたフォルダーに PowerShell コマンド ウィンドウを開くことができます。 また、PSCXはサンプルProfile.ps1
ファイルを提供します。
PSCXをインストールしたら、man about_pscx
と入力して、PSCXに付属するコマンドレット、プロバイダーなどの概要を確認できます。
top
「スクリプトの実行は無効です」というメッセージを取り除く
PowerShell スクリプトを実行する際に最初に遭遇する可能性がある問題は、次のようなものです:
PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<
これは、PowerShell のデフォルト セキュリティ設定により、悪意のあるスクリプトが実行できないようになっていることが原因です。
この動作を変更するには、次のようにします:
PSH> set-executionPolicy RemoteSigned
リモート ソースからのスクリプトのみ、デジタル署名が必要になります。 PowerShell ドライブの場所
多くの PowerShell スクリプトを書いたら、それらを 1 か所に集めて、すぐに見つけられるように scripts:
という名前の PSD ドライブを作成すると便利かもしれません。 このような PSDrive を作成するには、PSCX プロファイルに以下を追加します。
New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts
top
Configure your command prompt
コマンド プロンプトを設定するには、prompt
という関数を作成してプロファイルに追加するだけです。 例えば、次のようにすると作業ディレクトリが表示されます。
function prompt { "$pwd> " }
なお、prompt
関数の中には好きなコードを入れることができ、return を押すたびにそのコードが実行されます。
top
その他の作業
画面に書き出す
出力を書き出すには Write-Host
を使用します。 オプションで -foregroundcolor
を指定すると、出力に色をつけることができる。 例えば、エラーや警告は赤くハイライトされます。
例:
Write-Host "Hello world" -foregroundcolor red
top
Prompt user for input
Read-Host
を使用してください。
例:
$a = Read-Host "Enter your name"Write-Host "Hello" $a
top
Manipulate dates
コマンドレット get-date
は、DateTime
オブジェクトを返します。 引数を指定しない場合は、現在の時刻と日付を返します。 文字列の引数を指定すると、引用符で囲む必要はなく、文字列を日付にパースします。 アメリカ建国200周年からの日数と時間を調べる。
(get-date) - (get-date 7/4/1976)
また、キャスト を使用すると、文字列を
DateTime
オブジェクトにキャストすることができます。
top
Send email
PowerShellコミュニティ拡張のSend-SmtpMail
コマンドレットを使用します。
Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"
例: top
Sleep
Start-Sleep
コマンドレットを使用します。 デフォルトでは数秒かかりますが、-milliseconds
オプションがあります。
例:
Write-Host "hello"; Start-Sleep 5; Write-Host "world"
top
List a directory (recursively)
Get-ChildItem
のエイリアスとなるdir
コマンドを使用することができます。 ディレクトリを再帰的にリストアップするには、-recurse
オプションを追加するだけでよい。
例:
dir f:\bin -recurse
top
Test if a file exists
Use test-path
を使用する。
top
ファイルの行を配列に読み込む
Use get-content
.
例:
$a = (get-content foo.txt)
top
ファイルへの書き込み
UseOut-File
.Aは、ファイルへの書き込 みに使用する。 Unicode 出力が必要でなければ -encoding ASCII
例:
$foo | out-file -encoding ASCII foo.txt
top
Rename a file
Use Rename-Item
or its alias ren
.
top
Delete a file
Use Delete-Item
or its alias del
.Use Top
File
を削除。
top
正規表現を使う
See PowerShell and Perl.
top
Split and join strings
Strings has a split
メソッドです。 split()
の引数は分割する文字を含む文字列である。 関数::split
はより一般的なものである。
例:
$a.split("`t ")
は文字列 $a
を文字列の配列に分割し、タブまたはスペースがあるところで分割します。
分割する文字列が Windows のパスである場合、専用の Split-Path コマンドを使用するとよいでしょう。
配列を1つの文字列に結合するには、::join
メソッドを使用します。
例:
$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)
今 $b
は “1*2*3” を含んでいます。
top
Web ページをつかむ
PSCXからのGet-Url
か .NET からの net.webclient
オブジェクトを使用する。 前者はより簡潔ですが、後者はより多くのオプションを使用できます。
例:
$w = Get-Url "https://www.w3.org"
$w = (new-object net.webclient).DownloadString("https://www.w3.org")
コード (new-object net.webclient)
は多くの便利なメソッドを持つ .NET WebClient
オブジェクトを作成します。 たとえば、文字列ではなくディスクに直接保存するためにDownladFile
を呼び出すことができます。 また、UploadData
と UploadFile
メソッドもあります。
top
Read and Write to registry
ファイル システムを操作するようにレジストリを操作できますが、知っておくべきいくつかの詳細があります。 たとえば、HKEY_CURRENT_USER
を探索するには、cd HKCU:
を使用し、cd
を使用してツリーの下に向かって作業します。 読み出しにはGet-ItemProperty
、書き込みにはSet-ItemProperty
を使用します。 また、削除には Remove-ItemProperty
を使用します。
例:
以下のコマンドは、cmd.exe
シェルを構成するレジストリ ノードの内容を一覧表示します。
cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9
この TechNet の記事でさらに詳しく説明しています。
top
Understand quotes
PowerShellには4種類の引用符があります:シングル、ダブル、シングル、ダブルのhere-stringです。 二重引用符と二重Here-Stringの中では、変数名がその値に置き換えられ、PowerShellのエスケープシーケンスが解釈されます。 シングルクォートとシングルヒレ文字列の中では、変数名は展開されず、エスケープシーケンスは解釈されません。 たとえば、コードスニペット
$a = "bar" 'foo`t$a', "foo`t$a"
は出力
foo`t$a foo bar
を生成します。これは、ダブルクォートの内部では、`t
はタブに展開され、$a
は “bar” に展開されるためです。 ヒア文字列の中では、ダブルクォートとシングルクォートは特別なものではなく、文字通りクォートされます。
here-stringは@"
または@'
で始まり、同じシンボルで終わりますが、その順序は逆です。
例
$a = "bar" $b = @" foo "baz" 'qux' $a "@ $b
produces
foo "baz" 'qux' bar
そして
$a = "bar" $b = @' foo "baz" 'qux' $a '@ $b
produces
foo "baz" 'qux' $a
ヒアストリングを開く引用符に続く空白があってはならないことに注意してください。 そうしないと、”Unrecognized token in source text.”
似ているように見えますが、PowerShell の here-string と C# の verbatim string はかなり異なっています。 次の表は、その違いをまとめたものです。
C# verbatim strings | PowerShell here-…strings |
---|---|
May contain line breaks | Must contain line breaks |
Only double quote variety | Single and double quote varieties |
@で始まる | @”(または’@’)と改行で始まる |
@で終わる | @(または ‘@)と改行で終わる |
非-を含むことができない | |
クォートを含むことができる | |
Turns off C# escape sequences | ‘@ turns off PowerShell escape sequences but “@ does not |
トップ
Time a command
Use Measure-Command
タスク完了までにどれくらい長い時間がかかるかを計るために使用される。
top
Text to speech
PSCX の Out-Speech
を使用します。
top
Access the Windows clipboard
PSCX コマンドレット Get-Clipboard
と Out-Clipboard
を使用してクリップボードの読み取りと書き込みをします。
top
.NETアセンブリを読み込む
LoadWithPartialName
を呼び出すことができます。 たとえば、Team Foundation Server APIのアセンブリをロードするには、
::LoadWithPartialName("Microsoft.TeamFoundation.Client")
PSCXのResolve-Assembly
も参照。
top
ランタイムに作成したコードを実行
コマンド Invoke-Expression
は Perl または JavaScript の eval
と類似している。 Invoke-Expression $str
は文字列 $str
に含まれるコードを実行する。
top
パスにスペースがあるプログラムを実行する
パスは引用符で囲み、前にアンパサンドを付ける。 例えば、
& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"
はフルパスにスペースが2つある実行ファイル WinEdt.exe
を起動します。
アンパサンドを省くことはできないことに注意してください。 cmd.exe
とは異なり、PowerShell はすべての文字列をコマンドと見なさない。 アンパサンドがなければ、引用されたパスは単なる文字列です。
top