| Chcete zjistit seznam místních uživatelských účtů (local user account), nebo sdílených adresářů? Obvykle použijete WMI - Win32_UserAccount, nebo Win32_Share. Jenže tohle má určité omezení. Vzdáleně na to potřebujete lokální Administrators oprávnění na tom vzdáleném počítači.
Takže se zase vraťme zpět do školky a použijme ADSI rozhraní. Dneska je to hlavně na přístup do LDAP Active Directory, ale to není jeho jediná funkce. Hodně se zapomíná na jeho SMB interface, přes který se dá zjistit seznam uživatelských účtů, nebo sdílených adresářů a služeb.
Seznam uživatelských účtů a skupin
$server = 'data1'
$winnt = [ADSI] "WinNT://$server"
$winnt.psbase.Children | ? { $_.SchemaClassName -eq 'User' } | Select Name, UserFlags, PasswordAge, BadPasswordAttempts, @{ n = 'SID' ; e = { (New-Object System.Security.Principal.SecurityIdentifier $_.objectSid.Value, 0).Value } } | ft -Auto
$winnt.psbase.Children | ? { $_.SchemaClassName -eq 'Group' } | Select Name, @{ n = 'SID' ; e = { (New-Object System.Security.Principal.SecurityIdentifier $_.objectSid.Value, 0).Value } } | ft -Auto
Seznam služeb
$server = 'data1'
$winnt = [ADSI] "WinNT://$server"
$winnt.psbase.Children | ? { $_.SchemaClassName -eq 'Service' } | Select Name, DisplayName, Path, StartType
Seznam sdílených adresářů
$server = 'data1'
$lanManServer = [ADSI] "WinNT://$server/LanManServer"
$lanManServer.psbase.Children | Select Name, Path, Description
Na závěr bych upozornil, že tohle jde zjistit vždycky vzdáleně, stačí být alespoň členem skupiny Authenticated Users, mít Access this computer from network právo (user right) a neměnit výchozí oprávnění na LanManServer objektu. |