Как получить имя ключа объекта хэш-таблицы, переданное функции в PowerShell?

#powershell

Вопрос:

У меня есть эта тестовая установка:

 [PSObject]$Obj = @{}

$Obj.add("Obj1", @{A="1"; B="2"})

$Obj.add("Obj2", @{A="3"; B="4"})

function Test-Function ([PSObject]$O) {
    $O
}

Test-Function $Obj["Obj1"]
 

В тесте функции-Функции я хотел бы получить имя ключа O$ (в данном случае Obj1), например:

 O$.Key
 

но я не могу найти недвижимость для этого. Я пытался найти его с помощью:

 $O | Get-Member
$O.PSObject
$O.PSObject | Get-Member
 

но не повезло, и я не могу найти другой пост об этом.

Я знаю, что могу просто изменить его на:

 $Obj.add("Obj1", @{ID="Obj1"; A="1"; B="2"})
 

но это кажется излишним.

Любая помощь была бы очень признательна, спасибо 🙂

Комментарии:

1. причина отсутствия ключа при запуске Test-Function $Obj["Obj1"] заключается в том, что вы запрашиваете значение передаваемого вами ключа (который является «Obj1»). если вы знаете, какой ключ вы запрашиваете, то зачем вам его возвращать?

2. Спасибо, хорошая мысль, и вы правы. В тот момент, когда я вызываю функцию, я знаю, что это, например, Obj1, но внутри функции я этого не знаю, и именно здесь она мне действительно нужна для дальнейшей обработки. Я надеюсь, что это объяснение имеет смысл 🙂

Ответ №1:

итак, с вашим комментарием о том, что вам нужен объект внутри функции, я отредактировал ваш пример следующим образом. теперь функция принимает объект и ключ в качестве двух параметров. таким образом, вы сможете работать с ключом еще больше в рамках функции.

 [PSObject]$Obj = @{}
$Obj.add("Obj1", @{A="1"; B="2"})
$Obj.add("Obj2", @{A="3"; B="4"})

function Test-Function ($object, $key) {
    $object[$key]
    Write-Host $key
}

Test-Function -object $Obj -key "Obj1"
 

Комментарии:

1. Хммм, это действительно удовлетворит мои потребности — Большое вам спасибо 🙂