Liste aller Codebeispiele
Autor: Dr. Holger Schwichtenberg
Beschreibung
Das folgende PowerShell-Skript zeigt die Realisierung von vier funktionsbasierten Commandlets zur Steuerung des Active Directory oder anderer LDAP-basierter Verzeichnisdienste aus der PowerShell heraus:
1. Get-LDAPObject: Zugriff auf ein einzelnes Verzeichnisobjekt
2. Get-LDAPChildren: Zugriff auf den Inhalt eines Containerobjekts
3. Add-LDAPObject: Anlegen eines Verzeichnisobjekts
4. Remove-LDAPObject: Löschen eines Verzeichnisobjekts.
Das Commandlet Get-LDAPObject akzeptiert als Eingabe eine Array mit LDAP-Pfaden als Zeichenketten als Parameter oder in der Pipeline. Get-LDAPChildren und Remove-LDAPObject akzeptiert als Eingabe
- Ein Array mit LDAP-Pfaden als Zeichenketten als Parameter oder in der Pipeline und/oder
- Eine Menge von DirectoryEntry-Objekten in der Pipeline.
Bei Add-LDAPObject können als Eingabe nur drei Zeichenkettenparameter verwendet werden.
ACHTUNG: Dies ist die Fassung für PowerShell RC2 !!!
Programmcodebeispiele PowerShell Language (PSL)
# ---------------------------------------------------------------------
# Author: Dr. Holger Schwichtenberg
# Desc: PowerShell Commandlets for handling LDAP-Objects
# Usage: This file contains a function-based Commandlet. In order to use
# it, you must dot source the file into your shell e.g.:
# PH> . c:\PSExtensions\LDAP_Commandlets.ps1
# Date: 10/05/2006
# Version: 2.0
# Host: PowerShell Version 1.0 RC2
# ---------------------------------------------------------------------
# Get single LDAP object
function Get-LDAPObject {
param([string[]]$LDAPPath)
begin {
}
process {
if ($_)
{
if ($_ -is [string])
{
new-object system.directoryservices.directoryEntry($_)
}
else
{ throw "Pipeline input must be [string]."
}
}
}
end {
if ($LDAPPath) {
foreach ($Path in $LDAPPath) {
new-object system.directoryservices.directoryEntry($Path)
}
}
}
}
# Get content of an LDAP container
function Get-LDAPChildren {
param([string[]]$LDAPPath)
begin {
function getContainer([string] $path)
{
$con = new-object system.directoryservices.directoryEntry($path)
$con.PSBase.Children
}
}
process {
if ($_)
{
if ($_ -is [string])
{
getContainer($_)
}
elseif ($_ -is [System.DirectoryServices.DirectoryEntry])
{
getContainer($_.PSBase.Path)
}
else
{ throw "Pipeline input must be [string] or [System.DirectoryServices.DirectoryEntry]."
}
}
}
end {
if ($LDAPPath) {
foreach ($Path in $LDAPPath) {
getContainer($Path)
}
}
}
}
# Remove an object from an LDAP container
function Remove-LDAPObject {
param([string[]]$LDAPPath)
begin {
function remove([string] $path)
{
if ([system.directoryservices.directoryEntry]::Exists($path))
{
$obj = new-object system.directoryservices.directoryEntry($path)
$obj.PSBase.DeleteTree()
$obj
}
else
{
throw "Object does not exists!"
}
}
}
process {
if ($_)
{
if ($_ -is [string])
{
remove($_)
}
elseif ($_ -is [System.DirectoryServices.DirectoryEntry])
{
remove($_.PSBase.Path)
}
else
{ throw "Pipeline input must be [string] or [System.DirectoryServices.DirectoryEntry]."
}
}
}
end {
if ($LDAPPath) {
foreach ($Path in $LDAPPath) {
remove($Path)
}
}
}
}
# Add an new object to an LDAP container
function Add-LDAPObject {
param([string]$Container, [string]$Class, [string]$RDN)
begin { }
process { }
end {
if ($Container -and $Class -and $RDN) {
if ([system.directoryservices.directoryEntry]::Exists($Container))
{
#Write-Warning "Adding Object $RDN of type $Class to $Container"
$obj = new-object system.directoryservices.directoryEntry($Container)
$newobj = $obj.PSBase.Children.Add([string]$RDN,[string]$Class)
$newobj.PSBase.CommitChanges()
}
else
{
throw "Container does not exists!"
}
}
}
}
# Define alias for function
Set-Alias LDP Get-LDAPObject
Set-Alias LDC Get-LDAPObject
Set-Alias RLDP RemoveLDAPObject
Set-Alias ALDP Add-LDAPObject
# Confirm installation
"Function-based commandlets for LDAP successfully installed!"
Programmcodebeispiele
Dieses Codebeispiel in anderen Sprachen (noch) nicht verfügbar.
Hinweise
Ausgaben werden in den Beispielen durch Hilfsroutinen wie out() und
PrintOut() erzeugt. Diese sind hier nicht angegeben, da deren Implementierung
von der jeweiligen Umgebung abhängt. Für Konsolenanwendungen können hier z.B.
Console.WriteLine() einsetzen.
Querverweise
Definition '.NET Framework Class Library'
Verfügbarkeit der Klasse 'System.DirectoryServices'
Übersicht über den FCL-Namensraum 'System.DirectoryServices'
Portal dotnetframework.de
|