2014-10-27 4 views
0

У меня есть файловый сервер, на котором размещаются домашние диски пользователей. Подмножество пользователей имеет переадресацию папки, поэтому имена их папок называются «Мои документы» при просмотре из проводника.Идентификация специальных папок других пользователей в powershell

например.
\ Auser
\ Buser
...
\ KUser
\ Мои документы
\ Мои документы
\ Мои документы
\ Nuser
....

Powershell, кажется, игнорирует специальное имя «Мои документы» и только список имен реальной папки внизу. Свойства powershell обычной папки и папки с перенаправлением кажутся одинаковыми.

Как я могу использовать powershell, чтобы определить, какие папки имеют специальное имя «Мои документы»?

+0

Ваш список папок является бессмысленным, так как он перечисляет одну и ту же папку несколько раз в том же месте. Вы имеете в виду \ Auser \ Мои документы, \ Buser \ Мои документы, \ Cuser \ Мои документы и т. Д.? Или вы пытаетесь заявить, что только некоторые пользователи будут иметь папку «Мои документы», указанную в их общей папке? Если это так, являются ли пользователи, определенные GPO или что-то еще? – TheMadTechnician

+0

Каждая папка является корневым уровнем моих документов. Обычно вы не можете иметь одинаковые дочерние папки, но со специальными папками Explorer будет показывать ярлык как «Мои документы» несколько раз. Папка на самом деле является уникальной папкой имен пользователей, как показано в командной строке powershell и cmd. – RM1358

+0

Папки только называются «Мои документы» из-за файла Desktop.ini внутри них. Фактическое имя каталога не «Мои документы». Вы можете проверить файл Desktop.ini внутри профиля каждого пользователя, но вам будет необходимо прочитать файл и определить, использовало ли оно отображаемое имя «Мои докменты». Обычно это настраивается с помощью «LocalizedResourceName ='. – jscott

ответ

0

Спасибо jscott за подсказку о Desktop.ini

Вот как я получил список, он показывает каждое имя папки пользователей, и если его «нормальным» или одной из специальных перенаправленных папок, определенных в хэш-таблице (» Рабочий стол»„Документы“...)

$SpecialFolders = @{} 
$SpecialFolders.Add("[email protected]%SystemRoot%\system32\shell32.dll,-21770","Documents") 
$SpecialFolders.Add("[email protected]%SystemRoot%\system32\shell32.dll,-21769","Desktop") 
$SpecialFolders.Add("[email protected]%SystemRoot%\system32\shell32.dll,-21798","Downloads") 
$SpecialFolders.Add("[email protected]%SystemRoot%\system32\shell32.dll,-21779","Pictures") 
$SpecialFolders.Add("PersonalizedName=","CustomName") 


$folders = Get-ChildItem "\\someServer\homeDirs" 

$folders | Select Name,@{l="Type";e={ 
    $desktopini = gci $_.fullname 'Desktop.ini' -Force 
    if($desktopini){ 
     $desktopiniContents = Get-Content $desktopini.FullName 
     $SpecialFolders.Keys | %{ 
      if($desktopiniContents -contains $_){$SpecialFolders.Item($_)}   
     } 
    } else { 
     "normal" 
    } 
}} 
0

Если вы ищете специальные перенаправления папок, которые вы найдете в Windows, 7 пользовательских каталогов, по крайней мере, необходимо использовать Get-ChildItem с -Force, который позволяет командлет, чтобы получить элементы, которые пользователь может не получить в противном случае, например, скрытые или системные файлы согласно TechNet.

Get-ChildItem C:\users\SomeUser -Force | Where-Object {$_.Attributes.ToString().Contains("ReparsePoint")} 

Это выше вернет вышеупомянутые папки, так как они имеют атрибут ReparsePoint. Более подробную информацию о нем можно найти here. Минимальный минимум вам нужен -Force за то, что я думаю, что вы ищите.

Смежные вопросы