@The0dium

Генерация случайного списка в Powershell?

Добрый день.
Я только начинаю изучать Powershell. До настоящего момента было не много опыта в программировании, поэтому идет туго. Возможно кто-то может натолкнуть на нужную мысль. Буду очень благодарна!

Суть такова:
Дан список компьютеров. Мне необходимо вывести:
1. количество компьютеров в списке (например: 10)
2. количество компьютеров в новом списке(например: 5)
3. случайный список имен компьютеров (имена 5 компьютеров)

Не до конца понимаю, что пишу в скрипте, но пока выполнила первое условие. Скрипт выглядит следующим образом:

$ComputerList = "PC1, PC2, PC3, PC4, PC5, PC6, PC7, PC8, PC9, PC10"
$AllComputer = $computerList.Split(",") 
Write-Host -ForegroundColor Magenta "Количество компьютеров:" $AllComputer.Length
$newList = @()
for ($i =0; $i -eq 4; $i++) {
$index = Get-Random -Maximum $AllComputer.Length
$newList[$i] = $ComputerList[$index]
}
Write-Host -ForegroundColor Green "Количество новых компьютеров:" $newList.Length
Write-Host -ForegroundColor Red "Список новых компьютеров:" $newList
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
$ComputerList = "PC1, PC2, PC3, PC4, PC5, PC6, PC7, PC8, PC9, PC10"
$AllComputer = $computerList.Split(",")
Write-Host -ForegroundColor Magenta "Количество компьютеров:" $AllComputer.Length
$newList = @()
# for ($i =0; $i -eq 4; $i++) { "-eq" - условие выполнения содержимого цикла, у вас оно не выполняется, т.к. "0=4" - Ложь
for ($i =0; $i -le 4; $i++) {
$index = Get-Random -Maximum $AllComputer.Length
# $newList[$i] = $ComputerList[$index] - добавление в список по несуществующему индексу (изначально список пуст), $ComputerList - не список а строка, которую Вы преобразуете в список (строка 2) и складываете в переменную $AllComputer
$newList += $AllComputer[$index]
}
Write-Host -ForegroundColor Green "Количество новых компьютеров:" $newList.Length
Write-Host -ForegroundColor Red "Список новых компьютеров:" $newList
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MaxKozlov Куратор тега PowerShell
Учитывая, что это все-таки powershell, а не basic, я бы написал так:
# Сразу используем массив, а не строку - можно обойтись без деления на части
$ComputerList = "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10"
Write-Host -ForegroundColor Magenta "Количество компьютеров:" $ComputerList.Length

# Get-Random Умеет сам выбирать нужное количество элементов, поданных на вход
# к тому же он выдаёт гарантированно неповторяющиеся элементы, ваш вариант потенциально может выдать, например, два пятых компа
$NewList = $ComputerList | Get-Random -Count 5

Write-Host -ForegroundColor Green "Количество новых компьютеров:" $newList.Length
Write-Host -ForegroundColor Red "Список новых компьютеров:" $newList
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы