Команда Powershell, использующая список в качестве переменной - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь написать скрипт для просмотра пользователей и групп AD, в которые они входят, в поисках определенной группы, имеющей несколько «подгрупп». пример VPN-GRP-ONE, VPN-GRP-TWO, VPN-GRP-THREE ....

попытался использовать некоторые вещи, которые я нашел в нескольких демонстрациях, но они не работают должным образом, так как он хочет, чтобы импортируемый модуль ActiveDirectory использовал get-aduser, и нам не разрешено устанавливать новые модули, которых у нас уже нет. (У меня нет ActiveDirectory в моих доступных модулях)

Я пытался использовать:

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

Я надеялся на вывод, что я мог бы затем сделать следующий шаг, чтобы передать это в новый текстовый файл и начать извлекать из него то, что мне нужно, чтобы получить только имена групп AD, которые я искал, то есть: ONE, TWO, ТРИ. Но все, что он делает - это открывает текстовый файл и ничего больше.

Ответы [ 3 ]

1 голос
/ 11 мая 2019

Я вижу, что вы уже приняли ответ, но есть и другие подходы, которые могут облегчить вам подобные усилия.Итак, что касается этого ...

--- '(у меня нет ActiveDirectory в моих доступных модулях)' ---

--- нам не разрешено устанавливатьвещи ---

... и вам даже нужно фактически установить / включить их в вашей системе, чтобы использовать их.Это то, для чего предназначен Implicit PSRemoting и / или использующий встроенное пространство имен .Net или adsisearcher.

Как нам один из них:

Использование командлетов PowerShell Active Directory без установки какого-либо программного обеспечения

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

Удаленное использование Powershell командлетов модуля (Remoting Import-Module)

# 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

Работа с Active Directory с помощью адаптера 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()
1 голос
/ 10 мая 2019

Это было не весело, но здесь вы идете - обратите внимание, что вполне возможно, что достаточно длинные имена групп будут усечены:

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.
}

Я расскажу вам, как это работает:

  1. Получить вывод net user для текущего пользователя, прочитанного из файла
  2. Выделить все строки, содержащие *, и преобразовать вывод в строку, обрезая начальные и конечные пробелы.
  3. Повторное разбиение вывода обратно в массив на строку для простоты обработки.
  4. Для каждой строки вывода удалите первые 29 символов и разделите остальную часть текста на символ *.
  5. Удалите все пустые строки из окончательного вывода массива.

Этот причудливый анализ - то, почему вы должны выбрать установку инструментов RSAT.Вот как бы вы сделали это с Get-ADUser:

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

  # Process here
}
0 голосов
/ 10 мая 2019
$list1 = get-content 'C:\Users\MrAoxx\Documents\List1.txt'
foreach ($_ in $list1) {
net user $_ /domain >> C:\Users\MrAoxx\Documents\FullList.txt} 

Это сработало так, как мне было нужно, спасибо @LotPings за ответ.

...