2015-01-16 2 views
0

Я вызываю функцию PS, передавая ей строку и переменную данных. Я хочу извлечь все предметы в datatable и сохранить их в объекте.Значение, не сохраняющееся в переменной powershell

Вот мой код из моего сценария:

Function myFunc 
{ 
    param ($id, $dt) 
    $data = $dt | where-object ($_.ID -eq $ID) 
} 

$myVar = myFunc -id "stringID" -dt myDataTable 

Когда это работает моя data переменная остается пустым.

У меня есть точка останова, расположенная в конце моего проекта, поэтому я могу попробовать играть со значениями. Когда я пытаюсь и воссоздаю вопрос, он работает:

[DBG]: PS C:\WINDOWS\system32>> $abc = $myDataTable | where-object {$_.ID -eq $ID} 

[DBG]: PS C:\WINDOWS\system32>> $abc 


ID   : //info here 
Location : //info here 
Managedr : //info here 

Он просто не будет работать в моем подлинном сценарии.

+2

С одной стороны, ваша функция ничего не возвращает, потому что вы захватываете весь вывод в переменной '$ data'. Кроме того, существует ли '' '' '-dt myDataTable' опечатка в вашем вопросе или в вашем подлинном скрипте? И почему у вас есть этот параметр в первую очередь, если вы его не используете? –

+0

Извините за поздний ответ. Да, в моем первоначальном вопросе была опечатка. Моя функция должна читать '$ data = $ dt | где-object ($ _. ID -eq $ ID) ' – Johnrad

ответ

4

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

Function myFunc 
{ 
    param ($id, $dt) 
    $myDataTable | where-object ($_.ID -eq $ID) 
} 

$myVar = myFunc -id "stringID" -dt myDataTable 
+2

Johnrad просто помните, что я думаю, вам нужно изменить строку на' $ dt | where-object ($ _. ID -eq $ ID) ', поскольку в объем функции нет переменной, называемой' $ myDataTable' – Matt

Смежные вопросы