Estoy tratando de escribir un script para mirar a los usuarios y de qué grupos de AD son parte, buscando un grupo específico que tenga múltiples "subgrupos". ejemplo VPN-GRP-ONE, VPN-GRP-TWO, VPN-GRP-THREE ...

Intenté usar algunas cosas que encontré en algunas demostraciones, pero no funciona bien, ya que quiere que el módulo ActiveDirectory sea importado para usar get-aduser y no podemos instalar nuevos módulos que ya no tenemos. (No tengo ActiveDirectory en mis módulos disponibles)

Estaba tratando de usar:

$list1 = C:\Users\MrAoxx\Documents\List1.txt
foreach ($_ in $list1) {
net user $_ /domain}

Esperaba una salida que luego podría dar el siguiente paso para canalizar eso a un nuevo archivo de texto y comenzar a eliminar lo que necesitaba para obtener solo los nombres de grupo de AD que estaba buscando, es decir: UNO, DOS, TRES. Pero todo lo que hace es abrir el archivo txt y nada más.

1
Aoxx 10 may. 2019 a las 20:23

3 respuestas

La mejor respuesta
$list1 = get-content 'C:\Users\MrAoxx\Documents\List1.txt'
foreach ($_ in $list1) {
net user $_ /domain >> C:\Users\MrAoxx\Documents\FullList.txt} 

Esto funcionó como lo necesitaba, gracias a @LotPings por la respuesta.

0
Aoxx 10 may. 2019 a las 19:07

Veo que ya ha aceptado una respuesta, sin embargo, aquí hay otros enfoques para tal vez facilitar este tipo de esfuerzo para usted. Entonces, en cuanto a esto ...

--- '(No tengo Active Directory en mis módulos disponibles)' ---

--- no tenemos permitido instalar cosas ---

... e incluso necesita instalarlos / habilitarlos en su sistema para usarlos. Esto es para lo que sirve PSRemoting implícito, o para usar el espacio de nombres .Net incorporado o adsisearcher.

Cómo para nosotros:

Use los cmdlets de ActiveShell de Active Directory sin instalar ningún software

Enter-PSSession -ComputerName dc1 –credential nwtraders\administrator
Set-Location c:\
Import-Module activedirectory

Uso remoto de Powershell de Comandos de módulo (Módulo de importación remota)

# Create a Powershell remote session to a server with the #commandlets installed.
$Session = New-PSsession -Computername Server1

# Use the newly created remote Powershell session to send a #command to that session
Invoke-Command -Command {Import-Module ActiveDirectory} -Session $Session

# Use that session with the modules to add the available 
# commandlets to your existing Powershell command shell with a 
# new command name prefix.
Import-PSSession -Session $Session -Module ActiveDirectory -Prefix RM

Trabajar con Active Directory con el adaptador PowerShell ADSI

# Searching for an object
$Searcher = New-Object DirectoryServices.DirectorySearcher 
$Searcher.Filter = '(&(objectCategory=person)(anr=gusev))'
$Searcher.SearchRoot = 'LDAP://OU=Laptops,OU=Computers,DC=contoso,DC=com'
$Searcher.FindAll()
2
postanote 11 may. 2019 a las 01:28

Esto no fue divertido, pero aquí tienes: ten en cuenta que es absolutamente posible que los nombres de grupo lo suficientemente largos se trunqueen:

Get-Content C:\Users\MrAoxx\Documents\List1.txt | Foreach-Object {
  $partOfGroups = ( ( net user $_ /domain | select-string '\*' | out-string ).Trim() -split "`r`n" ) |
    Foreach-Object { $_.Substring(29).Trim() -split '\*' } |
    Where-Object { -Not [String]::IsNullOrWhiteSpace($_) }

  # You can look for specific groups in $partOfGroups if that user is part
  # of any particular group, and process for that user here.
}

Te mostraré cómo funciona esto:

  1. Obtenga la salida net user para el usuario actual leído del archivo
  2. Seleccione todas las líneas que contienen un * y convierta la salida en una cadena, recortando los espacios iniciales y finales.
  3. Vuelva a dividir la salida en una matriz por línea para facilitar el procesamiento.
  4. Para cada línea de salida, elimine los primeros 29 caracteres y divida el resto del texto por el carácter *.
  5. Elimine las cadenas vacías de la salida de la matriz final.

Este análisis de fantasía es la razón por la que debería optar por instalar las herramientas RSAT. Así es como lo haría con Get-ADUser:

Get-Content C:\Users\MrAoxx\Documents\List1.txt | Foreach-Object {
  $groups = ( ( Get-ADUser $_ -Property MemberOf ).MemberOf | Get-AdGroup ).Name

  # Process here
}
1
Bender the Greatest 10 may. 2019 a las 19:25