Я на Windows Server 2008 R2 и мне нужна выдержка из списка локальных профилей, поэтому я использую Powershell, чтобы заглянуть в реестр и получить то, что я хочу:
$path = 'Registry::HKey_Local_Machine\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\*'
$items = Get-ItemProperty -path $path
Foreach ($item in $items) {
$objUser = New-Object
System.Security.Principal.SecurityIdentifier($item.PSChildName)
$objName = $objUser.Translate([System.Security.Principal.NTAccount])
$item.PSChildName = $objName.value
}
echo $items | Select-Object -Property PSChildName | Export-Csv
C:\scripts\PSScripts\UserProfile.csv -Encoding UTF8
Он работал с другой машиной, использующей Windows Server 2012 R2, но здесь я получил много ошибок, но всегда одна и та же:
Исключение вызывает "Translate" с аргументом (ами) "1": "Некоторые или все"
ссылки на личность не могут быть переведены.
C: \ scripts \ PSScripts \ users_profile.ps1: 5 char: 34
+ $ objName = $ objUser.Translate <<<< ([System.Security.Principal.NTAccount])
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: DotNetMethodException </p>
Файл .csv создан, но с проблемами, такими как профиль, отображаемый более одного раза, например:
DOMAIN\User1
DOMAIN\User2
DOMAIN\User3
DOMAIN\User3
DOMAIN\User4
DOMAIN\User5
DOMAIN\User5
DOMAIN\User5
DOMAIN\User6
Есть ли разница между WS2008 и WS2012, которая может вызвать эту проблему? Или это что-то еще?