In manchen Fällen benötigt man Accounts für Netzwerkgeräte die per Radius (802.1x) im Netz authentifiziert werden sollen. Mit folgendem Skript können einzelne Geräte per Parameter oder mehrere per CSV-Datei erstellt werden.

#------------------------------------------------------------------------------#
# Skript zum erstellen von Accouts für Netzwerkgeräte die über den Radius per 
# MAC-Adresse authentifiziert werden müssen
# Autor: Rob   	        8.8.2013
#------------------------------------------------------------------------------#
# Changelog:
# Datum			Änderung
# 	
#------------------------------------------------------------------------------#
param
	(
	[string]$File,
	[string]$Name,
	[string]$MAC,
	[string]$OU="MACAUTH",
	[string]$DN="OU=Clients,DC=MyDomain,DC=Local",
	[string]$Gruppe="MACAUTH_CLIENT",
	[switch]$DEBUG
	)
#------------------------------------------------------------------------------#
# Die Datei muss ein CSV-File mit folgender Struktur sein:
#------------------------------------------------------------------------------#
# Name,MAC,OU,Gruppe
# Tel0005,081508150818,XYZ,MACAUTH_CLIENT
#------------------------------------------------------------------------------#
 
#region Script Diagnostic Functions 
 
function Get-CurrentLineNumber {
    $MyInvocation.ScriptLineNumber
}
 
New-Alias -Name __LINE__ -Value Get-CurrentLineNumber –Description ‘Returns the current line number in a PowerShell script file.‘
 
function Get-CurrentFileName {
    $MyInvocation.ScriptName
}
 
New-Alias -Name __FILE__ -Value Get-CurrentFileName -Description ‘Returns the name of the current PowerShell script file.‘
 
#endregion
 
 
 
$error.clear()	# Fehlerbehandlung
 
if ( $File -eq "" )	# Keine Datei Angegeeben
	{
	if ( $Debug ) { Write-host "No File" }
	if ( $MAC -eq "" -or $Name -eq "" ) # Beide müssen angegeben sein
		{
		Write-warning "$(__Line__): Es muss entweder eine Datei oder Name und MAC-Adresse angegeben werden!"
		exit
		}
	else	# MAC prüfen
		{
		$MAC = $MAC -replace "([^a-f0-9])"
		if ( $MAC.Length -ne 12 )
			{
			write-warning "$(__Line__): MAC Adresse ungültig bei $Name ( $MAC )"
			exit
			}
		}
	$Accounts = ""
	$Accounts = $Accounts | add-member -membertype noteproperty -name MAC -value $MAC -passthru
	$Accounts = $Accounts | add-member -membertype noteproperty -name Name -value $Name -passthru
	if ( $Gruppe -ne "" )
		{
		if ( $Debug ) { write-host "Gruppe per Komandozeile:" $Gruppe }
		$Accounts = $Accounts | add-member -membertype noteproperty -name Gruppe -value $Gruppe -passthru
		}
	}
else					# Datei angegeben
	{
	if ( $MAC -ne "" -or $Name -ne "" ) # Keiner darf angegeben sein
		{
		Write-warning "$(__Line__): Es muss entweder eine Datei oder Name und MAC-Adresse angegeben werden!"
		exit
		}
	if ( -not (test-path $file) )
		{
		write-warning "$(__Line__): Gültigen Dateinamen angeben!"
		exit
		}
	$TMP1 = get-content $file
	if ( $TMP1.count -lt 1 )
		{
		write-warning "$(__Line__): Die Datei ist leer oder nicht lesbar"
		exit
		}
	Remove-Item $file -force -confirm:$false
	foreach ( $TMP2 in $TMP1 )
		{
		$TMP2 = $TMP2.trim()
		if ( $TMP2.length -ne 0 )
			{
			$TMP2 | out-file -FilePath $file -Append
			}
		}
 
	$Accounts = import-csv $file -Delimiter "`t" | Select @{Name="Name";Expression={$_."Hostname"}}, @{Name="MAC";Expression={$_."MAC-Adresse"}}, @{Name="OU";Expression={$_."AD-OU"}}
	}
 
if ( $error.count -ne 0 )
	{
	write-warning "$(__Line__): Abbruch wegen Fehler!"
	exit
	}
 
foreach ( $Account in $Accounts )
	{
	$MAC = $Account.MAC -replace "([^a-f0-9])"
	$Name = $Account.Name
	if ( $Debug ) { write-host $Name `t $MAC }
	if ( $MAC.Length -ne 12 )
		{
 
		write-warning "$(__Line__): MAC Adresse ungültig bei $Name ( $MAC )"
		exit
		}
 
	$Probe = Get-ADUser -Filter { (SamAccountName -eq $MAC ) -or (Name -eq $Name) -or (DisplayName -eq $Name)}
	if (( $Probe | measure).count -ne 0 )
		{
		write-warning "$(__Line__): Ein Objekt mit dem Namen $Name oder $MAC existiert bereits!"
		if ( $file -ne "" ) { Write-warning "Es wurde kein neuer Account angelegt!" }
		write-host "Vorhandenes Objekt:" $Probe
		exit
		}
	}
 
foreach ( $Account in $Accounts )
	{
	$MAC = $Account.MAC.toupper() -replace "([^a-f0-9])"
	$Name = $Account.Name
	$PWD = ConvertTo-SecureString -String $MAC.tolower() -asplaintext -force
	if ( $Account.OU )
		{
		$MACDN = "OU=" + $Account.OU + "," + $DN
		}
	else
		{
		$MACDN = $DN
		}
	$Probe = ( Get-ADObject -Filter { ( DistinguishedName -eq $MACDN ) } )
	if ( ( $Probe | measure).count -eq 0 )
		{
		write-warning "$(__Line__): Der Distinguished Name ( $MACDN ) ist ungültig!"
		exit
		}
	$TMP1 = "OU=" + $OU + "," + $MACDN
	$Probe = ( Get-ADObject -Filter { ( DistinguishedName -eq $TMP1 ) } )
	if ( ( $Probe | measure).count -eq 0 )
		{
		New-ADOrganizationalUnit -Name $OU -Path $MACDN -ProtectedFromAccidentalDeletion $true -Description "Objekte die per MAC authentifiziert werden: Drucker oder Apple Mac"
		}
	$MACDN = $TMP1
	if ( $Debug ) { write-host "DN:" $MACDN }
	if ( $error.count -ne 0 )
		{
		write-warning "$(__Line__): Abbruch wegen Fehler!"
		exit
		}
 
	New-ADuser -Enabled $true -PasswordNeverExpires $true -AllowReversiblePasswordEncryption $true -CannotChangePassword $true -Path $MACDN -SamAccountName $MAC -DisplayName $Name -Name $Name -AccountPassword $PWD
	$MACDN = ( Get-ADUser $MAC ).DistinguishedName
	if ( $error.count -ne 0 )
		{
		write-warning "$(__Line__): Abbruch wegen Fehler!"
		write-warning "Accout: $MAC `t DN: $MACDN"
		exit
		}
 
	if ( -not $Gruppe )
		{
		$Gruppe = $Account.Gruppe
		}
	if ( $Debug ) { write-host "Gruppe:" $Gruppe }
	$SID = (((Get-ADGroup $Gruppe).SID).Value.tostring())
	$SID = $SID.substring($SID.LastIndexOf("-")+1)
	if ( $Debug ) { write-host $Gruppe `t $SID }
	if ( $error.count -ne 0 )
		{
		write-warning "$(__Line__): Abbruch wegen Fehler!"
		exit
		}
	Add-ADGroupMember $Gruppe $MAC
	Set-ADObject -Identity $MACDN -Replace @{primaryGroupID="$SID"}
 
	sleep 1
	Remove-ADGroupmember "Domänen-Benutzer" -Member $MAC -confirm:$false
 
	if ( $error.count -ne 0 )
		{
		write-warning "$(__Line__): Abbruch wegen Fehler!"
		exit
		}
	}

 

MAC-Authentifizierung

Das könnte dir auch gefallen

Schreibe einen Kommentar