[PowerShell] Никак не могу понять, как возвращать объекты.

agaaaa

 
function global:GetTable([string]$local:table)
{
[System.Reflection.Assembly]::Load("System.Data.OracleClient, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089") | out-null

$local:adapter = new-object System.Data.OracleClient.OracleDataAdapter
-argumentList ("select * from " + $local:table
"Data Source=source;User ID=usr;Password = psw;Unicode=True"
$local:dtable = new-object System.Data.DataTable
$local:adapter.Fill($local:dtable)
return $local:dtable
}

Если после объявления функции написать $x = GetTable "TABLE_NAME", то в $x заносится значение типа Int32. Как добиться того, чтобы туда записывалась полученная таблица?

evgen5555

А ведь говорили, что на баш похоже...

agaaaa

Имхо, баш не поддерживает объекты.

Olenenok

лучше бы на питон сделали похожим, или к sh прикрутили объекты

Dasar

google: powershell function
уже вторая ссылка подробно разбирает, как возвращается значение из функции в powershell-е
http://blogs.msdn.com/powershell/archive/2006/07/31/Suppress...
смысл в том, что у тебя Fill в null не перекинут, соответственно его результат и возвращается.

Marinavo_0507

А чем этот странный язык от C# вообще отличается, кроме несколько извратного синтаксиса?

System.Data.OracleClient.OracleDataAdapter
-argumentList ("select * from " + $local:table
"Data Source=source;User ID=usr;Password = psw;Unicode=True"

Местный модератор как-то говорил, что так пишут только униксоиды и прочие неудачники. Нужно XML юзать, чтоб не было SQL injection.

katrin2201

Местный модератор как-то говорил, что так пишут только униксоиды и прочие неудачники. Нужно XML юзать, чтоб не было SQL injection.
Почему сразу униксоиды и неудачники?
Валидировать же вводимые пользователем данные можно сразу после ввода, а не в каждой вызываемой функции, которая их юзает.
//Надо мне еще о-иммунитет выработать, и жизнь будет прекрасна... =)

Marinavo_0507

> Почему сразу униксоиды и неудачники?
Ну он вроде говорил про просто униксоидов, кажется.
Про неудачников добавил я, когда посмотрел на этот код - он ведь не для уникса.
> Валидировать же вводимые пользователем данные можно сразу после ввода
Валидировать? То есть не пропускать спецсимволы?
А если их нужно передать базе? Вот и усложняешь код разными *escape

katrin2201

Валидировать? То есть не пропускать спецсимволы?
А если их нужно передать базе? Вот и усложняешь код разными *escape
Ну, во-первых, если уж на то пошло, то моя имха - валидацией\ескейпом\прочей_лабудой должна заниматься прослойка между БД и языком. В этом случае тебя вообще ничего не парит, и незачем изобретать велосипед.
Во-вторых, в данном случае мы вообще не знаем, откуда берется аргумент этой функции. Читается ли он из конфига, вводится ли пользователем, захаркоуден ли он в код. Не будешь же ты во втором случае писать инпут юзера в xml-ку, а потом оттуда читать, правда? =) А в первом и третьем случае валидацию вообще, имхо, мало смысла делать.

katrin2201

> Почему сразу униксоиды и неудачники?
Ну он вроде говорил про просто униксоидов, кажется.
Про неудачников добавил я, когда посмотрел на этот код - он ведь не для уникса.
Не буду очередной флейм разводить, и молча проглочу =)

Marinavo_0507

Ну, во-первых, если уж на то пошло, то моя имха - валидацией\ескейпом\прочей_лабудой должна заниматься прослойка между БД и языком.
Ну да. И в данном коде оная прослойка явно не используется.
> Не будешь же ты во втором случае писать инпут юзера в xml-ку, а потом
> оттуда читать, правда?

katrin2201

Ну да. И в данном коде оная прослойка явно не используется.
Как и xml =)
> Не будешь же ты во втором случае писать инпут юзера в xml-ку, а потом
> оттуда читать, правда?
Хм. Хочешь сказать, что к Ораклу теперь запросы можно xml'ями писать?

Marinavo_0507

> Как и xml
Ну там подразумевалось, что в Едином API(tm) эта прослойка использует (или должна использовать) xml в качестве промежуточного языка.
> Хочешь сказать, что к Ораклу теперь запросы можно xml'ями писать?
А что, разве нельзя? По-моему, все ведущие вендоры уже давно включили поддержку XML, так как это модно.

katrin2201

> Хочешь сказать, что к Ораклу теперь запросы можно xml'ями писать?
А что, разве нельзя? По-моему, все ведущие вендоры уже давно включили поддержку XML, так как это модно.
Не знаю, я не в теме, поэтому и спросил =)

Marinavo_0507

Уж XPath-то наверняка кушает.
Кроме того, есть отдельные трансляторы из XPath и XQuery в SQL, которые стандартный SQL выдают.

katrin2201

Судя по гуглу, похоже кушает =)

Marinavo_0507

Интересует всё-таки первый вопрос. Эта поделка чем-то принципиально отличается от C# в лучшую сторону (для применения в скриптах)?
Пока что видны все те же вызовы API, только какие-то навороты в синтаксисе, чтоб код длиннее получался.

katrin2201

не знаю, не в теме
я это один раз поставил, ужаснулся временем загрузки, поценил галюциногенный синтаксис, и стер +)

Marinavo_0507

нарыл в msdn следущее
там специальный упрощённый синтаксис, поддерживающий read-eval-print и пайпы для команд специального типа - .net объектов со специальным интерфейсом
если с юниксами сравнивать, то похож скорее на какой-нибудь perl shell по устройству

bleyman

Ну да, он изначально позиционируется всё-таки как _интерактивный_ скриптовый язык. Поэтому программировать что-нибудь сложное на нём как-то неприкольно, а вот пару ключиков из регистри потереть — самое то.
И я всё никак не могу возботать синтаксис до конца =( Недавно переименовывал кучу файликов вида "blabla-23-blablabla.bla" с выдиранием числа, расширением до двух символов и вставлением в другой текст, типа сабы совмещал с авишками, так вот, полчаса пытался наваять эту хню на павершелле, потом плюнул и нафигачил на шарпе процедуру "получить новое имя по старому" и вызывал её из скрипта.

Marinavo_0507

Ну да, он изначально позиционируется всё-таки как _интерактивный_ скриптовый язык
Это нужно вводить интерактивно? Видимо, это для тех, кто твёрд в вере.

Dasar

> Это нужно вводить интерактивно?
с интелисенсом лучше длинные имена, т.к. даже не обращаясь к документации можно вспомнить, что данная функция делает.
нажав l и увидев подсказку ls - тяжело вспомнить, а что этот ls именно делает.
особенно это важно в мультиязыковом окружении, когда ls в разных языках может делать противоположные вещи, и в голове все эти различия держать не хочется.

Marinavo_0507

В твоей вере никто и не сомневался.

Dasar

если говорить про идеальную интерактивную среду, то удобно было бы - если в intellisense показывается и длинные имена, и алиасы к ним, после ввода длинное имя заменяется на короткое.
при этом любой кусок кода быстрым движением можно опять обратно "распаковать" - вместо алиасов поставив длинные имена.
ps
проблему хорошо видно на регулярных выражениях, потому что либо регулярными выражениями надо постоянно заниматься, чтобы по памяти помнить все сокращения, либо получается, вообще, их не использовать - потому что легко грохается куча времени даже на написание/чтение и отладку даже простейшего рег. выражения

Marinavo_0507

В Графической ОС(tm) должны быть иконки, а не алиасы. Вот на такое было бы действительно интересно посмотреть.

Dasar

В Графической ОС(tm) должны быть иконки, а не алиасы. Вот на такое было бы действительно интересно посмотреть
но основное преимущество графической ОС - это то, что текст можно выводить в любом месте любого размера с любым оформлением, а никак не иконки.
тот же intellisense в текстовой ОС делается довольно коряво, хотя в intelisense нет ни одной иконки.

Marinavo_0507

> но основное преимущество графической ОС - это то,
> что текст можно выводить в любом месте любого размера с любым оформлением
Старьё, технологии 80-х. В наш информационный век актуальны анимированные иконки с текстурами и шейдерами. И обязательно с DRM.

Marinavo_0507

тот же intellisense в текстовой ОС делается довольно коряво, хотя в intelisense нет ни одной иконки
текстовая ОС - это Emacs?
ну в ней требуемые алиасы можно прикрутить самому несколькими строчками, а в сабже?

Dasar

речь вроде шла про удобный intellisense, а не про alias-ы.
ps
алиасы в сабже тоже пару строчками прикручиваются, и для основных команд они по умолчанию и прикручены

Marinavo_0507

алиасы в сабже тоже пару строчками прикручиваются, и для основных команд они по умолчанию и прикручены
по нажатию спец. кнопки раскрываются?

Dasar

> по нажатию спец. кнопки раскрываются?
хз, редактор для powershell-а - я смотрел чуть-чуть и в виде beta-ы

Marinavo_0507

какой ещё редактор, если это интерактивные команды?

Dasar

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

Marinavo_0507

ну дык вроде emacs уже есть
или это будет графический редактор?

Dasar

> ну дык вроде emacs уже есть
если он такой хороший, то зачем народ пишет, более специализированный под разработку, редактор Eclipse?

Marinavo_0507

вроде редактор, специализированный под разработку, у MS уже тоже есть

Dasar

> вроде редактор, специализированный под разработку, у MS уже тоже есть
угу, есть, но он хороший, но громоздкий - с кучей, в том числе, унаследованного кода.
соответственно понятно желание под Powershell сделать что-то более простое и современное.
Оставить комментарий
Имя или ник:
Комментарий: