Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» PowerShell

Автор: Smitis
Дата сообщения: 11.09.2010 21:07
ComradG
В шапке даже ссылки на последнюю финальную версию нет, а добавлять лень.
Глючный он какой-то PS, точнее, неноделанный.
Автор: ComradG
Дата сообщения: 12.09.2010 11:47
Smitis
В чем именно его недоделанность? Работает вроде нормально, разве что скорость даже при самой тотальной оптимизации скриптов оставляет желать лучшего, ну и баги самой .NET, в целом же все работает нормуль. Есть, правда, момент, который меня напрягает: если в батниках для входящего параметра было достаточно указать %1, то в PoSh'е для этого придется навалять что-то вроде param([string]$input), причем проще вариантов я не нашел. А шапка, если не ошибаюсь, не обновлялась довольно давно.
Автор: 01MDM
Дата сообщения: 12.09.2010 12:23
ComradG

Цитата:
если в батниках для входящего параметра было достаточно указать %1, то в PoSh'е для этого придется навалять что-то вроде param([string]$input)

А как же массив $args:

Код:
$args | % { $_ }
$args.length
$args.count
$args[0..($args.count-1)]
Автор: ComradG
Дата сообщения: 12.09.2010 12:48
01MDM
Хм, ты имеешь в виду в теле функции? В теле функции $args не панацея, и вообще довольно плохая идея. Суди сам, например, вот фунция для распаковки зипов:

Код: function Unpack-Zip
{
param([string]$zipfilename, [string]$destination)
if (test-path($zipfilename))
{
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.Namespace($zipfilename)
$destinationFolder = $shellApplication.Namespace($destination)
$destinationFolder.CopyHere($zipPackage.Items())
}
}
Автор: 01MDM
Дата сообщения: 12.09.2010 16:21
ComradG

Цитата:
Или что ты имел в виду?


Цитата:
ComradG wrote:

если в батниках для входящего параметра было достаточно указать %1, то в PoSh'е для этого придется навалять что-то вроде

Ничего не надо "валять":
%0 - $myinvocation.mycommand.definition
%1 - $args[0]
Автор: ComradG
Дата сообщения: 13.09.2010 12:42
01MDM
Дружище, если не сложно, можешь привести простой пример, а то я не совсем догоняю
Цитата:
%0 - $myinvocation.mycommand.definition
%1 - $args[0]

да и на примере лучше ориентироваться.
Автор: 01MDM
Дата сообщения: 13.09.2010 17:08
ComradG

Цитата:
можешь привести простой пример

Все просто. Создаешь скрипт (например 1.ps1):

Код:
"Так называется скрипт: `"$($MyInvocation.MyCommand.Name)`", в батнике это `"%0`""
"Это первый аргумент для скрипта: `"$($args[0])`", в батнике это `"%1`""
"Это второй: `"$($args[1])`""
"Это аргументы по порядку:"
$args[0..($args.length-1)]
Автор: ComradG
Дата сообщения: 13.09.2010 17:46
01MDM
Ааааа! Дошло.
Автор: ComradG
Дата сообщения: 14.09.2010 17:18
01MDM
Да, совсем забыл! Ты же не привел пример того, как
Цитата:
%1 - $args[0]
можно использовать в функциях.
Автор: 01MDM
Дата сообщения: 14.09.2010 20:24
ComradG
Самый простой пример:

Код:
function test {
    
$args[0]
$args[1]

}

test string 123
Автор: ComradG
Дата сообщения: 15.09.2010 13:20
01MDM
Спасибо, но Get-Item и ему подобные запросы внутри функции с аргументами все же дружить отказываются. Пытаюсь понять что не так делаю.
Автор: 01MDM
Дата сообщения: 15.09.2010 21:38
ComradG

Цитата:

Get-Item и ему подобные запросы внутри функции с аргументами все же дружить отказываются.

Все работает

Код:
"file-1", "file-2" | % { ni -t file $_".ext" | out-null }

function test {

    gi $args[0]
    gi $args[1]

}

test file-1.ext file-2.ext

ri *.ext
Автор: ComradG
Дата сообщения: 16.09.2010 12:01
01MDM
Спасибо, теперь понял где ошибался.
Автор: ComradG
Дата сообщения: 22.09.2010 17:07
К WinAPI в PoSh можно обратиться только таким образом или есть альтернативный подход?
Автор: ComradG
Дата сообщения: 27.09.2010 10:49
01MDM
В PS есть аналог cmd'шному set /p или все же лучше использовать циклы вроде while?
Автор: KapralBel
Дата сообщения: 27.09.2010 11:53
ComradG

Цитата:
set /p

и

Цитата:
циклы вроде while?

Это немного разные вещи
Автор: 01MDM
Дата сообщения: 27.09.2010 14:22
ComradG
Read-Host, если ты имеешь ввиду пользовательский ввод данных.

PS. Неплохая книга на английском Mastering-PowerShell.pdf
Автор: ComradG
Дата сообщения: 27.09.2010 20:32
KapralBel
Цитата:
Это немного разные вещи
Я в курсе. Можно сказать даже что это совсем разные вещи. Просто я не совсем корректно сформулировал вопрос.
01MDMСпасибо за ссылку на книгу, но она, как оказалось, у меня уже имеется, - на досуге перечитаю. Да! Read-Host я и имел в виду (надо мне просто было заглянуть в справочник )
Автор: BVV63
Дата сообщения: 28.09.2010 05:44
Господа, растолкуйте, пожалуйста, такую вещь. Чисто ради академического интереса . В мануалах по PowerShell описывается цифровое подписывание скриптов PowerShell. Я что-то недопонимаю, как можно подписать текстовый файл? Он, что, во что-то нечитаемое при этом конвертируется, что ли? Что только сам интерпретатор может прочитать ?
Автор: KapralBel
Дата сообщения: 28.09.2010 07:08
Попробуй подписать

Подпись - гарантирует неизменность файла, а не зашифрованность
Автор: BVV63
Дата сообщения: 28.09.2010 07:27
KapralBel

Цитата:
Попробуй подписать

Долго, лениво. Нужно вначале обучиться это делать. Рано или поздно, наверное, всё же займусь. А пока можно просто в двух словах, что с текстовым файлом происходит?
Автор: KapralBel
Дата сообщения: 28.09.2010 08:37
В последний раз баловался сразу года 2 назад

В конце файла появляется большая куча символов - и если изменяешь хоть 1 бит - то подпись становится недействительной
а в самой подписи указано кто подписывал
Автор: ComradG
Дата сообщения: 28.09.2010 13:58
Относительно цифровых подписей на ftp VeriSign валялся огромный мануал, сейчас это дело можно достать лишь на трекерах. И еще минус данного дока (хотя кому как), что он полностью на аглицком.
P.S. Относительно подделок цифровых подписей можно почитать у lambda-team.
Автор: BVV63
Дата сообщения: 21.10.2010 08:15
Ещё раз вернусь к вопросу, который я здесь задавал, но не получил ответа. И в литературе ничего путнего не нашёл ...
Как в PowerShell создать следующую модель: родительский сценарий запускает дочерние, те, отработав, возвращают управление и результаты (включая вновь определённые переменные, которые будут использоваться как в родительском, так и в других дочерних сценаиях); родительский сценарий также задаёт ряд переменных и пр., которые используются в дочерних.
Вроде как всё должно просто осуществляться (коли уж в батанике это всё элементарно реализуется), но, что-то никак не могу придумать... Как в PS передаётся управление?

Добавлено:
Частично вопрос решил. Ошибался в том, что вызывал дочерние скрипты без указания пути, PS этого не терпит. Но с возвратом управления проблема остаётся. Хотя нет... возвращается. Проблема с возвратом результатов (напр., новых переменных).

Простейший пример: создано 2 сценария: 0.PS1 и 1.PS1
0.PS1

Код: $A=123
.\1.PS1
Echo 0
Echo $B
Автор: 01MDM
Дата сообщения: 21.10.2010 08:58
BVV63, пример test-1.ps1 и test-2.ps1

Код:
# test-1.ps1

$a=1
$a=.\test-2
$a
Автор: BVV63
Дата сообщения: 22.10.2010 09:22
01MDM
Работает, хотя и не понял, почему. В Test-1.PS1 переменной $A присваивается значение "1", затем присваивается значение ".\Test-2". По логике прежднее значение "1" должно потеряться.
А как быть, ежели нужно вернуть несколько параметров?
P. S. Похоже, PS не предназначен для создания модульной структуры.
Автор: 01MDM
Дата сообщения: 22.10.2010 12:01
BVV63

Цитата:
А как быть, ежели нужно вернуть несколько параметров?

Например так:

Код:
# test-1.ps1

$a=1
$b=2
$c=3

"В test-1 `$a=$a"
"В test-1 `$b=$b"
"В test-1 `$c=$c`n"

. .\test-2

"В test-1 `$a=$a"
"В test-1 `$b=$b"
"В test-1 `$c=$c...`n...И новая переменная `$d=$d"
Автор: BVV63
Дата сообщения: 22.10.2010 12:25
01MDM
Возможно, я не очень удачно выразился. Я подразумевал файловое разделение исполняемого кода: основное тело и подгружаемые процедуры. В батанике с этим как-то проще...
Автор: baystruk
Дата сообщения: 01.11.2010 16:37
BVV63
там несколько пространств переменных Глобальные, Локальные, Частные, родительские, дочерние
из дочернего доступны родительские, но не наоборот, если не задано явно по другому
а вообще
Get-help about_Scopes
Автор: BVV63
Дата сообщения: 02.11.2010 07:29
baystruk
Угу. Get-Help -Full About_Scopes. Почитал, мало что понял (чтой-то сегодня я не в форме), отложил до лучших времён.

Страницы: 123456789101112131415161718192021222324

Предыдущая тема: Не понятная проблема с видеокартой.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.