Ich benötigte Informationen, die sich in den AD-Benutzerinformationen auf der Registerkarte „Remote Desktop Services Profile“ befinden, die den „Profile Path:“ des Benutzers, den RDS „Local Path“ und das Laufwerk inkl. Pfad des „Home Folder“ im Netzwerk angeben (siehe Abbildung unten).
Bild folgt…
Ich wollte ebenfalls prüfen, ob der in diesem Bildschirm angegebene Pfad erreicht werden kann, so dass der Befehl Test-Path zu diesem Zweck verwendet werden kann. Wenn dieser nicht benötigt wird, kann dieser natürlich auch auskommentiert werden.
Es stellte sich heraus, dass der Befehl Get-ADUser mir diese Informationen nicht liefern konnte, und nach einiger Suche stellte sich dann heraus, dass dies Abfrage über ADSI geschehen musste.
Da nicht zwingend alle Benutzer einen „Home-Folder“ eingegeben haben, kann der Befehl Test-Path zu Fehlern führen, und ich wollte protokollieren, welche Benutzerkonten diese Art von Fehlern verursachten, also fügte ich ein Start-Transkript hinzu, um alle Ausgaben des Skripts zu protokollieren. Außerdem wollte ich diese Informationen in eine CSV-Datei exportieren, also fügte ich am Ende ein Export-CSV hinzu (mit einem „;“ als Trennzeichen, da dies das Standardtrennzeichen für Excel in meinem Land ist).
Wenn ich die Daten über ADSI abrufe, möchte ich die Informationen für folgende Felder prüfen:
TerminalServicesProfilePfad
TerminalServicesHomeDirectory
TerminalServicesHomeDrive
Sie müssen den Searchbase-Teil in diesem Befehl ändern, um die Benutzer aus der OU in Ihrer Domäne abzurufen (es werden nur die Informationen für aktivierte Konten in der angegebenen OU abgerufen):
Get-ADUser -Filter {Enabled -eq $true} -SearchBase ‚OU=UsersOU,DC=contoso,DC=com‘
Das gesamte Skript wird zu:
Start-Transcript $PSScriptRoot\GetRemoteDesktopServicesProfileInformation.txt
$Results = @()
Get-ADUser -Filter {Enabled -eq $true} -SearchBase 'OU=UsersOU,DC=domain,DC=com' | ForEach {
$UserInfo = [ADSI]"LDAP://$($_.distinguishedName)"
Write-Host ("Prosessing {0}" -f $_.distinguishedName)
$Prop = @{
SamAccountname = $_.Samaccountname
TSProfilePath = $UserInfo.TerminalServicesProfilePath
TSHomeDirectory = $UserInfo.TerminalServicesHomeDirectory
TSHomeDrive = $UserInfo.TerminalServicesHomeDrive
PathTestOk = Test-Path -Path $UserInfo.TerminalServicesHomeDirectory
}
$Result = New-Object -TypeName PSObject -Property $Prop
$Results += $Result
}
$Results | Export-Csv $PSScriptRoot\RDSI.csv -Delimiter ";" -NoTypeInformation
Stop-Transcript
Wenn man die ganze Domäne prüfen möchte, kann man das Skript wie folgt abändern:
$DomainDN = (Get-ADDomain).DistinguishedName
Start-Transcript $PSScriptRoot\GetRemoteDesktopServicesProfileInformation.txt
$Results = @()
Get-ADUser -Filter {Enabled -eq $true} -SearchBase $DomainDN | ForEach {
$UserInfo = [ADSI]"LDAP://$($_.distinguishedName)"
Write-Host ("Prosessing {0}" -f $_.distinguishedName)
$Prop = @{
SamAccountname = $_.Samaccountname
TSProfilePath = $UserInfo.TerminalServicesProfilePath
TSHomeDirectory = $UserInfo.TerminalServicesHomeDirectory
TSHomeDrive = $UserInfo.TerminalServicesHomeDrive
PathTestOk = Test-Path -Path $UserInfo.TerminalServicesHomeDirectory
}
$Result = New-Object -TypeName PSObject -Property $Prop
$Results += $Result
}
$Results | Export-Csv $PSScriptRoot\RDProfile.csv -Delimiter ";" -NoTypeInformation
Stop-Transcript