Windows PowerShell スクリプトには

Don Jones

内容

変数を多用しない操作を行います
変数の名前の意味
比較を簡略化します。
スクリプトを中断しません。
ループを繰り返す
サイレントにはしません。
自分のスクリプトを表示します。

最近の閲覧者にも意味) を提供を作成した個人用 ConcentratedTech.comブログ: 私に、Windows PowerShell スクリプトを送信し、復習して提案、それらを向上させる必要があります。 という考え方実際にから送信されたアンケート私共-bloggers を実行するなど、リーダー スクリプト スキルの向上に優れた、現実世界手段を提供はこのことを推奨します。 過去数か月を経由した気付きましたいくつかの傾向いくつかの特定の提案を繰り返し行う自分を検索するようします。 では、ここを共有するの一覧をコンパイルするしました。

最初の状態、ただし、作業を行う (正常と collateral の損害、もちろんなし) を取得するスクリプトが適切なスクリプトをしましょう。 nitpicky する候補を表示しているのかもしれません、確かにはそのうちの一部。 ただし、移動すると、指摘しようとした、いくつかの異なる利点、自分の提案の各が。

指摘する「不正なプラクティス」をいくつかを実際に行う場合は、攻撃をかかるしません。 多く Windows PowerShell でスクリプトが VBScript でスクリプトから開始ユーザーのありことこれら「不正なプラクティス」をいくつか実際には非常に一般的な VBScript 世界で知っています。 これは、優れた営業案件、次に、Windows PowerShell] と [VBScript が少し異なる方法、およびするスクリプトを Windows PowerShell が提供に一意な利点の使用を記述する方法について説明です。

言ったこと、ここではマイ上位 6 一般的な提案、過去数か月で加えたです。

変数を多用しない操作を行います

確かに、変数に便利ですがではない難しきます。 多くこの種のスクリプトの表示されています。

$varfile = "c:\names.txt"
$varexists = Test-Path $varfile
if ($varexists –eq $false) {
  Write-Output "The file $varfile does not exist"
  break
}
$varnames = Get-Content $varfile

たい「」を参照してくださいこのような例で変更された、いくつかのベスト プラクティスがあります。 まずのすべての変数に情報を貼り付けるほとんどの必要があります。 少ない変数でこれを書き換えるに可能性があります。 要求するような理由ことでしょうか。 されて、シェルも数の変数を使用してをかまわないが私には、大きな、大きなファン用紙またはスクリプト エディターで、スクリプトを読みし、スクリプトが何を把握できる人できるよう、スクリプトをできるだけとしてわかりやすいようにします。 複数の変数を含めると、彼のヘッドで追跡するは人ほど) 可能性が低くなります彼ができる、スクリプトがまで調べる。 用紙のスクリプトがわからない場合が少なく、問題がある場合、スクリプトをデバッグできるいます。 では、このサンプルを次のように書き換えを起動します。

$varfile = "c:\names.txt"
If ((Test-Path $varfile) –eq $false) {
Write-Output "The file $varfile does not   exist"
  break
}
$varnames = Get-Content $varfile

すべて実際に実行する中は、$ varexists 変数を除去ありテスト パスの出力を直接利用します。 こうするが表示されない場合を確認する作成、$ varexists を参照してくださいし、戻る、どのような $ varexists になって解明します。 頭での追跡に小さいです。 通知だけこれはその情報を 3 回使用するための $ varfile のままにすることなどかどうか再している使用情報複数回、し、[変数に配置する価値はあります。

変数の名前の意味

前の例を続行必ずしてください変数名を変数内の内容を覚えておくが役立つ必要があります。 $ 文字は、変数のため、"var"のような名前のプレフィックスを使用する必要はありません。 文字列の"str"または"int"の整数が古い場合と同様に、プレフィックスの名前を実際には、("の 1993"はクラス中、講義する場合とする)。 単純な変数名を使用だけ。 ここで書き換え例を示します。

$filename = "c:\names.txt"
If ((Test-Path $filename) –eq $false) {
Write-Output "The file $filename does not exist"
  break
}
$computernames = Get-Content $filename

比較を簡略化します。

わかりません Windows PowerShell で比較演算子のファン-–gt、-<、- eq、やなどなどのものです。 fondness の自分の不足が可能性がありますは場所でした使用使い慣れた演算子など、VBScript で長い経験から >、<、= とします。 小さい精神的解析を読み取ることを必要なのでとグレード学校数学のレッスンからこれらの演算子をおそらくに認識皆さんの多く。 可能であれば、したい演算子は避けてください。 任意の条件は何かを確認する True または False の場合は、演算子を取り除く機会。

$filename = "c:\names.txt"
If (-not (Test-Path $filename)) {
Write-Output "The file $filename does not exist"
  break
}
$computernames = Get-Content $filename

テスト パス コマンドレットは、True または False を返す、ため True または False の場合を比較する必要のありません。 True または False 押し boil をかっこのニーズを構築、内のすべてとします。 通常、比較を使用して、実現しますが、そこにあるものはすべてが、既に True の生成または False の場合の場合だけで直接使用できるその情報。

–not 演算子が実際に行うたい 1 ことを確認する必要があります。 方がより一般的な英語のような操作と同じ! = 演算子の多くの言語で使用します。

また、テスト パスと、入力パラメーター、$ ファイル名を囲む配置する中かっこにコメントする必要があります。 コマンドを視覚的に、それらを 1 つの単位として理解するのに役立ちますので、かっこで囲んでを開始するしました。 Windows PowerShell では、コマンド、パラメーター名、およびパラメーター値などを区別するのに、他の文字ではなくスペースを使用します。 かっこで囲まれたすべてのコマンド文字列を囲む] 開始および停止位置を決定を実際には、スペースを見て行わずすべて同時に、表示するのに役立ちます。

スクリプトを中断しません。

この例で実行がある最後の修正候補がそのロジックが作成されて方法です。 ファイルが存在すると場合、スクリプトの出力に分割します。 ファイルが存在しない中断ステートメントを実行するし、スクリプトのため続行されます。 可能であれば、スクリプトを終了する改ページを使用しないと。 使用例を書き換えをする、もう一度 — よう。

$filename = "c:\names.txt"
If (Test-Path $filename) {
$computernames = Get-Content $filename
  # do whatever we planned to do
} else {
Write-Output "The file $filename does not exist"
}

こうするでロジックを簡単するした構築します。 また、スクリプトの実行内容に関する混乱を中断ステートメントを使用する必要を除去するしました。 最初にこの提案は、nitpick、どうしてもが適切なコーディング プラクティスやすく優れたスクリプトとを介して中間だからスクリプトの出力を中止するよりも優れた実習が確実にすると思われるを許可すると思います。 この種のコンストラクトあり、デバッグしやすいがはるかに簡単にスクリプトを見てして何を解明しようとしている場合に紙の上で行います。

ループを繰り返す

確認するスクリプトのいくつか必要情報をテキスト ファイルと、ファイルの各行をループ処理を読み取れません。 たとえば、1 行のテキスト ファイルに、1 つ名、名前をリストできるように一連のコンピューターを連絡する可能性があります。 ここで見たことが一般的な構成体。

$line = 0
$names = get-content c:\names.txt
while ($line –lt $names.length) {
  # do something with $names[$line]
  $line++
}

これは変数 $names に、ファイルを読み込みますをし手動で列挙、コレクションを使って、配列がまるでします。 $ 行変数は使用している行の追跡します。 正常動作などしています困難コードは、少し他人が後で読むよりも、少し作業を実行していますが。 Windows PowerShell で、ForEach コンストラクトはコレクションを列挙する少し適しています。 (技術的には、Get コンテンツ コレクションを取得、配列にしない) します。 代わりに試してごらん。

Foreach ($name in (Get-Content c:\names.txt))
{
  # do something with $name
}

いくつかの利点をここでがあります。 マイ前の候補で保持これにより [Josef Felder に少しわかりやすいと思われるので、コンストラクト内で右取得コンテンツへの呼び出しを配置しています。 ForEach はどのくらいの時間にかかわらず、コレクション全体を列挙します。 たびに、そのコレクション内の次の項目の実行を $ 名の変数にその項目を配置します。 したがって、変数名が含まれているを表します)、コンピュータ名。 おり、明示すると、スクリプトを読み取るとに従って簡単します。

Windows PowerShell Q & A

Q Windows PowerShell で、永続的なカスタム エイリアスを定義する方法はありますか。

A 新しいエイリアスをこれまで作成した場合、よく見るとおそらくというがそういう退席中、シェルを閉じるとき。 たとえば、この作成、新しいエイリアス d、Get-ChildItem - コマンドへのショートカットがあります。

新しいエイリアス-d Get-ChildItem-

エイリアスが失われる、シェル、閉じるとき。 Windows PowerShell プロファイルを作成します。 [ドキュメント] フォルダーに WindowsPowerShell をという新しいフォルダーを作成します。 そのフォルダー内で profile.ps1 をという名前のテキスト ファイルを作成します。 、そのテキスト ファイルで、シェルを起動するたびを自動的に実行する任意のコマンドを配置するなど、新しいエイリアスの定義を含みます。 プロファイルにより、Windows PowerShell で使用できるの常に「固定」のエイリアスを作成、シェル、起動たびに、コマンドを実行すること。

気にしなくてよい何行に関する操作中またはする $ ライン変数の記録を保持する —、ForEach コンストラクトが私の。 3 行のコードを除去するコードは、少し簡潔ななりの追跡、ヘッドの少ないもの、スクリプトの動作を把握しようとしている必要があります。

サイレントにはしません。

実際、bud で nip する 1 つ、プラクティスは、シェル、全体スクリプトのエラーの抑制のです。 スクリプトを上部にあるこのライン権利を含むで検索すると言います。

$ErrorActionPreference = "SilentlyContinue"

すぐに停止します。

これは、消えるエラーがそれらを抑制は。 はいとするが予測および時間使用できない可能性があるリモート コンピューターに接続する (WMI) を使用しているときなど、特定のエラーを無視するは確かです。 存在しないグローバル エラーを無視する理由。 エラー メッセージは、便利なあり、解決できる場合がありますが問題を指摘し。

特定のコマンドレットのエラーを無視する場合は、そのコマンドレットを –EA"SilentlyContinue"パラメーターを追加して行うことができます。 行に複数のコマンドのエラーを無視する場合は、いずれかのそれぞれに、–EA パラメーターを追加またはこれらのコマンドの前後これらのコマンドにすぐに、$ ErrorActionPreference 行追加、追加。

$ErrorActionPreference = "Continue"

これにより、通常の状態に戻す処理エラーを設定されます。

個人的には、電源を切るエラーまったくしていますそれらエラー処理自分でない限りに入らない。 たとえば。

Trap {
  # output error to a log file or something
}
Get-WmiObject Win32_Service –computerName $remote –EA Stop

この簡単な例では、だけエラー メッセージ、それらをトラップし、それらを自分で処理する機会をすることではなく true 例外は、–EA、"Stop"パラメーターを生成する方法を示します。 それらのログをファイルに記録をわかりやすく、エラー メッセージ、表示、または他の処理が実行可能性があります。

自分のスクリプトを表示します。

ビット nitpicky されているこれらのいくつか述べたのように、- が検討に値するされる個別の利点を提供すべて。 独自の Windows PowerShell スクリプトを共有するを招待します。 毎月のいくつかを確認し、自分の提案を投稿します。 ConcentratedTech.com. 過去の提案の一部を検索してかもしれませんもレビュー用の独自のスクリプトを送信する自由入力してください。 表示しております聴覚から!

Don の平均 は、co-founder のテクノロジの集中です。 したことができます Windows PowerShell とその他の IT トピックに関するヒントを読むように自分のブログにしないに問い合わせてください。 ConcentratedTech.com.