Найти папку документов пользователя служб терминалов

Я пытаюсь разрешить пользователям использовать свои локальные сканеры с сервером терминалов через страницу aspx IIS, содержащую плагин для браузера. Плагин может сканировать файлы и передавать данные на страницу aspx, которая загружает файлы на сервер.

Я использую HttpContext.Current.User.Identity.Name, чтобы получить строку, содержащую имя удаленного пользователя. Как найти папку с документами пользователя на терминальном сервере?


person James    schedule 13.01.2012    source источник


Ответы (1)


Немного продвинулся. Вот способ найти путь для известного имени пользователя с помощью Powershell:

$user = Get-WmiObject Win32_UserAccount | Where-Object { $_.Name -eq 'known_username' }
cd 'HKLM:\software\Microsoft\Windows NT\CurrentVersion\ProfileList'
$key = Get-Item $user.SID
$saveLocation = $key.GetValue("ProfileImagePath")

Вот версия С#:

string loginName = HttpContext.Current.User.Identity.Name;
Regex r = new Regex(@"\w+[\\]");
string userName = r.Replace(loginName, "");
throw new System.ArgumentException("Debug: '" + HttpContext.Current.User.Identity.IsAuthenticated.ToString() +"'", "userName");
SelectQuery sQuery = new SelectQuery("Win32_UserAccount", "name='" + userName + "'");
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(sQuery);
string sid = "";
foreach (ManagementObject mObject in mSearcher.Get()) 
{
    sid = mObject["SID"].ToString();
    break; //mSearcher.Get() is not indexable. Behold the hackyness!
}
string saveLocation = Microsoft.Win32.Registry.GetValue(
    "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\" + sid,
    "ProfileImagePath", null).ToString();

C# не мой родной язык; вероятно, есть методы достижения этого, которые менее тупы. Но это действительно работает.

person James    schedule 16.01.2012