クリックして評価とフィードバックをお寄せください
 Windows PowerShell: プロファイルの力
Tips
You can run Check Disk from the command line or within other utilities. At a command prompt, you can test the integrity of the E drive by typing these commands. ...

Read more!

Memory is often the source of performance problems, and you should always rule out memory problems before examining other areas of the system. Here’s an overview of counters that you’ll want to track to uncover memory, caching, and virtual memory (paging) bottlenecks. ...

Read more!

Problematic add-ons. Changed browser settings. A new homepage. Find out how you can troubleshoot and fix persistent, unwanted changes. ...

Read more!

If a database won’t mount, it could be because a required log file is missing or because the database is corrupted. You can diagnose many database mount problems using the Troubleshooting Assistant. ...

Read more!

To make replication go smoothly, you need to do a bit of planning, which involves selecting a specific replication model. Here's an overview of the common replication models you will likely choose from. ...

Read more!

Related Articles

Don Jones が Windows PowerShell ベースのインベントリ ツールをビルドする方法と、このソリューションの開発プロセスを紹介します。

Don Jones

TechNet Magazine 11 月号 2008

...

Read more!

Windows PowerShell にはオブジェクト指向という性質がありますが、Windows PowerShell を使用して複雑な文字列を解析することもできます。Don Jones が、Select-String を使用して Windows PowerShell で複雑な文字列を解析する方法について説明します。

Don Jones

TechNet Magazine 9 月号 2008

...

Read more!

これまで数回の Windows PowerShell コラムの記事で、Don Jones は Windows PowerShell ベースのインベントリ ツールを開発する方法について説明してきました。今月の記事では、Don がそれらのツールをすべて組み合わせて、すべての機能を備えた非常に強力なツールを作成します。また、それぞれのニーズに合わせてツールをカスタマイズする際のアドバイスもあります。

Don Jones

TechNet Magazine 2 月号 2009

...

Read more!

サーバーの稼働時間に関するレポートを作成するには、サーバーのダウンタイムを算出する必要があります。Scripting Guys がこの処理を実行する Windows PowerShell スクリプトを紹介します。

Microsoft Scripting Guys

TechNet Magazine 12 月号 2008

...

Read more!

今月は、Scripting Guys が WMI インフラストラクチャを詳しく調査します。また、便利な管理作業について学習して、実際にその作業を行う出発点として使用できる役立つスクリプトも紹介します。

Microsoft Scripting Guys

TechNet Magazine 11 月号 2008

...

Read more!

Also by this Author

Windows PowerShell には見過ごされている機能が多数あります。体系的なアプローチを使用して Windows PowerShell コマンドレットについて調べることで、これまでに気付かなかった強力な機能を発見することができます。

Don Jones

TechNet Magazine December 2007

...

Read more!

Don Jones が、4 部構成シリーズの Windows PowerShell によるユーザー プロビジョニングの自動化に関するコラムの最終回をお届けします。最終回では、ユーザーをドメイン グループに追加する方法と Active Directory の属性を変更する方法を紹介します。

Don Jones

TechNet Magazine June 2009

...

Read more!

Don Jones が、4 部構成シリーズのコラムをお届けします。第 1 部では、Windows PowerShell を使用して実用的なユーザー プロビジョニング スクリプトを作成する方法を紹介します。

Don Jones

TechNet Magazine 3 月 2009

...

Read more!

Don Jones が Windows PowerShell ベースのインベントリ ツールをビルドする方法と、このソリューションの開発プロセスを紹介します。

Don Jones

TechNet Magazine 11 月号 2008

...

Read more!

注意力が長続きしないユーザーのために (そうではないユーザーのためにも)、スクリプトの進行状況に関するフィードバックを表示することをお勧めします。この記事では、Windows PowerShell で進行状況を表示するために知っておく必要があることについて説明します。

Don Jones

TechNet Magazine March 2008

...

Read more!

Popular Articles

Windows Server 2008 と Windows Vista で導入されたグループ ポリシーの基本設定という新機能には、3,000 個以上の設定が用意されており、管理者がグループ ポリシーを使用して行える作業の幅が格段に広がります。この記事は、グループ ポリシーの基本設定を使用して環境を管理するためのガイドとしてご利用いただけます。

Derek Melber

TechNet Magazine 1 月号 2009

...

Read more!

Hyper-V を導入すると、仮想化は IT 環境にとってさらに魅力的なソリューションになります。この記事では、現在の仮想化市場について概説し、Hyper-V によって仮想化の管理容易性、信頼性、およびセキュリティがどのように強化されるかについて説明します。

Rajiv Arunkundram

TechNet Magazine October 2008

...

Read more!

今月のコラムでは、SharePoint のセキュリティ アカウントについて詳しく解説し、脆弱な構成によって、どのように攻撃者がすべてのサイト コレクションとサイトを完全に制御できるようになるかを説明します。

Pav Cherny

TechNet Magazine 1 月号 2009

...

Read more!

Windows は、ドライバ エラー、ファイルの破損、ディスクのクラッシュなど、自分では制御できないさまざまな問題が原因で動作しなくなることがあります。ただし、解決の糸口がないわけではありません。この記事では、Wes Miller が Windows システムで問題が発生する可能性のある部分、およびそれらのトラブルシューティングを行って再度システムを正常に動作させる方法について説明します。

Wes Miller

TechNet Magazine 1 月号 2009

...

Read more!

SQL Server 2008 では、高度なトラブルシューティングを可能にする、SQL Server 拡張イベントという新しい イベント メカニズムが提供されます。この記事では、拡張イベントの概要と、この新機能を使用して監視とトラブルシューティングを行う方法について説明します。

Paul S. Randal

TechNet Magazine 1 月号 2009

...

Read more!

Our Blog

NAP monitors the health of specified computers when they attempt to connect to a network and includes a number of mechanisms to enforce health requirements. In this article, Geek of All Trades Greg Shields gives readers an overview of these enforcement mechanisms and, as an example, takes a closer look at setting ...

Read more!

Use Windows PowerShell to Manage Virtual Machines Here are a few examples of how you can use Windows PowerShell scripts to manage virtual machines running on a Server Core installation. Note that these scripts are presented as samples and may need to be customized to work in your environment.

Create a New ...

Read more!

Disabling an Unused Part of Group Policy Objects One way to disable a policy is to disable an unused part of the GPO. By disabling part of a policy that isn’t used, the application of GPOs and security will be faster.

Administer Windows Server 2008 Server Core from the Command Prompt ...

Read more!

In the August 2008 issue of TechNet Magazine, Paul Randal wrote an article Top Tips for Effective Database Maintenance.  It was geared toward "involuntary  DBAs" (IT pros who inadvertently wind up responsible for a SQL Server instance).  The article had a great response from our readers so Paul has written another ...

Read more!

Microsoft Forefront is designed to deliver an integrated security solution that makes it much easier to deploy and manage security across an organization’s IT infrastructure. In this, our annual security issue, we feature two articles that describe how Forefront Security protects instant messaging and e-mail.

Protect ...

Read more!

Windows PowerShell プロファイルの力
Don Jones


このコラムを定期的に読んでいらっしゃる皆さんは、Windows PowerShell でプロファイルのシステムがサポートされていることを既にご存知でしょう。基本的に、これらは .ps1 というファイル名拡張子が付いたシェル スクリプトで、シェルが実行されるときに自動的に実行されます。プロファイルでは、たとえばカスタム エイリアスを定義するためのすばらしい方法が提供されます。シェルを実行するたびにプロファイルによってエイリアスが自動的に定義され、シェルの使用中にいつでもエイリアスを使用できるように、プロファイルを構成できます。
Windows PowerShell では、次の 4 種類のプロファイルが定義されます。
  • すべてのシェルとコンピュータのすべてのユーザーに適用されるプロファイル。
  • すべてのユーザーと Microsoft PowerShell シェルに適用されるプロファイル。
  • 現在のユーザーとすべてのシェルに適用されるプロファイル。
  • 現在のユーザーと Microsoft PowerShell シェルに適用されるプロファイル。
"すべてのシェル" という概念は少し紛らわしいかもしれません。この用語は、Windows PowerShell の初期の開発コンセプトに基づいていますが、このコンセプトは実際に最終的な製品にはなりませんでした。今日では、おそらく "すべてのホスト" という表現の方が適切です。

ビデオ
このビデオでは、Don Jones がプロファイルを作成して Windows PowerShell シェルをカスタマイズする方法について説明しています。

シェル、ホスト、およびプロファイル
ご存知のように、Windows PowerShell 自体は Microsoft .NET Framework アセンブリの集合です。ここでは、シェルのこの部分を Windows PowerShell エンジンと呼びたいと思います。というのも、ここには皆さんが一般的に Windows PowerShell であると考えている機能が含まれているからです。ただし、ユーザーがこのエンジンと対話できる方法は組み込まれていません。ユーザーが実際にシェルを使用するには、ホスト アプリケーション (つまりホスト) によってエンジンが読み込まれる必要があります。
皆さんがこれまで実行してきた powershell.exe アプリケーションも、このようなホストの 1 つです。Windows PowerShell 2.0 Community Technology Preview (CTP) に含まれている gpowershell.exe アプリケーションは、また別のホストです。ホストとシェルの関係は、私がここで述べたほど単純なものではありませんが、皆さんがご覧になる動作は、私の簡単な説明で理解していただけると思います。
テキスト ベースのコマンド ライン インターフェイスを使用してシェルと対話する場合に、powershell.exe ホストを使用する可能性が高いことを理解しておくことは重要です。このことは、別のアプリケーション (Exchange 管理シェルなど) によってインストールされたショートカットを使用してシェルを起動した場合にも当てはまります。Exchange 管理シェルは、別のシェルやホスト アプリケーションではなく、一連のスナップインとスクリプトをあらかじめ読み込むように指定したショートカットによって起動される、標準的な powershell.exe ホストです。これらのスナップインにより、シェル内で Exchange の管理機能を使用できるようになります。ただし、使用するのは同じシェルです。
Windows Vista の場合、powershell.exe ホストのプロファイルは以下の場所にあります。
  • %windir%\system32\WindowsPowerShell\v1.0\profile.ps1 コンピュータのすべてのユーザーとすべてのシェルに適用されるプロファイル。
  • %windir%\system32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1 コンピュータのすべてのユーザーと Microsoft.PowerShell シェルに適用されるプロファイル。
  • %UserProfile%\Documents\WindowsPowerShell\profile.ps1 現在のユーザーとすべてのシェルに適用されるプロファイル。
  • %UserProfile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 現在のユーザーと Microsoft.PowerShell シェルに適用されるプロファイル。
これらのプロファイルは既定で作成されるわけではなく、明示的に作成した場合のみ、上記の場所に格納されます。
各ホスト アプリケーションは、適切なプロファイルを読み込んで実行します。特定のホスト アプリケーションによって、どのプロファイルも読み込まないことが "決定" された場合、実際にそのアプリケーションでプロファイルを読み込む必要はありません。プロファイルは Windows PowerShell エンジンによって自動的に実行されるわけではありません。
上記の動作を完全に把握する最も簡単な方法は、シェルを開いて「$profile」と入力し、Enter キーを押すことです。これで、シェルが使用しようとしている "主要な" プロファイル (ユーザーごとに用意される、シェル固有のプロファイル) の完全なパスがわかります。その後、そのスクリプトを作成または変更すれば、シェルが起動するたびにプロファイルが実行されるようになります。

プロファイルを使用する
プロファイルを使用する一般的な方法の 1 つは、既に述べたように、カスタム エイリアスを定義することです。また、カスタムの PSDrive を追加することもできます (これらは基本的に割り当て済みのドライブで、完全に Windows PowerShell 内に存在します)。あまり一般的でない使用方法は、環境内で使用しているソフトウェア製品に基づいて、必要な任意の管理タスクを実行できるスーパー シェルのようなものを作成することです。実際にスーパー シェルの概念について説明するには、まずその背景について少し説明する必要があります。
Windows PowerShell を作成しているマイクロソフト内の製品グループは、Microsoft 管理コンソール (MMC) を含む、その他の主要な管理テクノロジの多くを担当しています。MMC のしくみは、Windows PowerShell とよく似ています。mmc.exe を実行すると、最初にあまり役立たない空のコンソールが起動します。機能的なコンソールを作成するには、MMC スナップインを追加します。
要件に合わせてコンソールを構成したら、.msc 形式でコンソールをファイルに保存します。この保存したコンソール ファイルを使用して、カスタム コンソールをいつでも簡単に再読み込みできます。
多くの管理者は、カスタムの MMC コンソールを作成するのではなく、自分たちが管理する製品と共にインストールされるコンソールを使用します。たとえば、Exchange Server では、Exchange Server スナップインのみを含むコンソールが作成されます。Active Directory ユーザーとコンピュータは、あらかじめ作成されるもう 1 つのコンソールで、単一のスナップインが含まれています。
Windows PowerShell のしくみもほぼ同じです。Exchange Server 2007 の管理ツールと共にインストールされる Exchange 管理シェルのアイコンは、実際には powershell.exe へのショートカットで、コンソール ファイルを読み込む命令が含まれています。シェルのコンソール ファイルには .psc1 ファイル名拡張子が付いていて、あらかじめ読み込まれるスナップインの一覧が含まれています (MMC によってあらかじめ読み込まれるスナップインの一覧が .msc ファイルに含まれているのと非常によく似ています)。ただし、あらかじめ作成されるこのようなシェル コンソールの使用にこだわる必要はありません。MMC の場合と同じようにカスタム コンソールを作成し、そのカスタム コンソールを使用してすべての管理タスクを実行できます。プロファイルは、これを可能にするうえで重要な役割を果たします。

カスタム コンソールを作成する
カスタム コンソールを作成するには、まず使用する各スナップインの完全名を検索する必要があります。まず、必要なすべての管理ツールがコンピュータにインストールされていることを確認します。その後、Windows PowerShell で Get-PSSnapin –registered を実行します。これで、登録されているがまだ読み込まれていないすべての使用可能なスナップインが一覧表示されます。続いて、適切な Windows PowerShell プロファイルを作成または編集します。Add-PSSnapin コマンドを追加して、常に使用するスナップインをそれぞれ読み込みます。これには、Exchange Server、System Center 製品、サードパーティ製のスナップイン (たとえば PowerShell Community Extensions) などがあります。プロファイルを保存して (Windows PowerShell の実行ポリシーで要求されている場合は、プロファイルをデジタル署名します)、シェルを閉じます。もう一度シェルを開くと、プロファイルに列挙されたすべてのスナップインが自動的に読み込まれます。
もう 1 つの手法は、(Add-PSSnapin とスナップインの名前を使用して) すべてのスナップインをシェルに読み込むことです。その後、Export-Console を実行して、現在使用しているすべてのスナップインを含む .psc1 コンソール ファイルを作成します。この .psc1 コンソール ファイルを使用して、PSConsoleFile パラメータとカスタムの .psc1 ファイルが指定された、Windows PowerShell の新しいショートカットを作成できます。その後、ショートカットがコンソールを使用して、指定されたすべてのスナップインを自動的に読み込みます。

プロファイルに関するその他のテクニック
私は自分で作成した Windows PowerShell プロファイルを使用して、シェルが起動するたびに、他にもさまざまな役立つタスクを実行しています。次に、私のシステムでシェルが起動したときに実行されるいくつかの処理を示します。
  1. Get-Credential を実行してドメインの管理者アカウントの資格情報を取得し、$cred という変数に結果を格納します。これにより、シェル全体で $cred を使用できるようになります。次に、$cred をさまざまなコマンドレット (Get-WMIObject コマンドレットなど) の credential パラメータに渡します。$cred にはパスワードが格納されるので、パスワードの入力を求められることなく、これらのコマンドレットを使用できます。
  2. Cd C:\ を実行して、シェルがコンピュータの C: ドライブのルートで開始されるようにします。
  3. New-Alias of Out-File を実行して、"of" という名前のエイリアスを作成します。これは、"Out-File" の代わりに "of" を使用できるようにするためです。短いエイリアスが定義されていると非常に便利なので、私はこの手法をよく使用します。
シェルの HKLM: ドライブにテスト キーを作成します。HKLM はレジストリの HKEY_LOCAL_MACHINE の部分を表しています。エラーが発生した場合は、昇格した権限を使用せずにシェルが起動されます。通常、私が行う作業では、昇格した権限が必要です。エラーが発生するかどうかによって、重要な作業に取りかかる前に、昇格した権限を持っているかどうかを簡単に確認できます。
Ping-Address という名前のカスタム関数を定義します。この関数は、コンピュータ名または IP アドレスを受け取り、そのコンピュータが ping に応答するかどうかに基づいて True または False を返します。私が行う作業ではこの関数をよく使用するので、プロファイル内でこの関数を定義してシェル全体で使用できるようにしています。

今月のコマンドレット : Get-WmiObject
洞察力のある方は、私が以前に取り上げたものと同じコマンドレットを紹介していることに気付いたかもしれませんが、今回は、このコマンドレットで提供されるすばらしい仕掛けについて説明します。管理者はよく次のような手法を使用して、テキスト ファイルに名前が記載されている複数のコンピュータから Windows Management Instrumentation (WMI) に関する情報を取得しようとします。
Get-Content c:\computers.txt | ForEach-Object 
  { Get-WmiObject Win32_Service –comp $_ }
この手法は正しく機能しますが、必ずしもこの手法を使用する必要はありません。その理由は、Get-WmiObject を使用すれば、–computerName パラメータに指定したコンピュータ名の配列を受け取ることができるからです。この同じ効果を得るには、次の手法を使用します。
Get-WmiObject Win32_Service –comp (Get-Content
  c:\computers.txt)
Get-Content コマンドをかっこ内に入れると、シェルによって強制的にこのコマンドが実行され、結果 (コンピュータ名の配列) が –computerName パラメータに格納されます。
プロファイルに関する注意点
Microsoft.PowerShell プロファイルやすべてのシェルに適用されるプロファイルを読み込むアプリケーションは、powershell.exe だけではありません。SAPIEN Technologies の PrimalScript、Quest Software の PowerGUI、ShellTools の PowerShell Plus など、Windows PowerShell のサポートを提供している多くの統合開発環境 (IDE) でも、これらと同じプロファイルを読み込んで、powershell.exe ホストと同じような操作を行うことができます。
多くのスナップインを読み込む、サイズの大きいプロファイルを使用すると、アプリケーションの起動に時間がかかる可能性があります。その理由は、アプリケーションをホストする準備が整うまでに、Windows PowerShell エンジンによって多くの命令が実行されるためです。実際、実行するプロファイルのスクリプトが非常に多い場合は、powershell.exe でも起動に時間がかかります。
複数のスナップインが、同じ名前を持つコマンドレットを定義している場合も、競合が発生する可能性があります。たとえば、2 つのスナップインで Get-User という名前のコマンドレットが定義されている場合は、ユーザーがコマンドレットの完全修飾名を使用して必要なコマンドレットを指定するまで、Windows PowerShell ではどちらのコマンドレットも実行されません。スナップインの名前は非常に長くなることがあるので、この完全修飾名はわかりにくくなる可能性があります。通常、この問題が発生したら、私はこれら 2 つのスナップインを同時に読み込むことをあきらめます。代わりに、プロファイルでよく使用するスナップインだけを読み込み、もう 1 つのスナップインを読み込んで使用する必要がある場合は、別の "新しい" シェルを使用します。
Windows PowerShell のプロファイルでは、多くの便利な機能がシェルに提供されます。ただし、マルウェアによって故意に編集された場合、プロファイルは大規模な損害を引き起こす可能性があることも忘れないでください。プロファイルを保護するには、プロファイルにデジタル署名し、AllSigned 実行ポリシーを使用するよう Windows PowerShell を構成するか、プロファイルの NTFS ファイルに設定されているアクセス許可をすべて変更して、通常のユーザー アカウントではそれらのファイルを変更できないようにします。

Don Jones は、『Windows PowerShell: TFM』と『VBScript, WMI, and ADSI Unleashed』の著者です。連絡先については、PowerShellCommunity.org を参照してください。

Page view tracker