HIRO の紹介

PowerShell from Japan!! 管理人のHIROです。 PowerShellの情報を一緒に発信していきたいという方、是非ご連絡ください。

[Active Directory] Active Directory プロバイダ

PowerShell では Active Directory プロバイダを使用することができます。

では「プロバイダとは何か?」ですが、操作するデータストア(ファイルシステムやレジストリなど、環境変数など)に対して「同じコマンドで取り扱えるようにする仕組みを提供する機能」のことをいいます。

このプロバイダにより、New-Item や Copy-Item、Remove-Item といったコマンドレットを、様々なデータストア環境において同じように扱うことができます。

例えば New-Item コマンドレットであれば

  • ファイルシステムではファイルを作成する
  • レジストリではレジストリとキーを作成する
  • Active Directory ではユーザーを作成する

といったように「~を作成する」という共通動作を行います。これにより、システム別にコマンドレットを分けて覚える必要がなくなります。

さて、本題のActive Directory プロバイダについて見てみましょう。

まずは前回の記事を参考にActive Directoryモジュールを読み込んでおきましょう。

次に、下記のように入力します。

cd AD:

これで、PowerShell は下図に示すように、「PS AD:」という表示に切り替わります。

これは カレントのプロバイダが Acitve Directory に切り替わったことを意味します。

試しに

dir

と入力すると、現在の Active Directory のオブジェクト一覧が表示されます。

ここでもう1つ操作を行ってみましょう。

上図の DistinguishedName列 にある文字列を cd コマンド(Set-Locationコマンドレット)に渡すと、指定したActive Directoryのドライブへと移動することができます。

下記は DC=corp, DC=contso, DC=com へ移動した後、dir コマンドによりオブジェクト一覧を表示した例です。

今回は、Active Directory のプロバイダについて説明しました。

次回からは、Active Directory専用のコマンドレットについて取り上げていきたいと思います。

[Active Directory] Active Directory モジュールを使用する

前回の記事では Windows Server 2008 R2 で PowerShell を使用する方法を紹介しました。

今回は、PowerShell で Active Directory専用のモジュールを使用する方法を紹介します。

まず、PowerShell コンソールを起動して、次のコマンドを実行します。

Import-Module ActiveDirectory

以上で Active Directory専用のコマンドレットを使用することが可能になります。

では、どのようなコマンドレットがあるかを確認してみましょう。

Get-Command -Module ActiveDirectory

全部で76個のコマンドレットが表示されます。

これで PowerShell から Active Directory を操作することが可能になりました。

ただし、Import-Module コマンドは実行したコンソールでのみ有効ですので、いつでも使用できるようにしたいような場合はプロファイルで Import-Module コマンドレットを実行するような工夫をしておくことをおすすめします。

*プロファイルとは、PowerShell 起動直前に実行される専用のスクリプトです。

プロファイルの場所は

$profile

で確認することができます。

もしも、プロファイルが存在しない場合は、

New-Item -path $profile -type file -force

と入力することで空のプロファイルを作成することができます。

次に下記のように入力して、プロファイルをメモ帳で開き、Import-Moduleコマンドを記述します。

notepad $profile

これで、次回 PowerShell 起動時より自動的に ActiveDirectory モジュールが組み込まれるようになります。

次は、Acitive Directory プロバイダについて説明する予定です。

コマンドを繰り返し実行する

あけましておめでとうございます。
管理人のHIROです。
本年もよろしくお願いいたします。

早速本題です。

「テキストファイルに記述されているPC名に対してPINGを実行したい」という要望があり、下記のようなスクリプトを作成してみました。
(テキストファイルは1行に1つのPC名が記述されています。)

function Exec-Ping([string]$file)
{
  #指定されたファイルを読み取る
  $pc = Get-Content $file

  #1行ずつPingコマンドを実行する
  for ( $i = 0; $i -lt $pc.Count; $i++ )
  {
    ping $pc[$i]
  }
}

上記スクリプトは、Get-Content でファイルの中身を取得して1行ずつPingコマンドを実行するようにしたものです。
このスクリプトは要望通り動作するのですが、「Pingコマンドオンリー」のスクリプトでしかありません。
せっかくなので、Ping以外のコマンドも繰り返し実行できたら便利だと思い、下記のようにしてみました。

function Exec-Command([string]$cmd,[string]$file)
{
  #指定されたファイルを読み取る
  $content = Get-Content $file

  #ファイルの中身を1行ずつ実行する
  for ( $i = 0; $i -lt $content.Count; $i++ )
  {
    #読み取っておいたファイルの中身から1行取り出す
    $line = $content[$i]
    #任意のコマンドを実行する
    Invoke-Expression "$cmd $line"
  }
}

説明:
上記のスクリプトは2つの引数を持っています。
1つは実行したいコマンドを指定するための $cmd
もう1つはコマンドに与えるオプション文字列が書かれたファイルを指定する $file

たとえば Pingコマンドを実行したい場合は

Exec-Command “Ping” “C:\Work\Pinglist.txt”

とします。
Pinglist.txt に、1行/PCが記述されていれば、その台数分だけのPingが実行されます。

また、$cmd引数に”mkdir”を与えて

Exec-Command “mkdir” C:\Work\mkdirlist.txt

のようにすれば、一気に複数のディレクトリを作成することが可能です。

Windows Server 2008 R2 のPowerShell

Windows Server 2008 R2 (以降Win2008 R2)では PowerShell の Ver.2.0が標準搭載されています。

これは、Win2008 R2をインストールするとタスクバーにPowerShellのアイコンがあることからもわかります。

PowerShell のバージョンは 自動変数 $PSVersionTable で確認することができます。

(PSVersionのところが「2.0」と表示されます)

PowerShell 2.0では専用のエディタPowerShell ISEが使用できるのですが、デフォルトではインストールされていません。

もしもPowerShell ISEを使用したい場合には「機能の追加ウィザード」で「Windows PowerShell Integrated Environment(ISE)」にチェックを付けてインストールを行います。

もしも、.NET Framaework 3.5.1 がインストールされていない場合には下図のようにインストールするかどうかを聞かれるので、[必要な機能を追加]ボタンを押してインストールをしましょう。

下記のように、.NET Framework のインストールおよび PowerShell ISE がインストールされます。

インストールが完了すると、[アクセサリ]-[Windows PowerShell] に PowerShell ISE が追加されます。

今回は、Win2008 R2 で PowerShell を使用するための準備について説明しました。

今後は Active Directoryを管理する方法について書いていこうと検討中です。

MVP が伝授するスクリプト作成のヒントとコツ

MicrosoftのTechnet「MVP が伝授するスクリプト作成のヒントとコツ」にPowerShellのスクリプトを8本投稿いたしました。

投稿したスクリプトは下記の通りです。

是非ご覧ください。