#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. Хммм, это действительно удовлетворит мои потребности — Большое вам спасибо 🙂