Есть ли хорошие рекомендации для перехода с Perl на Powershell? - PullRequest
1 голос
/ 26 августа 2009

Я ненавижу это говорить, но PowerShell действительно раздражает меня. Я просто не могу прийти в себя. У меня есть книга О'Рейли по этой теме, и я могу понять, как сделать что-то чрезвычайно мощное - это то легкое, что я не могу понять правильно.

Показательный пример: перебирать список имен файлов.

В CMD:

for /F %x in ('dir EXPRESSION') do @(
   arbitrary-action %x
)

В Perl:

@foo=glob("*");
foreach (@foo)
{
   arbitrary-command $_ ;
}

В Powershell:

I'm dumbfounded.  I can't seem to get it right.

Но я не отправляю это сообщение, чтобы кто-нибудь мог сказать мне ответ. Я не хочу ответа на этот простой вопрос. Я хочу знать, как это выяснить, и поиски Google / Bing просто не сокращают это. Функциональность get-help - это PowerShell, это хорошо, но этого все же недостаточно.

Я программирую уже 20 лет. Я изучил BASIC, Fortran, C, Pascal, Perl, C ++, C #, BASH и CMD-скриптинг ... И никогда у меня не было проблем с Powershell.

Нет ли ссылок "там" для перехода с Perl на Powershell? Публикация кажется такой простой, но я пока не нашел ее.

Любая помощь будет оценена. Благодарю.

Обновление:

Хорошо, возможно, это был не лучший пример для публикации.

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

I took a leap of faith and tried:
foreach ($foo in gci "*") { echo $foo; }

И да, это сработало. И да, я могу продолжать делать поиски, чтобы пройти через мой путь. Я думаю, я просто надеялся найти руководство, которое использует сходство с языками, которые я уже знаю. Я знаю, что Microsoft опубликовала руководство по VBScript-to-Powershell, поэтому я надеялся на эквивалент Perl.


Еще раз спасибо

Ответы [ 6 ]

3 голосов
/ 26 августа 2009

Я никогда не видел такого гида. Я видел кое-что, чтобы помочь людям перейти с VBScript на PowerShell.

Брюс Пайетт * PowerShell в действии имеет несколько страниц на языке сценариев PowerShell vs X, но это не подойдет для руководства по конверсии.

Так вот, там был сайт, на котором были все виды конструкций на нескольких языках, таким образом предоставляя задачу, а затем решая ее на всех языках на основе ответов сообщества ... Кто-нибудь знает, что я о чем?

2 голосов
/ 26 августа 2009

Я не знаю ни одного хорошего сравнения Perl с Powershell, но могу ответить на ваш дополнительный вопрос.

$files = get-childitem "c:\test\" -filter *.dll
foreach ($file in $files) { $file.Name } 

Существует два способа выразить цикл foreach в Powershell.

Вы можете передать массив объектов в foreach, и $_ станет текущим объектом на каждой итерации.

0,1,2,3 | foreach { $_ }

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

foreach ($num in 0,1,2,3) { $num } 

Вывод в обоих случаях.

0
1
2
3
1 голос
/ 28 августа 2009

Как он сам сказал, он осознал потенциал для получения некоторых очень мощных вещей с помощью PowerShell ... Я недавно начал использовать его сам, и легкость, с которой можно что-то делать, поражает ... всего несколько строк - вот и все требуется для выполнения вещей, которые в Python были бы некоторые дополнительные обходные пути и т. д.

0 голосов
/ 06 августа 2018

Я думаю, что найти руководство по Perl to PowerShell будет сложно. На самом деле сравнивать PowerShell с BASh и C Shell лучше, чем с Perl. Я думаю, что изучение PowerShell из большинства доступных книг затрудняет то, что они предназначены для системных администраторов, а не для программистов. Я рекомендую «PowerShell в действии» для лучшего охвата PowerShell как языка программирования общего назначения.

Еще одна вещь, которую вам нужно сделать, это немедленно принять основной принцип PowerShell - вы имеете дело с объектами, а не с текстом. С BASh и другими оболочками Unix, все это связано с манипулированием текстом, и хотя Perl может делать объекты, его корни все еще находятся в оболочке Unix и утилитах командной строки (grep, sed, awk и т. Д.).

Ларри Уолл украл много замечательных идей из других языков, когда создавал Perl. PowerShell сделал то же самое, используя оболочку POSIX в качестве отправной точки. Вы можете увидеть много Perl в PowerShell, а также на других языках. Я думаю, что лучший способ изучить PowerShell - это иметь окно PowerShell перед вами, читая «PowerShell в действии», которое поможет вам понять, как он работает с объектами. Можно легко вводить фрагменты кода в окне PowerShell в интерактивном режиме и проверять свойства и методы, доступные в объектах, возвращаемых командами.

Кстати - если вы привыкли использовать BASh с стандартными функциями редактирования командной строки, поместите следующую команду в PowerShell $ PROFILE

Set-PSReadlineOption -editmode Emacs

Сделай это, и ты будешь чувствовать себя как дома. Теперь, когда я могу запустить PowerShell на Linux и Mac, я не уверен, что мне когда-нибудь понадобится BASh снова.

0 голосов
/ 11 февраля 2014

Забавно ... У меня были те же проблемы, когда я начинал с PowerShell, но после использования PowerShell сейчас в течение нескольких месяцев я выбросил Perl как уродливую Салли после выпускного вечера. Существует несколько отличных способов использования foreach для просмотра списка объектов. Давайте рассмотрим следующий пример, где у меня есть несколько служб, которые я хочу убедиться, что они работают на моем Windows Server (все процессы имеют имя Equal). Я могу сделать это с помощью команды с одним вкладышем следующим образом:

Get-Service | where-object {$_.displayname -like "Equal*"} | foreach {
  if($_.Status -eq "Stopped") {
    Write-Host "`nRestarting..."
    write-host $_.DisplayName 
    Start-Service $_.name
  } 
}

Первая часть команды - это команда get-service - фильтрация сервисов, ищущих сервисы, с отображаемым именем с Equal в них. Следующая часть одного лайнера действительно показывает красоту PowerShell. Команда get-service возвращает список объектов, на которые затем можно воздействовать, передавая их в цикл foreach. Обратите внимание, мне не нужно было объявлять какие-либо переменные или массив для хранения объектов. Объекты хранятся в переменной $ _ по умолчанию, из которой я могу извлечь свойства объекта, такие как имя и статус. Foreach возвращенный объект (служба) Я проверяю его состояние, чтобы увидеть, остановлено ли его состояние и перезапущено ли оно командой Start-Service. Я мог бы сделать это аналогичным действием с Perl, но мне пришлось бы просматривать скребок и помещать значения в массив, а затем обрабатывать массив таким же образом, как я делал выше. Снимок экрана будет включать в себя grep с регулярным выражением, которое добавляет строки кода. Поскольку команды PowerShell создают объекты со свойствами, я могу быстро перейти к нужным свойствам без проблем с очисткой экрана.

0 голосов
/ 28 августа 2009

Мне любопытно, у вас есть кулинарная книга powershell? Я думал, так как у меня был опыт программирования, это был бы лучший способ быстро изучить PowerShell. Это оказалось плохим предположением. Несмотря на то, что книга была действительно хорошей, я боролся, потому что мне нужна была книга, которая была структурирована больше для изучения, чем для справки.

Две лучшие бесплатные онлайн-книги, которые я нашел:

https://blogs.technet.com/chitpro-de/archive/2007/05/10/english-version-of-windows-powershell-course-book-available-for-download.aspx

http://powershell.com/cs/blogs/ebook/

Я все еще ищу хорошую печатную книгу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...