Sahara3のAI副業

AI副業でどこまでいけるのか?

AI副業:PythonでActive Directoryの特定のOUのコンピュータ一覧をだしたい。

「さはら3」です。

AI副業でどこまでいけるのか?をテーマに頑張っていきたいと思います。



頭の体操

  • 1か所だけ異なる漢字が入っています。(解答は一番最後に掲載)

問題


本編

本日は、業務的なスクリプトになります。

Active Directoryの特定のOUのコンピュータ一覧

本業で、Active Directoryの特定のOUに所属しているコンピュータオブジェクトの一覧が必要になりました。

今までは、Powershellで出したりをしていましたが、Pythonの方が速そうだったので、ChatGPTさんに聞いてみました。


補足1(ActiviDirectoryとは)

ActiveDirectory(アクティブディレクトリ)は、Microsoftが開発したディレクトリサービスで、Windows Serverオペレーティングシステムに組み込まれています。

  1. ディレクトリサービス:ActiveDirectoryは、ネットワーク上のリソース(ユーザー、コンピュータ、プリンタなど)に関する情報を格納し、管理するためのデータベースです。

  2. ドメインコントローラ:ActiveDirectoryの情報は、ドメインコントローラと呼ばれる専用のサーバーに格納されます。これにより、ユーザー認証やリソースへのアクセス制御が行われます。

  3. ツリーとフォレスト:ActiveDirectoryの構造は、ドメイン、ツリー、フォレストという階層的な構造を持っています。複数のドメインをまとめてツリーを形成し、複数のツリーをまとめてフォレストを形成します。

  4. グループポリシー:ActiveDirectoryを使用すると、グループポリシーを通じてユーザーやコンピュータの設定を一元的に管理することができます。

  5. LDAP:ActiveDirectoryは、情報の検索やアクセスのためのプロトコルとしてLDAP(Lightweight Directory Access Protocol)をサポートしています。

  6. セキュリティ:ActiveDirectoryは、Kerberos認証プロトコルを使用して、ユーザーやリソースへのアクセスを安全に管理します。

簡潔に言えば、ActiveDirectoryは、企業や組織のITインフラストラクチャを効率的に管理するためのツールとして、ユーザー管理、リソース管理、ポリシーの適用などの機能を提供しています。

補足2(OUとは)

OU(Organizational Unit、組織単位)は、ActiveDirectory(AD)内でオブジェクトを階層的に整理するためのコンテナです。

  1. 階層的な構造:OUは、ユーザー、グループ、コンピュータ、その他のADオブジェクトを階層的に整理するために使用されます。

  2. グループポリシーの適用:OUは、特定のグループポリシーをそのOUに含まれるオブジェクトに適用するためのスコープとして使用されます。これにより、異なる部門やチームごとに異なるポリシーを適用することができます。

  3. オブジェクトの管理:OUを使用すると、特定の部門やチームの管理者が、そのOUに関連するオブジェクトのみを管理することができます。これにより、管理の負担を分散させることができます。

  4. 柔軟な設計:OUは、組織のニーズや要件に応じて、任意の階層構造で設計することができます。

簡潔に言えば、OUはActiveDirectoryの構造を整理し、効率的なオブジェクト管理とポリシーの適用を実現するための重要なコンポーネントです。


Amazon アソシエイト


サンプルプログラム

  • 事前準備(ldap3パッケージのインストール)
pip install ldap3
from ldap3 import Server, Connection, ALL, SUBTREE

# Active Directoryの設定
server_name = 'your_ad_server_name_or_ip'
domain_name = 'your_domain_name'
username = 'your_username'
password = 'your_password'
base_ou = 'ou=YourTargetOU,dc=example,dc=com'  # ここに対象のOUを指定

# LDAPサーバーへの接続
server = Server(server_name, get_info=ALL)
conn = Connection(server, user=f"{domain_name}\\{username}", password=password, authentication='NTLM')
if not conn.bind():
    print("Error: Could not bind to the server.")
    exit()

# コンピュータオブジェクトの検索
search_filter = '(objectClass=computer)'
conn.search(base_ou, search_filter, SUBTREE, attributes=['cn', 'distinguishedName'])

# 結果をテキストファイルに保存
with open('computers_with_ou.txt', 'w') as file:
    for entry in conn.entries:
        computer_name = entry.cn.value
        distinguished_name = entry.distinguishedName.value
        # OUの部分を抽出
        ou = ','.join([part for part in distinguished_name.split(',') if 'OU=' in part])
        file.write(f"{computer_name} - {ou}\n")

print("コンピュータの一覧とそのOUが computers_with_ou.txt に保存されました。")

# 接続の終了
conn.unbind()

→今回は、具体的なプログラムではなく、サンプルプログラムとなります事をご了承ください。

解説

ldap3のインポート

from ldap3 import Server, Connection, ALL, SUBTREE

Active Directoryへ接続するための準備(会社の環境によって異なります。)

# Active Directoryの設定
server_name = 'your_ad_server_name_or_ip'
domain_name = 'your_domain_name'
username = 'your_username'
password = 'your_password'
base_ou = 'ou=YourTargetOU,dc=example,dc=com'  # ここに対象のOUを指定
  • 事前にActiviDirectory管理者へ作業実施可否の確認をお願いいたします。

前項の情報を使用し、LDAPサーバーへの接続

# LDAPサーバーへの接続
server = Server(server_name, get_info=ALL)
conn = Connection(server, user=f"{domain_name}\\{username}", password=password, authentication='NTLM')
if not conn.bind():
    print("Error: Could not bind to the server.")
    exit()

コンピュータオブジェクトの検索

# コンピュータオブジェクトの検索
search_filter = '(objectClass=computer)'
conn.search(base_ou, search_filter, SUBTREE, attributes=['cn', 'distinguishedName'])

結果をテキストファイルに保存

# 結果をテキストファイルに保存
with open('computers_with_ou.txt', 'w') as file:
    for entry in conn.entries:
        computer_name = entry.cn.value
        distinguished_name = entry.distinguishedName.value
        # OUの部分を抽出
        ou = ','.join([part for part in distinguished_name.split(',') if 'OU=' in part])
        file.write(f"{computer_name} - {ou}\n")

print("コンピュータの一覧とそのOUが computers_with_ou.txt に保存されました。")

接続の終了

# 接続の終了
conn.unbind()

解説と言っておきながら、殆どコメントを記載しただけという手抜きでした、、、


Amazon アソシエイト


実施結果

私の職場の環境では、Powershellスクリプトで同じことを実施した場合には、2~3分程度かかっておりました。

今回のPyhonスクリプトでは、数秒で終わるという大分効率化が図れたともいます。

ActiveDirectory全体の棚卸を実施する機会があるので、今度は全体のOU配下のコンピュータオブジェクトの一覧を出してみようと思います。

(その結果は特に報告は致しません。)


まとめ

Python速い!!

という結果に終わりました。


AI関連は日進月歩、日々之精進でございます。

最後まで読んで頂きありがとうございました。

AIさはら


頭の体操:解答

  • わかりましたか?

解答

本日のAI着物美女

AI着物美女

Instagram

良かったらInstagramのフォローをお願いします。

https://www.instagram.com/ai_kimono_bijo/

非アダルトで運営しておりますので、職場でも安心して堪能いただけます。