function get-localgroupmember {
[CmdletBinding()]
param(
[parameter(ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[string[]]$computername = $env:COMPUTERNAME
)
BEGIN {
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$ctype = [System.DirectoryServices.AccountManagement.ContextType]::Machine
}
PROCESS{
foreach ($computer in $computername) {
$context = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ctype, $computer
$idtype = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName
$group = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $idtype, 'Administrators')
$group.Members |
select @{N='Server'; E={$computer}}, @{N='Domain'; E={$_.Context.Name}}, samaccountName
} # end foreach
} # end PROCESS
}
"Win12R2", "W12SUS" | get-localgroupmember
То, что я хочу, это выход, чтобы выглядеть следующим образом, и я хочу, чтобы пометить пользователей в группу администраторов, которые не являются частью нашей стандартной установки. На самом деле я хочу игнорировать учетные записи SAM, являющиеся учетными записями домена, но помечая их на данный момент. То, что происходит, - это цикл через учетные записи SAM для создания этого вывода. Однако, когда машина отключена, я тоже должен это отметить.Список всех учетных записей локальных администраторов за исключением администратора домена и локального администратора
Я также не хочу использовать ValueFromPipeline
, а получить список имен компьютеров из этой команды $allComputers = Get-ADComputer -Filter 'PasswordLastSet -ge $date' -properties PasswordLastSet | select Name
и затем использовать эту переменную в качестве источника проходным.
Это мой пересмотренный код, но у меня возникают проблемы, создающие пользовательский объект, чтобы добавить в массив, когда, кажется, зацикливание в $group.Members |select @{N='Server'; E={$computer}}, @{N='Domain'; E={$_.Context.Name}}, samaccountName
function get-localgroupmember {
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,HelpMessage="Enter PC")]
[ValidateNotNullorEmpty()]
[object]$computername = $null
)
BEGIN {
$newArray = @();
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$ctype = [System.DirectoryServices.AccountManagement.ContextType]::Machine
}
PROCESS{
foreach ($computer in $computername) {
If (Test-Connection -ComputerName $computer.name -Quiet -Count 1) {
try {
$context = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ctype, $computer.name
$idtype = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName
$group = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $idtype, 'Administrators')
$group.Members | select @{N='Server'; E={$computer.name}}, @{N='Domain'; E={$_.Context.Name}}, samaccountName
$objComputer = [pscustomobject] @{
Server = $computer.name
Domain = $group.Members | select @{N='Domain'; E={$_.Context.Name}}
Account = $Computer.samaccountName
}
} catch {
$objComputer = [pscustomobject] @{
Server = $computer.name
Domain = "Error"
Account = "Error"
}
}
} else {
$objComputer = [pscustomobject] @{
Server = $computer.name
Domain = "Off-Line"
Account = "Off-Line"
}
} $arrayNew += $objComputer
} # end foreach
} # end PROCESS
return $arrayNew
}
$date = [DateTime]::Today.AddDays(-1)
$allComputers = Get-ADComputer -Filter 'PasswordLastSet -ge $date' -properties PasswordLastSet | select Name
get-localgroupmember -computername $allComputers | Out-GridView
@ Ansgar-Wiechers спасибо за форматирование исходного! Как ты это сделал? Я сейчас и только учился. –
Код для него: ''. Кажется, нравится иметь пустую строку, отделяющую ее от чего-либо еще, поэтому я бы поставил ее наверху, поместил пробел под нее, а затем сделал свой пост. '' тоже должен работать, но я только начал использовать первый, когда это необходимо. – TheMadTechnician
В последнее время мне пришлось сделать что-то почти такое, для проверки лицензии на программное обеспечение. Позвольте мне посмотреть, могу ли я просеять его, чтобы подстроить одну вещь для того, что вы хотите видеть. – ssaviers