Подтвердить что ты не робот

Есть ли справочное руководство по языку для PowerShell?

Я оцениваю Windows PowerShell как замену cmd.exe для базовой автоматизации процессов для кода командной строки (например, установка, выполнение и пост-обработка большого числа заданий Fortran). Я знаю достаточно Perl и shell для что я хочу, но я стараюсь оставаться в инструментальной цепочке Windows, вместо того, чтобы тренировать своих сотрудников на Perl, Python, Ruby, Cygwin и т.д. Я работаю в инженерной фирме, поэтому нам не нужно .NET или обширные рамки для разработки Windows. Короче говоря: мы хрустем много номеров с внутренним кодом, и мне нужны разумные средства автоматизации повторяющихся ручных задач.

Проблема в том, что у меня возникли проблемы с оценкой языка, потому что я не могу найти краткое руководство по использованию языка для PowerShell,

Да, я просмотрел сайт Microsoft, но (в 2010 году, когда этот вопрос изначально был задан), он настолько дезорганизован и задушен нерелевантным информация о непригодности к использованию. Google имеет тенденцию указывать мне на этот сайт и не очень полезен.

Вот некоторые из тем, которые меня интересуют (отмечаются аналоги Unix и Perl):

  • Внутренние функции
    • Основные функции тестирования/ветвления/цикла и управления потоком
  • Внутренние типы переменных (логические, целые, с плавающей запятой, строка)
  • Внутренние структуры данных (скаляр, список, ассоциативный массив, объект)
  • Операторы и приоритет оператора
  • Функции, специфичные для языка автоматизации задач:
    • Управление процессом (exec, fork, wait, kill)
    • Мониторинг системы (ps, время безотказной работы, lsof, фьюзер, netstat, df)
    • Обработка файлов и каталогов (поиск, поиск, которые, cd, mkdir, touch, rm, rmdir)
    • I/O (трубы, cat, tee, xargs, чтение, запись, перезапись, добавление, поиск)
    • Функции обработки текста (awk, sed, grep, split, join, cut, fmt, string)

Другие вопросы, на которые я ожидаю ответа:

  • Является ли PowerShell строго типизированным (char, строка, int, long, float, double) или слабо типизированный (вариант)?
  • Доступны ли общие структуры данных (скалярные, список, ассоциативный массив) и являются ли они первоклассными элементами?
  • Есть ли библиотека или модульная система?
    • Если да, то что находится в стандартной библиотеке?
    • Есть ли сторонние библиотеки, которые я могу использовать, если я не найду то, что мне нужно?
  • Это процедурный, функциональный или объектно-ориентированный язык - или в какой степени каждый?
  • Каковы соглашения о кодировании? (Perl Best Practices)
  • Есть ли ожидания форматирования - линейная или свободная форма?
  • Значит ли это пробел или регистр?
  • Есть ли ограничение набора символов?
    • Является ли язык 8-битным чистым?
    • Поддерживает ли он UTF-8, Unicode и т.д.?

Мне очень интересно найти M в RTFM, но обратите внимание, что я на этапе оценки, так что я потерял 50 долларов или около того от Microsoft Press (который в 2010 году был бы основным источником редактирования, печатная документация) является не стартером.

4b9b3361

Ответ 1

Прежде всего - очень полезная документация, доступная из командной строки PowerShell. Просто введите:

PS> help about
Name                         Category  Synopsis
----                         --------  --------
about_Alias                  HelpFile  Using alternate names for cmdlets and commands in Windows PowerShell
about_aliases                HelpFile  Describes how to use alternate names for cmdlets and commands in Windows
about_Arithmetic_Operators   HelpFile  Describes the operators that perform arithmetic in Windows PowerShell.
about_Array                  HelpFile  A compact data structure for storing data elements
about_arrays                 HelpFile  Describes a compact data structure for storing data elements.
about_Assignment_Operators   HelpFile  Describes how to use operators to assign values to variables.
....

Он ответит на большинство ваших вопросов.

Обратите внимание, что вы можете вызывать exe файлы без каких-либо изменений, как вы привыкли (просто позвоните netstat, и вы увидите). Поэтому для некоторых задач вы можете использовать инструменты, которые вы знаете и как.

Что касается приоритетов операторов, я видел только одно сообщение в блоге Кирка Мунро: Essential PowerShell: узнайте свой приоритет оператора и приложения

Книги (но только для PowerShell V1)

Другие вопросы очень хорошо описаны в книге Брюса Пайетта: PowerShell в действии. Он охватывает V1, но вы можете получить MEAP со многими разделами из версии V2.

Или, если вы просто оцените, вы можете взглянуть на некоторые бесплатные книги:

Для некоторых лучших практик вы можете позже взглянуть на книгу Кита: Эффективный Windows PowerShell

Ответ 2

Внутренние функции

Не работает функция. Собственные команды PowerShell называются командлетами - они являются классами .NET, имеют общую систему параметров/аргументов и хорошо работают с конвейером. Теперь вы можете сделать то же самое с расширенными функциями непосредственно на языке PowerShell.

Существует множество встроенных командлетов для ввода-вывода файлов, управления процессом, доступа WMI и материалов, относящихся к оболочке, таких как управление переменными, псевдонимами, модулями и с.

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

Основные функции проверки/ветвления/цикла и управления потоком

Обычные С-подобные утверждения: if, switch, for, while, do, foreach. Обратите внимание, что фигурные скобки разделяют блоки, и все эти утверждения ожидают блоки (не блоки или один оператор, как на многих других языках). Детали можно найти с помощью Get-Help about_Ifabout_Switch, about_for, about_while, about_do, about_foreach). Особенно switch безумно силен, позволяя регулярное сопоставление выражений и другие тонкости, которые часто могут служить простым импровизированным парсером.

Внутренние типы переменных (логические, целые, с плавающей запятой, строка)

Assign $true or $false to a variable and it is a boolean, assign an integer to a variable and it becomes Int32, Int64, Decimal or Double, depending on how large it is. You won't surprisingly land at −231 because of overflow. Floating point numbers and strings can be similarly constructed with the usual notation. You can always declare an explicit type if you don't like the default choice:

PS> [long]$a = 5  # 5 would usually result in [int], not [long]

Внутренние структуры данных (скаляр, список, ассоциативный массив, объект)

Вы можете легко иметь скаляры:

PS> $a = "foo"

или списки (ну, они представляют собой массивы внизу):

PS> $b = 5, 2, "bar"

или хэш-таблицы (ассоциативные массивы):

PS> $c = @{ 'a' = 5; 7 = 'foo' }

Оба массива и хэш-таблицы по умолчанию основаны на Object. Чтобы получить более сильные ограничения типа здесь, вам нужно перепрыгнуть через несколько обручей.

Операторы и приоритет оператора

Операторы можно найти в Get-Help about_Operators.

Арифметика (см. about_arithmetic_operators)

+  -  *  /  %  ++  --

Назначение (см. about_assignment operators)

=  +=  -=  *=  /=  %=

Логический (см. about_logical_operators)

-and  -or  -xor  -not  !

Довольно просто; ! - это просто другое имя для -not, которое может помочь тем, кто внедрен в C-подобные языки.

побитовое

-band  -bor  -bxor  -bnot

Операторы сравнения

Так как PowerShell является оболочкой, они не могут просто использовать > и <, которые зарезервированы для перенаправления, следовательно, несколько более громоздкие варианты:

-lt  -le  -eq  -ge  -gt  -ne

Другие

Есть также два варианта операторов сопоставления строк: -match для соответствия регулярных выражений и -like для сопоставления подстановочных знаков; их отрицательные варианты: -notmatch, -notlike; и их явно чувствительные к регистру и нечувствительные к регистру двоюродные братья (по умолчанию не чувствительны к регистру): -cmatch, -imatch, -cnotmatch, -inotmatch, -clike, -ilike, -cnotlike, -inotlike, См. about_comparison_operators)

Тогда есть еще несколько специальных операторов, таких как операторы перенаправления (см. about_redirection):

>  >>  2>  2>>  2>&1

Split и Join (новый в PowerShell v2):

-split  -join

Те могут разделить строку на регулярное выражение или присоединиться к массиву с указанным разделителем.

Оператор замены -replace, который также допускает регулярные выражения.

Оператор формата -f:

PS> "{0:N3} {1} {2:yyyy-MM-dd}" -f 123.456789,"foo",(Get-Date)
123,457 foo 2010-02-25

Оператор диапазона ..:

PS> 1..10 -join ", "
1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Помимо множества других, таких как оператор вызова &, точечный поиск с ., подвыражениями с $( ), подвыражениями массива с @( ) и оператором построения массива ,. Однако это выходит из-под контроля, поэтому посмотрите сами.

Что касается приоритета, я сомневаюсь в том, что вам действительно нужно знать. Если есть сомнения, используйте круглые скобки. Арифметические операторы используют обычное правило (mul/div до add/sub). У меня не было особых сюрпризов с приоритетом, поэтому я не стал смотреть на него до сих пор.

Функции, специфичные для языка автоматизации задач

  • Управление процессом (exec, fork, wait, kill)

    Это оболочка, поэтому exec явно подразумевается. Вы можете напрямую запускать другие программы без проблем. fork - это не Windows, поэтому вам не повезло. Для wait существует Wait-Process, который, как я считаю, делает то же самое (если я правильно читаю manpage).

  • Мониторинг системы (ps, время безотказной работы, lsof, fuser, netstat, df)

    • ps является псевдонимом Get-Process.
    • Время безотказной работы системы может быть запрошено через WMI и при необходимости упаковано в удобной функции:

      function Get-SystemUptime
      {
          $os = Get-WmiObject Win32_OperatingSystem
          (Get-Date) - [Management.ManagementDateTimeConverter]::ToDateTime($os.LastBootUpTime)
      }
      

      который возвращает объект TimeSpan.

    • lsof, fuser можно каким-то образом схватить из объектов процесса; Однако этого не делал. netstat по-прежнему доступен как собственная программа, которую вы можете просто запустить.

    • df может быть эмулирован с помощью

      Get-PSDrive -PSProvider FileSystem
      

      Если вам это нужно больше, чем просто посмотреть на него, WMI, вероятно, более разумный путь.

  • Обработка файлов и каталогов (поиск, поиск, которые, cd, mkdir, touch, rm, rmdir)

    • find и locate обычно можно достичь с помощью Get-ChildItem и последующей фильтрации результатов с помощью Where-Object.
    • which сопоставляется с Get-Command, который с PowerShell v2 отображает команды в том порядке, в котором они рассматриваются для выполнения:

      PS Home:\> gcm where
      CommandType   Name        Definition
      -----------   ----        ----------
      Alias         where       Where-Object
      Application   where.exe   C:\Windows\system32\where.exe
      
    • cd является псевдонимом для Set-Location. Возможные местоположения включают не только файловую систему, но и реестр, переменные, псевдонимы, хранилище сертификатов и т.д.

    • mkdir - это функция, которая в конечном итоге сопоставляется с New-Item с соответствующими аргументами.
    • touch может быть достигнуто с помощью Set-ItemProperty:

      Set-ItemProperty foo.txt LastWriteTime (Get-Date)
      

      Вы можете поместить это в функцию с именем touch, если хотите.

    • rm и rmdir являются псевдонимами для Remove-Item.

  • I/O (трубы, cat, tee, xargs, чтение, запись, перезапись, добавление, поиск)

    • Трубопроводы используют объекты вместо байтов, которые должны быть самыми значительными по сравнению с другими оболочками. Кроме того, не слишком много сюрпризов. Многие командлеты принимают ввод конвейера.
    • cat является псевдонимом для Get-Content.
    • tee является псевдонимом для Tee-Object. Это не только позволяет записывать в файл, но вы также можете записывать его в переменную, например:

      Get-Process
      | Tee-Object -Variable proc
      | Select-Object ProcessName,CPU
      
    • xargs можно заменить на ForEach-Object, насколько я могу видеть.

    • Байт-ориентированный ввод/вывод файлов, вероятно, лучше выполняется с обычными объектами .NET и вызовами методов. Достаточно легко получить полный файл в виде строки с Get-Content, но помимо этого это немного громоздко.
  • Функции обработки текста (awk, sed, grep, split, join, cut, fmt, string)

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

    Помимо этого существуют различные инструменты для обработки текста. В зависимости от того, что вам нужно сделать switch -regex и -match, -replace и -split операторы могут компенсировать большинство применений sed, awk, cut, split, join Я видел.

    Нет strings или fmt.

Является ли PowerShell строго типизированным (char, строка, int, long, float, double) или слабо типизированный (вариант)?

PowerShell использует систему типа .NET. Переменные неявно строго напечатаны, но не объявлены. Тем не менее, они могут иметь явный тип.

Доступны ли общие структуры данных (скалярные, список, ассоциативный массив) и являются ли они первоклассными элементами?

Таким образом, вы можете использовать любую структуру данных .NET из пространства имен System.Collections. Общие коллекции немного болезненны для настройки, но это можно сделать. Как упоминалось ранее, списки элементов и хэш-таблиц также являются языковыми элементами.

Есть ли библиотека или система модулей?

В PowerShell v2 есть модули, которые являются наборами командлетов связанной функциональности. Подробнее см. Get-Help about_Modules.

Если да, то что находится в стандартной библиотеке?

Больше, чем было бы разумно описать здесь. Вы можете позвонить Get-Command, чтобы узнать, что доступно. Get-Help, как обычно, помогает выяснить, что делает какая-либо данная вещь.

Есть ли сторонние библиотеки, которые я могу использовать, если я не найду то, что мне нужно?

Вы можете динамически загружать любую сборку .Net, используя

[System.Reflection.Assembly]::LoadFrom(...)

или (в PowerShell v2) с помощью Add-Type:

Add-Type -AssemblyName ...

Является ли это процедурным, функциональным или объектно-ориентированным языком или в какой степени каждый?

Wikipedia говорит, что Multi-парадигма: императив, конвейер, объектно-ориентированный, функциональный, отражающий. Аспект контура объекта - прекрасный способ добиться элегантных решений для некоторых проблемных областей.

Он объектно-ориентированный в том смысле, что вы в основном используете объекты для достижения своей цели, вы редко моделируете что-то с объектами в PowerShell. Вы не можете создавать собственные классы (не считая Add-Type, который позволяет вам писать, компилировать и импортировать код С# или VB на лету), поэтому с точки зрения абстракции для собственной работы на языке PowerShell вы, вероятно, будете больше на процедурный уровень.

Каковы соглашения о кодировании? (Perl Best Practices)

Язык еще очень молод, так что еще нет такой вещи (по крайней мере, я не знаю об этом). Однако при попытке кодирования кода PowerShell Code-Golf стало очевидным, что трудно создавать совершенно нечитаемые беспорядки. Обычные правила для языков курчавого языка работают достаточно хорошо, и для более длинных конвейеров, разбивающих их на несколько строк, часто помогает читаемость.

Есть ли ожидания форматирования - линейная или свободная форма?

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

Если вы вызываете встроенный, вы можете использовать `(серьезный акцент) как знак продолжения строки.

Значит ли это пробел или регистр?

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

Есть ли ограничение набора символов?

Нет.

Является ли язык "8-битным чистым"?

Да. Мы больше не находимся в возрасте Ye Olde 70-х. Вы также можете легко назвать переменные, функции, которые вы хотите, без ограничений. Например, я назвал функцию (U + 0004), которая позволяет мне нажать Ctrl + D, Enter, чтобы закрыть сеанс.

Поддерживает ли он UTF-8, Unicode и т.д.?

Поскольку PowerShell использует .Net, у вас есть полная поддержка Unicode. Потоки ввода и вывода могут быть настроены на различные кодировки.

Ответ 3

Это официальные документы из Microsoft (файлы .docx, формат Word 2010+). Вы должны скачать их, вы не можете читать их в Интернете в это время (январь 2013 г.).

Спецификация языка Windows PowerShell версии 2.0

Опубликовано в Интернете в апреле 2011 года.

(Может быть, он не был доступен в 2010 году, когда этот вопрос задавали здесь?)

Обновление для Powershell 3.0, выпущенное около 2012 года:

Спецификация языка Windows PowerShell версии 3.0

Также проверьте "связанные ссылки" внизу соответствующих страниц.

Ответ 4

Я заметил, что большинство книг PowerShell - это учебники, руководства для руководства или кулинарные книги. Все они полезны, но они часто не соответствуют деталям синтаксиса и языковых правил. То, что фактическая языковая ссылка неоценима.

alt text

Ближайшей вещью к языковому справочнику, который я видел до сих пор для PowerShell, является Windows PowerShell в действии, разработанная Bruce Payette. В первом выпуске даже содержалась грамматика PowerShell в приложении ( теперь доступно как бесплатная загрузка PDF). Второе издание добавляет подробности о PowerShell 2.0, но не включает грамматику.

PowerShell в практике Ричарда Сиддауэй больше относится к руководству по администрированию PowerShell 2.0, но в разделе 2.4 есть десяток страниц достойного резюме языка, в котором описываются переменные, типы данных, структуры управления и функции.

alt text

Кроме того, здесь является бесплатной (требуется регистрация) языковой ссылкой в формате PDF, а также Брюсом Пайеттом.

Ответ 6

Sapien Press выпустила обновленный Windows PowerShell v2.0: TFM от Дон Джонса и Джеффа Хикса для PoSh v2. Оригинал, содержащий материалы для PoSh v1 ref, теперь является бесплатной загрузкой и все еще очень актуальным. Отличные ресурсы для всех.

Бесплатная версия dl находится в этом месте: www.primaltools.com/downloads/communitytools/

Я могу по-прежнему оставлять только 1 ссылку за сообщение < - да, я новичок, поэтому...: P

kспасибоbye

-DBofTLP

Ответ 7

Эта электронная книга чрезвычайно полезна для меня, когда я делаю первые шаги с Powershell: http://powershell.com/cs/blogs/ebook

но я также ищу полезную ссылку...

Ответ 8

Быстрый поиск показал это Руководство для владельцев Powershell (это онлайн-руководство)

Но если вы хотите использовать инструменты, которые уже установлены на компьютерах Windows, PowerShell на самом деле не вариант, если вы не планируете поддерживать только Windows7 и Server 2008 и более поздние версии.

Но Windows Script Host находится на каждой версии Windows с Win98, поддерживает скрипты в JScript или VBScript или любую смесь из два.