PowerShell クックブック

これは、私の同僚と私が仕事で役に立つと思った項目のリストです。 百科事典のような意図はなく、むしろ初心者が役に立つと思うもの、特に理解するのに時間がかかりそうなものを記録する場所です。

このページは O’Reilly が Lee Holmes による Windows PowerShell Cookbook を出版する前に始まりました。 O’Reilly の本はお勧めですが、このページはそれとは無関係です。

See also PowerShell gotchas.

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を呼び出すことができます。 また、UploadDataUploadFile メソッドもあります。

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-ClipboardOut-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

コメントを残す

メールアドレスが公開されることはありません。