Есть ли простой способ использования powershell для отображения всех локальных групп Windows, которые активны на машине, и пользователей, входящих в эти группы? Вторая часть этого вопроса будет заключаться в том, что его можно расширить, чтобы смотреть на несколько машин за раз.Отчеты пользователей и локальных групп с использованием Powershell?
ответ
На самом деле вы можете с типом ярлыка ADSI и прозвища WinNT. Вот пример списка групп и пользователей из вашей собственной машины:
$server="."
$computer = [ADSI]"WinNT://$server,computer"
$computer.psbase.children | where { $_.psbase.schemaClassName -eq 'group' } | foreach {
write-host $_.name
write-host "------"
$group =[ADSI]$_.psbase.Path
$group.psbase.Invoke("Members") | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
write-host
}
Powershell не имеет неотъемлемой поддержки такой функции. Однако легко скопировать команду «net localgroup» с помощью нескольких функций powershell и, таким образом, включить ее в конвейер.
Получить местные группы
function Get-LocalGroups() {
net localgroup | ?{ $_ -match "^\*.*" } | %{ $_.SubString(1) };
}
членов Get Local Group
function Get-LocalGroupMembers() {
param ([string]$groupName = $(throw "Need a name"))
$lines = net localgroup $groupName
$found = $false
for ($i = 0; $i -lt $lines.Length; $i++) {
if ($found) {
if (-not $lines[$i].StartsWith("The command completed")) {
$lines[$i]
}
} elseif ($lines[$i] -match "^----") {
$found = $true;
}
}
}
Петля должна сломаться попадает в строку «Команда завершена», иначе она вернет пустую строку в качестве последнего элемента массива, потому что последняя строка на выходе пустая. – bradvido
Ниже приводится улучшенным вариант сценария Shay Леви, который работает для местных групп с «бесхозными» счетами, которые SIDs не могут быть решены.
$server = "$env:COMPUTERNAME"
$computer = [ADSI]"WinNT://$server,computer"
$computer.psbase.children | where { $_.psbase.schemaClassName -eq 'group' } | foreach {
write-host $_.name
write-host "------"
$group =[ADSI]$_.psbase.Path
$group.psbase.Invoke("Members") | foreach {$_."GetType".Invoke().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
write-host
}
ответ Джей Леви превратился в функцию :)
Function Get-LocalGroupMembers
{
Param(
[string]
$server = "."
)
Try
{
$computer = [ADSI]"WinNT://$($Server),computer"
$computer.psbase.children |
where {
$_.psbase.schemaClassName -eq 'group'
} |
ForEach {
$GroupName = $_.Name.ToString()
$group =[ADSI]$_.psbase.Path
$group.psbase.Invoke("Members") |
foreach {
$memberName = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) -replace "WinNT:", ""
$props = @{
"LocalGroup" = $GroupName
"MemberName" = $memberName
}
$obj = New-Object -TypeName psobject -Property $props
Write-Output $obj
} # foreach members
} # foreach group
}
Catch
{
Throw
}
}
Чтобы получить местные члены группы
Get-LocalGroupMembers
Чтобы получить местных членов группы на другую машину
Get-LocalGroupMembers -Server $Computer
Как отредактировать эту функцию для вывода результатов в текст или файл csv? – salvationishere
- 1. PowerShell - список локальных пользователей и их групп
- 2. локальных пользователей и групп, выводимых в файл
- 3. Аутентификация пользователей SVN с использованием локальных групп Linux?
- 4. как выполнить проверку подлинности против локальных пользователей и групп Windows
- 5. Сценарий Powershell для удаления групп от пользователей
- 6. PowerShell Получение всех пользователей из нескольких групп
- 7. Создание закрытых групп пользователей с использованием Parse
- 8. запрос для локальных групп
- 9. Моделирование пользователей, групп, портфелей и носителей с использованием MVC-подхода
- 10. Контроль доступа с использованием прав и групп пользователей
- 11. Просмотр групп внутри групп с powershell
- 12. Используйте getgrnam() для запроса только локальных групп
- 13. Добавить пользователей в группу локальных пользователей
- 14. Список всех пользователей и групп
- 15. Определение членов локальных групп с помощью C#
- 16. Сравнение групп AD - PowerShell
- 17. Импорт пользователей из AD с использованием PowerShell
- 18. Через Powershell Домашний каталог не создается для локальных пользователей
- 19. TFS на локальных пользователей
- 20. Создание локальных пользователей
- 21. Powershell команды для сравнения групп пользователей AD членства к базовым
- 22. Получение пользователей на основе группы, но пользователей, групп пользователей и групп, хранящихся в отдельных таблицах
- 23. Powershell Добавление пользователей в группы для пересечения лесных групп
- 24. Модель использования нескольких пользователей/групп с использованием Entity Framework 4
- 25. Схема таблицы групп пользователей
- 26. Импорт групп безопасности в гнездо с использованием PowerShell (Add-ADGroupMember)
- 27. Фильтр-член групп пользователей
- 28. Отчеты BigQuery для конечных пользователей
- 29. Обработка пользователей и групп в ExtJS
- 30. Получение групп AD и их пользователей
Я получаю сообщение об ошибке с оператором $ group = [ADSI] $ _. Путь – msvcyc
добавить psbase перед дорогой (т. Е. [ADSI] $ _. Psbase.Path) –
omg спасибо, я бы никогда не нашел это сам! Есть ли способ узнать, являются ли члены локальной группы пользователем или группой? (я хочу перечислить членов администраторов локальной группы, и если член является domaingroup, список его членов) –