Почему PowerShell создает Char-массив вместо String Array? - PullRequest
0 голосов
/ 13 февраля 2020

Когда я выводю элементы внутри массива массива (например: $ data_array [0] [0], я получаю только символ. Почему это так? Я ожидал строку LAP-150 для [0] [ 0] позиция этого массива.

import-module activedirectory
$domain_laptops = get-adcomputer -filter 'Name -like "LAP-150"' -properties operatingsystem, description | select name, description, operatingsystem
$data_array = @()

foreach ($laptop in $domain_laptops){
        $bde = manage-bde -computername $laptop.name -status
        $encryptionstatus=(manage-bde -status -computername $laptop.name | where {$_ -match 'Conversion Status'})
        if ($encryptionstatus){
            $encryptionStatus=$encryptionstatus.split(":")[1].trim()
        }
        else{
            $EncryptionStatus="Not Found..."
        }
        $data_array += ,($laptop.name,$laptop.description,$laptop.operatingsystem,$encryptionstatus)
    }


write-output $data_array[0][0]

Выводом вышеупомянутого скрипта является просто символ "L", который является первым символом в переменной $ laptop.name. Где я иду неправильно? Я предполагаю это связано с тем, как я добавляю данные в массив, но я пробовал разные комбинации скобок, запятых, без скобок и т. д. c безрезультатно.

1 Ответ

0 голосов
/ 13 февраля 2020

При выполнении следующей команды

$data_array += ($laptop.name,$laptop.description,$laptop.operatingsystem,$encryptionstatus)

Удаляет знак , после +=.

Выполнены тесты , чтобы показать вам, как это работает

$array = @()
$array = 1, 2, 3, 4
$array.Length   //-> 4

$array2 = @()
$array2 = , 1, 2
$array2.Length  //-> 2

$array3 = @()
$array3 = , (1, 2)
$array3.Length  //-> 1

$array4 = @()
$array4= @(), (1, 2)
$array4.Length  //-> 2

Когда вы используете ,, вы должны определить один и тот же тип элемента до и после. Во время ваших итераций вы используете += , (something). Слева от него нет никаких данных, поэтому весь текст после того, как он считается строкой, разделенной запятыми.

Для двумерных массивов я бы рекомендовал использовать га sh в миксе,

$data_array += @{name=$laptop.name;description=$laptop.description;os=$laptop.operatingsystem;encryption=$encryptionstatus}

$data_array[0]["name"] // Prints the name of first laptop in array.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...