Войти

Показать полную графическую версию : [Решено] Привязать св-ва к массивам


c4uran
19-07-2018, 08:19
Есть такая задача:
По ad запрашиваем пользователей (или группы или членство групп не важно что, можно просто файлики), допустим с фильтром - город, на выходе получаем всех пользователей из это города (с нумерацией 1,2,3...), далее выдается запрос от шела «выберете пользователей» чтобы добавить их в массив, (так же через запятую вводим нужные номера пользователей), на выходе массив с выбранными пользователями, как это сделать?

Busla
19-07-2018, 09:46
c4uran, а в чём проблема?

запрос от шела «выберете пользователей» чтобы добавить их в массив, (так же через запятую вводим нужные номера пользователей) »
не издевайтесь над пользователями, используйте Out-GridView

c4uran
19-07-2018, 13:58
Мне нужен интерактив, для создания костыля :(

get-aduser
Вывод:
1 Петро
2 Васе
3 Андре

$user = введите номер сотрудника: (ввожу 1,3)

Получаю:
$user = @{ Петро, Андре }

Iska
19-07-2018, 16:22
c4uran, коллега Busla, конечно, пошутил. Создайте форму, поместите на неё ListBox/ListView, выводите туда потребный перечень и делайте в нём выбор, добавьте кнопку, по которой после осуществления выбора будут выполняться потребные действия над выбранными строками.

P.S. Нет, номер, конечно, тоже имеет право на жизнь, если пользователей не будет больше десятка, або двух.

c4uran
19-07-2018, 17:27
Никогда не делал ничего подбного, можно пару примеров, там цмдлеты, примеры удачного использования

greg zakharov
19-07-2018, 17:32
Вроде бы автор и не заикался о сценарии с GUI, речь о самом хосте надо полагать. Тогда проще создать отдельный буфер (по принципу того, как это реализовано в less), отобразить в нем данные, из которых нужно сделать выбор (с прокруткой или без - на выбор), забрать, скажем, select'ом данные после чего отправить данные в основной буфер, а созданный - удалить.
P.S. $user = @{Петро, Андре} - скорее можно схлопотать трейсбек, нежели массив, ибо здесь попытка создать хеш.

Busla
19-07-2018, 18:44
Никогда не делал ничего подбного »
программ на PowerShell ?

Kazun
19-07-2018, 19:14
Как выше уже сказано, можно использовать Out-GridView с параметром -PassThru для выбора элементов и передачи по конвейеру. Выбор элементов по Ctrl или Shift и длаее нажимаем OK.

$p = Get-Process | Out-GridView -PassThru
$p | Foreach {$p.Name}

Можно установить модуль https://github.com/chrisseroka/ps-menu

Для примера выберем пользователей и у выбранных пользоавателей получим город:

$users = Get-ADUser -Filter "City -like 'Иваново'" -Properties city
$index = menu @($users.Name) -ReturnIndex -Multiselect
foreach($i in $index) {
"{0} - {1}" -f $users[$i].name,$users[$i].city
}



https://image.ibb.co/hNNURy/menu_Copy.jpg

greg zakharov
19-07-2018, 19:26
Kazun, не знаю согласитесь вы или нет, но у ps-menu есть один небольшой недостаток: вывод меню селектора в текущий буфер, - хотя через $host сие можно исправить. В выходные постараюсь написать код.

Iska
19-07-2018, 19:45
можно использовать Out-GridView с параметром -PassThru для выбора элементов и передачи по конвейеру. Выбор элементов по Ctrl или Shift и длаее нажимаем OK. »
Даже не знаю — то ли я знал, но забыл, то ли вовсе тупо не знал :(.

Busla
20-07-2018, 10:09
можно использовать Out-GridView с параметром -PassThru для выбора элементов и передачи по конвейеру »
нет, -PassThru "раздвоит поток" - на выходе будет то же, что и на входе
чтобы Out-GridView возвращал выделенные элементы нужно указать параметр -OutputMode Multiple

Iska
20-07-2018, 10:34
нет, -PassThru "раздвоит поток" - на выходе будет то же, что и на входе »
Поясните, пожалуйста?

Kazun
20-07-2018, 10:53
нет, -PassThru "раздвоит поток" - на выходе будет то же, что и на входе
чтобы Out-GridView возвращал выделенные элементы нужно указать параметр -OutputMode Multiple »

- Multiple. Zero, one, or many items. Use this value when the next command can take multiple input objects. This
value is equivalent to the Passthru parameter.

Busla
20-07-2018, 12:12
Iska, да, тут я не совсем прав. PassThru потому и не обозвали общим параметром, что он для каждого командлета работает по-разному. Я неудачно обобщил свой опыт его использования на все случаи. Для Out-GridView -PassThru - эквивалент -OutputMode Multiple (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-gridview?view=powershell-5.1)

Wheee111
22-07-2018, 21:36
$Users = Get-ADUser -Filter {Enabled -eq $False} | Select -First 10
$Users | Add-Member @{"Num" = 0} -PassThru -Force | Out-Null
$i = 1 ; $users | %{ $_.Num = $i ; $i++ }
$users | Select Num, Name

c4uran
26-07-2018, 09:43
Wheee111, То что нужно, спс

Kazun, Тоже интересное решение, буду тестировать, спасибо




© OSzone.net 2001-2012