ADManager Plus から PowerShell を使用して LDAP 情報を Java に送信する方法

ADManager Plus から PowerShell を使用して LDAP 情報を Java に送信する方法について説明します。以下の手順に従って、PowerShell スクリプトで LDAP 情報を取得し、Java アプリケーションにその情報を送信するプロセスを設定します。

`手順`
**①PowerShellスクリプトでLDAP情報を取得**
**②取得した情報をHTTPリクエストとしてJavaアプリケーションに送信**
**③JavaアプリケーションでHTTPリクエストを受信して処理**

**1. PowerShellスクリプトでLDAP情報を取得**
以下のPowerShellスクリプトを使用して、LDAP情報を取得し、JSON形式に変換します。

```ruby:powershell

# PowerShellスクリプト: Get-LDAPInfo.ps1

# LDAPサーバの接続情報を設定
$ldapServer = "LDAP://your-ldap-server"
$searchBase = "DC=example,DC=com"
$searchFilter = "(objectClass=inetOrgPerson)"

# ディレクトリエントリを作成
$directoryEntry = New-Object System.DirectoryServices.DirectoryEntry($ldapServer)

# ディレクトリ検索を作成
$directorySearcher = New-Object System.DirectoryServices.DirectorySearcher($directoryEntry)
$directorySearcher.Filter = $searchFilter

# 検索結果を取得
$searchResults = $directorySearcher.FindAll()

# 結果を格納するリストを作成
$userList = @()

foreach ($result in $searchResults) {
    $user = @{
        CN = $result.Properties["cn"] -join ", "
        Email = $result.Properties["mail"] -join ", "
    }
    $userList += $user
}

# JSON形式に変換
$userListJson = $userList | ConvertTo-Json

# HTTPリクエストでJavaアプリケーションに送信
$uri = "http://localhost:8080/receiveLDAPData"
Invoke-RestMethod -Uri $uri -Method Post -Body $userListJson -ContentType "application/json"

```

**2. 取得した情報をHTTPリクエストとしてJavaアプリケーションに送信**
PowerShellスクリプト内で Invoke-RestMethod を使用して、LDAP情報をHTTP POSTリクエストとして送信します。送信先のURIはJavaアプリケーションのエンドポイントに設定します。

**3. JavaアプリケーションでHTTPリクエストを受信して処理**
Javaアプリケーションは、HTTPリクエストを受信してデータを処理するサーバーを設定します。以下はSpring Bootを使用した例です。

**Maven依存関係**
まず、pom.xmlに必要な依存関係を追加します。

```ruby:xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
</dependencies>

```

**Javaコード**
次に、Spring Bootアプリケーションを作成して、HTTPリクエストを処理します。

```ruby:java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Iterator;

@SpringBootApplication
public class LdapReceiverApplication {

    public static void main(String[] args) {
        SpringApplication.run(LdapReceiverApplication.class, args);
    }
}

@RestController
class LdapController {

    @PostMapping("/receiveLDAPData")
    public void receiveLDAPData(@RequestBody String ldapData) {
        /* LDAPデータをJSONとしてパース */
        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode rootNode = mapper.readTree(ldapData);
            Iterator<JsonNode> elements = rootNode.elements();

            /* Oracleデータベース接続情報 */
            String dbUrl = "jdbc:oracle:thin:@localhost:1521:orcl";
            String dbUser = "dbuser";
            String dbPassword = "dbpassword";
            Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);

            /* データベースへの挿入 */
            String sql = "INSERT INTO users (cn, email) VALUES (?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);

            while (elements.hasNext()) {
                JsonNode userNode = elements.next();
                String cn = userNode.get("CN").asText();
                String email = userNode.get("Email").asText();

                pstmt.setString(1, cn);
                pstmt.setString(2, email);
                pstmt.executeUpdate();
            }

            pstmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
```

`説明`
**PowerShellスクリプト**:
- **System.DirectoryServices** 名前空間を使用してLDAP情報を取得し、JSON形式に変換。
- **Invoke-RestMethod** を使用して、HTTP POSTリクエストでJavaアプリケーションに送信。

**Javaアプリケーション**:
- Spring Boot を使用して簡単なWebサーバーを作成。
- **/receiveLDAPData** エンドポイントでPOSTリクエストを受信し、JSONデータをパースしてOracleデータベースに格納。

この手順に従って、ADManager Plusから取得したLDAP情報をPowerShellを通じてJavaアプリケーションに送信し、Oracleデータベースに格納することができます。各自の環境に合わせて接続情報や設定を調整してください。