powershell と active directory
DESCRIPTION
Active Directory Domain ServiceのおさらいとPowerShellからの利用法です。30分枠だったため、概要中心です。 PowerShell勉強会@大阪 第1回 勉強会 ( 2014年04月12日 ) Japan PowerShell User Group ( JPPOSH ) Vol.2TRANSCRIPT
PowerShell勉強会@大阪 第1回勉強会
PowerShellとActive Directory
平成26年4月12日
ちゅき
PowerShell勉強会@大阪 第1回勉強会
• 大阪在住、神戸勤務のSIer
• もともと研究開発部門の開発系技術担当
• 今はなんでも屋さんです。
• いわゆる一般優良市民
• わんくま同盟ではなぜかIT Proと認識されている悪寒
⇒なぜか「Directory Services」でMVP受賞
自己紹介など
SIerのR&Dってなにするの?
良い子は生暖かい目で見守ってネorz
PowerShell勉強会@大阪 第1回勉強会
• Active Directoryの歴史と概要
• さて、叩きまくってみましょう
Agenda
≒AD DSの話中心です^^(Active Directory DomainService)
PowerShell勉強会@大阪 第1回勉強会
ACTIVE DIRECTORYの歴史
まっぺん見直してみるActive Direcotry
PowerShell勉強会@大阪 第1回勉強会
NT4からWindows 2000へ
NT4って便利やんうちの部署でもサーバ建てよ
う
NT4って便利やんうちの部署でもサーバ建てよ
うNT4って便利やん
うちの部署でもサーバ建てよう
部門担当者
全社IT担当いっぱいありすぎ、つーか
めっさキショいんですけど?
部門レベルのサーバーから
エンタープライズレベルのサーバーへ
キーワードは集中管理!
NT4って便利やんうちの部署でもサーバ建てよ
う
NT4って便利やんうちの部署でもサーバ建てよ
うNT4って便利やん
うちの部署でもサーバ建てよう
PowerShell勉強会@大阪 第1回勉強会
• Windows OSでは、領域をドメインとして管理
• 信頼関係
– NT4ドメイン:非推移的
– ADドメイン:非推移的 and推移的
従来のバージョンのドメインとADのドメイン
数が多いと管理が大変(組み合わせ爆発)
A
B C
設定:AとB、AとCは信頼関係BとCは信頼関係ではない
非推移的信頼関係
A
B C
設定:AとB、AとCは信頼関係BとCも信頼関係になる
推移的信頼関係
推移的に信頼
集中管理が可能!
PowerShell勉強会@大阪 第1回勉強会
Active Directoryの管理対象
Windowsユーザー ユーザー情報 権限 プロファイル ポリシー
アプリケーション サーバー設定 シングルサインオン アプリケーション個別
のディレクトリ情報 ポリシー
Windowsクライアント 管理プロファイル ネットワーク情報 ポリシー
Windowsサーバー 管理プロファイル ネットワーク情報 サービス プリンタ ファイル共有 ポリシー
ネットワークデバイス 設定 QoSポリシー セキュリティポリシー
Internet
Firewall サービス 設定 セキュリティポリシー VPNポリシー
他のOS ユーザー セキュリティ ポリシー
E-Mail サーバー メールボックス情報 アドレス帳
ActiveDirectory ユーザー/リソース
セキュリティ 委任 ポリシー
PowerShell勉強会@大阪 第1回勉強会
• ポリシーとは(Policy←weblioへのリンク)
– ポリシーの適用≒方針に従った設定を適用
• NT4時代のポリシー
– 基本的にOSのUIなどの設定(レジストリと対応)
– 適用先(基本的にフラットな構造)
• ユーザーグループ
• 個々のコンピューター
• 既定のコンピュータ
ポリシー
全社IT担当
なんや、全社の一部の設定が変わったら全部再コピペorz
⇒階層構造
ポリシー言うんやったらもっと設定出来てもえぇんとちゃう?
⇒グループポリシー
PowerShell勉強会@大阪 第1回勉強会
• OU(組織単位)
– ポリシーはOU単位
– 対象に近いポリシーが上書きされる
階層構造の実現
第 1 章 : セキュリティ ベースラインの実装」http://technet.microsoft.com/ja-jp/windows/bb629421
Explorerのフォルダと同じイメージ
・「未構成」とすることで、上位の設定を引き継げる⇒ADより前は、上位組織の設定が変わると下位組織用のポリシーもすべて最コピペが必要だった
PowerShell勉強会@大阪 第1回勉強会
• PC1の設定は!?
【ヒント】上位から順番に上書きされる
例:グループポリシーの適用順
「第 1 章 : セキュリティ ベースラインの実装」http://technet.microsoft.com/ja-jp/windows/bb629421
設定1:A1設定2:B1
全体
設定1:未構成設定2:未構成設定3:C1
チーム
設定1:未構成設定2:B3
部門
PC1回答用紙:設定1:設定2:設定3:
A1(全体)B3(部門)C1(チーム)
適用順
PowerShell勉強会@大阪 第1回勉強会
• グループポリシーとは
– NT4の頃のようにレジストに書きっぱなし(タトゥーイング)が原則無くなった
⇒ポリシーを外せば、設定も外れる
– ともかく設定できる項目が多い
• パスワードなどのセキュリティ
• OSの設定
• アプリケーションの配布
• フォルダのリダイレクト
– カスタマイズ可能
グループポリシー
PowerShell勉強会@大阪 第1回勉強会
• 標準インタフェース
• プログラミングインタフェース
– C++
– WMI
– PowerShell プロバイダ
– .NET Framework
– その他いろいろ楽しめます^^
Active Directoryのインタフェース
PowerShell勉強会@大阪 第1回勉強会
• Active Directory ドメイン サービス
• Active Directory 証明書サービス
• AD Rights Management サービス
• AD ライトウェイト ディレクトリ サービス
• AD フェデレーション サービス
Active Directoryの5つのサービス
PowerShell勉強会@大阪 第1回勉強会
さて、叩きまくってみましょう
まっぺん見直してみるActive Direcotry
PowerShell勉強会@大阪 第1回勉強会
• WMIは強力ですが、なんとなくVBSチックに
• .NET FrameworkはVBチックに
⇒(個人的にはVB系最強に好き)
• Windows Server 2008 R2から結構まともに
やっぱりAD向けPowerShellプロバイダでしょうw
モジュール名:ActiveDirectory
PowerShell勉強会@大阪 第1回勉強会
• 初めにすること
– プログラミング:Hello World
– PowerShell:Get-Command
– PS プロバイダ:cd と ls ←(dir とか初月(ry
プロバイダを読んだら初めは……
PowerShell勉強会@大阪 第1回勉強会
• では、Usersの下に移ってみましょう
■chukitestドメイン
• CD cukitest ダメじゃんorz
• CD ‘dc=chukitest,dc=local’
• CD Users ダメじゃんorz
• CD cn=Users
では、まずはUsersコンテナのユーザー一覧など
PowerShell勉強会@大阪 第1回勉強会
• ユーザーとコンピュータの改廃!
• 資産一覧リストの作成!
• チョー面倒
そんなとき、大人は……
Active Directoryでの主な作業
パンピーはPowerShellでガンバる
http://technet.microsoft.com/ja-jp/forefront/cc470030.aspx
PowerShell勉強会@大阪 第1回勉強会
• OUとかユーザーをさっくり作ったり消したり
– Mkdir ou=TestOU
– rm ou=TestOU
– New-ADUser TestADUser
– Del TestADUser
⇒個人的な感想
で、何に使うの?
Ls(Get-ChildItem)なんかで内容を確認するには大賛成バッチなどで、OUごとに分けて相対パスとして移動後まとめて作成
⇒絶対パス指定のコピペミスを防ぐ➡今後はDSCでガシガシ
PowerShell勉強会@大阪 第1回勉強会
• すべてのユーザーを取得
Get-ADUser –Filer *
⇒簡単すぎて涙が出ます^^
使用例:
$users = Get-ADUser –Filer * | Select name
$Users | Export-CSV –Path c:¥etc¥test.csv
で、ユーザーの一覧とかは?
PowerShell勉強会@大阪 第1回勉強会
• .NET Frameworkでゴリゴリ
(そんなに難しくないけれど少しイケてない)
■ユーザーの一覧取得
PS C:¥> $ADs = New-Object System.DirectoryServices.DirectorySearcherPS C:¥> $ADs.Filter = "(objectClass=user)"PS C:¥> $ADsUsers = $ADs.FindAll()
プロバイダなしに頑張ってみる
PowerShell勉強会@大阪 第1回勉強会
• できた$ADsUsersがちと面倒
⇒ GetDirectoryEntry()で一個づつ展開
さらに、ユーザー名sAMAccountnameを取得
これをテキストに展開$Users = $ ADsUsers | foreach {$_.GetDirectoryEntry()}
$UserName = $ Users | select sAMAccountname –ExpandProperty *
$DN = $ Users | select DistinguishedName –ExpandProperty *
⇒一つのプロパティごとに展開……orz
プロバイダじゃないので……
昔のVBS&WMIみたいでイヤーん><
PowerShell勉強会@大阪 第1回勉強会
• プロバイダは便利なのでどんどん使いましょう
• 今後、いろんなプロバイダが出てくるのでお勉強^^
結論
PowerShell勉強会@大阪 第1回勉強会
• Active Directoryの世界は深く楽しく^^
ご清聴ありがとうございました