Назовите переменную после переменной.(цикл по лесам AD и подсчет серверов и создание отчетов) - PullRequest
1 голос
/ 31 декабря 2011

Я считаю серверы в трех разных лесах и хочу отправить результаты по электронной почте.У меня есть целое число ($ i), которое увеличивается для каждого сервера, но я сбрасываю это число для каждого леса.

Можно ли создать переменную из имени леса ($ forest) и $я считаю?Я также хотел бы, чтобы моя почта учитывала количество серверов в лесах, поэтому это было бы динамично.

Наверное, я спрашиваю, могу ли я назвать переменную после переменной .. Например, $ forest. $ I илипохоже ...

Пожалуйста, помогите!И счастливого нового года !!

Редактировать:

# Get password (this is secure!)
$password = Read-Host "Enter password" -AsSecureString

# Create a container for your objects.
$forestContainer = @()

$forests = "corp.foresta.com","corp.forestb.com","corp.forestc.com"
foreach ($forest in $forests) {

# Create credentials for forest
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "$forest\administrator",$password

# Connect to current forest
$forestconnection = Connect-QADService -Service $forest -Credential $credentials

$servers = Get-QADComputer -WarningAction SilentlyContinue -OSName *server*,*hyper*
echo $($servers.Length)

$currentForest = New-Object PsObject -Property @{
        Name = $forest
        Count = $($servers.Length)
}
$forestContainer += $currentForest

}

Ответы [ 2 ]

3 голосов
/ 31 декабря 2011

Да, вы можете сделать это. То, что вы хотите сделать, это создать карту / таблицу между лесом и счетчиком для леса.

Что-то вроде

Forest  count
======  ======
F1      120
F2      120

Доступны три подхода

  1. Использовать числовое индексирование
  2. Использовать HashTable для именованной индексации
  3. Использовать динамические свойства для именованной индексации

Давайте посмотрим на каждый

1. Использовать числовое индексирование

$fList = @() #initialize an empty array
$fList += $count # add a new entry
$fList += $count # add another entry
$fList # show all values
$fList[0] # get the 1st value
$fList[1] = 30 # change the 2nd value

числовое индексирование отлично подходит, если вы знаете порядок значений в таблице.

2. Используйте HashTable для именованной индексации

$fHT = @{} # hold counts of each forest
$forest = "example"
$count = 100
$fHT.$forest = $count
$fHT # show all
$fHT.$forest # show the count for the current value of $forest

3. Использовать динамические свойства для именованной индексации

$fDP = new-object PSObject
$fDP | add-member -membertype noteproperty -name $forest -value $count

и, как предполагает Энди, их даже можно объединить

$fHT = @{} # hold counts of each forest
$forest = "example forest 1"
$count = 100
$fHT.$forest = $count
$fDP = New-Object PSObject -Property $fHT
$fDP # show all
$fDP.$forest # show the count for the current value of $forest
2 голосов
/ 31 декабря 2011

Как насчет создания пользовательского объекта. Создание собственного объекта - отличный способ связать кусочки данных вместе. В вашем случае вы хотели бы связать число с именем леса или объекта леса, созданного чем-то другим. Независимо от того, работаете ли вы со списком строк или объектов с именами лесов, вы можете использовать этот подход.

Создайте контейнер (массив) для ваших пользовательских объектов.

$forestContainer = @()

По мере прохождения по лесам создайте для каждого из них пользовательский объект и добавьте его в массив. В этом примере $myForests является либо набором объектов, либо строковым массивом имен.

$i = 1
foreach ($forest in $myForests) {
    # Create a custom object associating all the data you want.
    $currentForest = New-Object PsObject -Property @{
            Forest = $forest
            Count = $i
            # Note: You can add as many properties to the object here as you like.
    }
    $forestContainer += $currentForest
    $i += 1
}

Преимущество этого подхода в том, что вы сможете легко использовать массив, заполненный вашими новыми объектами, с другими командлетами Powershell. Например:

$forestContainer | where {$_.Count -lt 2}

Или

$forestContainer | format-table

Или

$forestContainer | Out-GridView

Чтобы получить доступ к свойству Count, которое содержит текущее целое число, когда этот лес был обработан, вы можете использовать следующий синтаксис:

$forestContainer[0].Count

Надеюсь, вы сможете применить это к своему коду. Если вы разместите часть своего кода, я могу помочь вам больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...