Приложение в твоем смартфоне
Приложение в твоем смартфоне
Приложение в твоем смартфоне
Приложение в твоем смартфоне
16 февраля 2011 в 16:10

Первые шаги для пауэршельшиков

Приди ко мне брате в Консоль!
— Админ Долгорукий.

Много ярлыков улетело в корзину со времён выхода в свет 2008 Windows. Люди попроще дивились новому синему окошку, которое ребята из Майкрософт зачем-то вставили в свои новые продукты. Люди, которые сидят на блогах и знают программирование начали изучать это окошко.



В итоге к народу начало приходить осознание того, что Майкрософт действительно разработали что-то новое и интересное.
И так, зачем вам это нужно? В основном, программа под названием PowerShell (в дальнейшем PS) предназначена для администраторов и программистов. Она позволяет автоматизировать примерно 99% всех действий в системе. С помощью неё вы можете настраивать удалённые компьютеры, запускать и перезапускать сервисы и производить обслуживание большиства серверных приложений. Как выяснилось, возможности у программы потрясающие.

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

Задача этой статьи проста — показать вам малую долю возможностей PS и дать вам концептуальное понимание предмета. В действительности документации по предмету написано несметное количество, так что я не стремлюсь охватить всё. Я так же ознакомлю вас с набором утилит, которые позволят не вылезать из PS в принципе.


Что представляет собой PS? Это интерпретатор командной строки. Вы вводите необходимые команды, на экране отображается результат их выполнения. Всё просто. Всё было так со времён доса и старого доброго Юникса.

Есть два основных отличия от предшественников, которые качественно выделяют PS среди других интерпретаторов.

  • Очень хорошая интеграция с Microsoft .NET Framework. Это даёт вам возможность вплетать мощные программистские решения в свои команды и скрипты.
  • Все значения, возвращаемые вам в терминал являются объектами, с которыми можно работать как с объектами, а не просто набором строк. Это позволяет вам создавать неимоверно мощные программные скрипты.


Приступая к работе


Если вы используете Windows 7 или 2008 то PS вам уже доступен. Для пользователей других версий Windows — добро пожаловать на сайт Майкрософт.

После установки вы можете запустить консоль и настроить её по своему вкусу, нажав на иконку в заголовке окна. Вы можете выбрать шрифт и изменить сам размер окна.
После этого, предпринимайте робкие шаги по выполнению первых команд. Для начала наберите

dir

и вы получите список папок в текущем каталоге. Приятным моментом для любителей Юникса
будет тот факт, что команда

ls

работает так же хорошо, как и dir. В PS существует система назначения алиасов на различные команды. В действительности, то что вы сейчас сделали — это выполнили командлет (так в PS называются команды, встроенные в сам PS) Get-ChildItem. Вы можете попробовать просто набрать Get-ChildItem и получить тот же результат, что и в двух предыдущих командах. Для того, чтобы вы быстро ознакомились со списком всех алиасов наберите

ls Alias:\

И так, что-то произошло. Вы начали кое-что понимать. Сейчас я буду раскладывать всю магию по кусочкам.

Первое. Командлеты в оригинальной нотации PS имеют следующую систему именования — Глагол-Объект. Это позволяет вам лучше понимать, что можно ожидать в результате выполнения того или иного командлета. Например,

Get-Process # Получить список процессов
Remove-Item # Удалить что-то
Get-Help # получить справку по чему-то
Set-Alias # Создать новый алиас
New-Item # Создать новый объект (Объектом может быть всё что угодно, например, файл)


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

Get-PSDrive

И в ответ вы получаете намного более интересный список дисков в вашей системе, нежели тот, что вы видите в «Моём Компьютере»

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                  16.56         63.44 FileSystem    C:\
cert                                   Certificate   \
D                    .11         53.92 FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan


На диске Alias вы можете увидеть список всех алиясов в системе. Виртуальный диск Variable: хранит в себе все переменные, которые вы можете использовать в данной сессии. На диске Env — лежат переменные операционной системы. Диски HKCU и HKLM являются обёрткой для работы с соответствующими ветками реестра.
Давайте углубимся. Набирайте

Set-Location HKLM: # Или, если вы из людей подосёвее, набирайте cd HKLM:


Ну и как вам новый и невероятный способ хождения по реестру всея машины? Вы можете сделать ls по ветке реестра или перейти в нужный «каталог», набрав cd SYSTEM.

SKC  VC Name                           Property
---  -- ----                           --------
  2   0 BCD00000000                    {}
  4   0 HARDWARE                       {}
  1   0 SAM                            {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ ls <<<<  -force
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINE\SECURITY:St
   ring) [Get-ChildItem], SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.Power
   Shell.Commands.GetChildItemCommand

 35   0 SOFTWARE                       {}
  8   0 SYSTEM                         {}


(Кстати, даже из под администраторского аккаунта есть доступ не ко всем объектам, о чём мой шелл меня уведомляет красными буквами).

Не бойтесь использовать команды New-Item и Remove-Item чтобы создавать и удалять нужные вам ключи в реестре. (И по традиции, я напомню вам, что играться с ключами реестра в администраторском режиме опасно)

Ну, вот вам и небольшой экскурс вглубь. Конечно же, у вас не получится создать ключ реестра так просто. Что-то пойдёт не так, как надо. Ну что же, могу сказать, что PS — это система, которая поощряет обучение в этой системе. Поэтому

Обучение тому, как правильно чему-то научиться в PowerShell


Способность наблюдать и анализировать наблюдения отличает нормального человека от психа. Ребят в Майкрософт психами не назовёшь. Они действительно понаблюдали за пользователями других командных интерпретаторов и выяснили, какая команда чаще всего используется в интерпретаторах. И той командой был великий и могучий man. (Для незнающих — попробуйте сделать — гугл man или наберите в своём баше man man)
В PS есть аналогичная команда, которая звучит как

Get-Help # хотя вы можеше использовать алиас на неё, под названием help


Насколько поразительно отвратительно ребята из Майкрософт делают документацию для пользовательских приложений, настолько хорошо они заботятся о программистах. (Неверующие могут сравнить справку системы Windows XP и 2003)
И так, выбирайте приглянувшийся вам командлет и отправляйте его в help. Если после прочтения общей справки вы ничего не поняли, то попробуйте набрать

get-help New-Item -Examples


Ключ -Examples обычно выдаёт от двух до пяти потрясающих примеров использования выбранной вами команды, с детальным их описанием.
На самом деле, одним только Гет-Хелпом, я в своё время изучил основы PS, перебирая все команды и читая к ним справку.
Если же вы захотели получить справку по какой-то функции, но не знаете, как она называется, а просто предполагаете о её существовании, то просто наберите

get-help files


В ответ на эту команду вы получите список топиков, которые содержат ключевое слово:

PS C:\> get-help Files

Name                              Category  Synopsis
----                              --------  --------
FileSystem                        Provider  Provides access to files and dire...
about_profiles                    HelpFile  Describes how to create and use a...


В нашем случая, для того, чтобы научиться работать с реестром, вы можете просто набрать

get-help Registry


В ответ вы получите длиннющее полотно, которое со всеми подробностями расскажет вам о том, как вы можете работать с реестром в PS.
К сожалению, читабельность полотна обратно пропорциональна его длине. Так что, научившись учиться, давайте обучимся тому, как сделать работу в шелле немного проще.

Маленькие, но очень полезные фишки, которые должны быть в жизни

Товарищ, смирись, ты — в командной строке. Тут безгуёво принципе. Но, если ты познаешь некоторые уловки, тебе здесь станет удобно.

И так, для тех, кто никогда не был в командной строке


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

Для тех, кто уже бывал в командных строках


  1. Ctrl+Home — удаляет всё, начиная с текущей позиции курсора до начала строки
  2. Ctrl+End — удаляет с курсора и до конца строки
  3. F7 — показывает окно со списком набранных команд, и позволяет выбрать одну из них.
  4. Для того, чтобы скопировать что-то в буфер, выделите это мышью и нажмите Enter.
  5. Для того, чтобы вставить строку из буфера — просто нажмите правую кнопку мыши.
Это — самые базовые, и необходимые действия, которые вам придётся выучить наизусть. Другое дело, что они помогут вам шустрее работать с шеллом.

Углубляемся в изучение окружения


Для того чтобы понять нижеследующие строки, нам надо будет разобраться с понятием конвейера.
Когда вы запускаете какой-либо командлет, то возвращаемые им значения преобразуются в текст и выводятся на экран. Но, это не всегда полезно. Например, если вы хотите передать возвращаемое значение одного командлета на вход другого. Для этого вам полезно будет использовать |, в народе именуемый конвейером.
Например, вы хотите отобразить на экране текст, который содержится во всех файлах формата bat в папке. Для того, чтобы выбрать файлы, выполняйте

PS C:\> ls -filter "*.bat" | Get-Content
REM Dummy file for NTVDM


Команда ls -filter "*.bat" выбирает все файлы с нужным расширением, а команда Get-Content выводит их на экран (на самом деле, исходя из названия, команда просто получает содержимое объекта, а на экран он выводится по факту того, что дальше некуда)
Конвейер может сделать очень много полезного для вас. Например, решить «портянку помощи».

Get-Help Registry | Set-Content reg.txt


И весь файл помощи по реестру сохранён в текстовом файле, который вы теперь можете открыть.

Если вы действительно хотите порадоваться жизни, и понять, что PS способен на многое, то вам придётся применить свой IQ на все 100% и вообразить что-то нереальное.

ps | ls


Выглядит невероятно, а результат даёт потрясающий! Если вы хотите узнать, из какого файла появился процесс, просто пустите его конвейером на get-childitem!
В частности, я сейчас набираю текст в вордпаде:

PS C:\> ps wordpad | ls

    Directory: C:\Program Files\Windows NT\Accessories

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/28/2010   9:57 PM    4247040 wordpad.exe


Вот это меня поразило до глубины души.

Теперь можно переходить к изучению окружения


Как я уже говорил, всё что вы видите на экране не является строками, а является объектами. Например, результат выполнения команды ps возвращает нам список процессов, запущенных в системе.
Но как узнать, что же у нас в руках?
Для этого мы воспользуемся командлетом Get-Member, который откроет нам методы любого класса. Давайте узнаем, что содержится в том же самом процессе, который выдаёт нам команда ps.

ps wordpad | Get-Member


Набирайте, и смотрите на список членов класса, которые вы можете увидеть в классе System.Diagnostics.Process. Тоесть, фактически, командлет ps вернул нам массив объектов типа Process и мы можем попрограммировать их!
Давайте поглумимся над блокнотом.

PS C:\> notepad                                                        
PS C:\> ps notepad                                                                                                                            Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName  -------  ------    -----      ----- -----   ------     -- -----------       70       4     1148       5376    56     0.30   3900 notepad                                                                                                                                                    PS C:\> ps notepad | get-member -type method


   TypeName: System.Diagnostics.Process

Name                      MemberType Definition
----                      ---------- ----------
BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
CancelErrorRead           Method     System.Void CancelErrorRead()
CancelOutputRead          Method     System.Void CancelOutputRead()
Close                     Method     System.Void Close()
CloseMainWindow           Method     bool CloseMainWindow()
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObj...
Dispose                   Method     System.Void Dispose()
Equals                    Method     bool Equals(System.Object obj)
GetHashCode               Method     int GetHashCode()
GetLifetimeService        Method     System.Object GetLifetimeService()
GetType                   Method     type GetType()
InitializeLifetimeService Method     System.Object InitializeLifetimeService()
Kill                      Method     System.Void Kill()
Refresh                   Method     System.Void Refresh()
Start                     Method     bool Start()
ToString                  Method     string ToString()
WaitForExit               Method     bool WaitForExit(int milliseconds), Syst...
WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds),...


Вот это неплохое количество методов, которые мы можем запустить, используя шелл. И так, как же это сделать? Просто.

(ps notepad).WaitForExit()


Если вы возьмёте результат выполнения командлета в скобки, то вы сможете обратиться к нему, как к объекту в вашей программе, прямо из командной строки.
После запуска этого метода шелл завис и ждёт у моря погоды. Нажмите пару раз Enter. Ничего не происходит. Что же, закройте открытый блокнот. Вуаля, вы снова в шелле.
Я думаю, теперь вы должны погулять свою фантазию. Попробуйте, пустите через конвейер в get-member результаты выполнения ls или других командлетов, каких только можете найти.
Если вы увидели, что в свойстве какого-то объекта лежит ещё один объект, не стесняйтесь пускать его на Get-Member

(ps notepad).StartTime | Get-Member


И так далее до бесконечности.

Задача для пытливых умов. Пролетела новость, что рефлектор станет платным. Как сделать рефлектор на чистом PS? Кстати, это не такая уж и трудная задача.


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

Переменные и объекты


И так, пару слов по поводу переменных. В PS они бывают нетипизированными:

$processList = ps


И типизированными

PS C:\> [DateTime]$x = "febbrrr"
Cannot convert value "febbrrr" to type "System.DateTime". Error: "The string was
 not recognized as a valid DateTime. There is a unknown word starting at index 0."
At line:1 char:13
+ [DateTime]$x <<<<  = "febbrrr"
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException
PS C:\> [DateTime]$x = "02/14/11"
PS C:\> $x
Monday, February 14, 2011 12:00:00 AM


И так, у нас появились переменные, и теперь мы можем присваивать им значения. В общем, всё, что вы пускали на конвейер, можно пустить и в переменную. Но, тут PS предоставляет нам одну очень интересную фитчу, которая делает его незаменимым инструментом в руках .NET разработчика.
Помните, я сказал, что в PS всё, что возвращается — это объект? Ну так вот, объект это не простой, а дотнетовый. Любой программист уже обратил внимание на тот факт, что в списке процессов мы работали с объектом из окружения CLR. Что же, мы можем запросто создать такой объект.
Давайте, попробуйте

$x = new-object System.Object


Что-же, переменную мы создали, а толку от неё — как с икспи сервака. Никакого. Давайте пофантазируем и подумаем, что мы действительно можем сделать?

C:\> $client = New-Object System.Net.WebClient
C:\> $client.DownloadString("http://google.com")


А вот это уже другое дело. Только что мы из подручных средств собрали себе wget на коленке. Как вам такой поворот событий?
Что же, в этот момент можно идти в MSDN и подряд перебирать все классы, смотреть, что в них есть интересного. Всё это позволяет создавать очень гибкие скрипты.

Кстати, о скриптах


PS позволяет выполнять скрипты. Ура! Делает он это с волшебного пендаля. Неура. По умолчанию в PS запрещён запуск скриптов, которые не были подписаны цифровой подписью. Для запуска скрипта вы должны его либо подписать (для этого используйте help about_signing) либо, просто понизить уровень безопасности, и выполнить

set-executionpolicy remotesigned


обычно я делаю второе. Ибо первый вариант требует скачивания многотонных SDK и долгого колдовства. Хотя, напомню о безопасности, и скажу, что второй вариант не канает для супер-сервера-всея-руси.
После выполнения этих действий, вы будете готовы писать свой первый скрипт. Для начала, рекомендую создать для него файл:

New-Item -type file $PROFILE


Переменная $PROFILE содержит в себе адрес файла с вашим профилем в PS. Этот файл будет запускаться в тот момент, когда вы стартуете PS. Плюс заключается в том, что вы можете нашпиговать свой профиль разными мелкими и полезными скриптами, которые помогут вам автоматизировать производство.
Теперь вы можете начать редактирование своего профиля:

vim $PROFILE


(О, кстати, я вам не сказал, но в PS, на мой взгляд, лучше всего смотрится текстовый редактор vim. Возможно кто-то назовёт меня настоящим извращенцем, но на самом деле, я уже не раз пытался использовать что-то другое, но всегда возвращался к виму. Попробуйте и вы. Его не просто изучить с нуля, но если вы поймёте основы, то сможете очень быстро и удобно редактировать тексты.)
Ладно, теперь повторим эту команду без того, чтобы умничать:

notepad $PROFILE


Ну, вот, например, то, что лежит у меня в профиле

$webClient =  New-Object System.Net.WebClient
$cred = New-Object System.Net.NetworkCredential("login", "Pass")
$webClient.Proxy = New-Object System.Net.WebProxy("www.proxy.adrress", $true, $null, $cred)


Так как мы используем прокси сервер, а вэб клиент является моим любимым инструментом для работы, то я уже заготовил для себя переменную с этим клиентом, чтобы иметь возможность безболезненно подключаться к интернету и не отягощать себя вводом пароля.
Что ещё можно запихнуть в профиль?
Всё что угодно. Настройки цвета окна, ваши любимые функции и алиасы. Алиасы на ваши излюбленные программы и скрипты автоматизации…

На самом деле, я уже написал достаточно много. Вы увидели для себя кое-что новое. Я прекрасно знаю, что уровень этой статьи — для начинающих, но и продвинутые админы найдут для себя несколько интересных моментов. Моей задачей было предоставить вам возможность получить общее представление о том, что вы можете сделать.
Что же, вот, напоследок, вам задачи, над которыми можно поломать голову и решить интересные проблемы:
Написать скрипт, который сортирует изображения по папкам, исходя из их размера (для получения размера файла можно использовать дотнет объекты или ком объекты, предоставляемые эксплорером)
Для выполнения этого, вам уж точно понадобиться хорошо изучить Where-Object или Foreach-Object.

Написать простой NMAP
Что будет, если запустить команду Пинг в цикле? А теперь, возьмите выход от этой команды и пропарсите его как строку. Вам однозначно придётся прочитать мануал по -le -ge и том, как работать со строками.

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

Поиграться с переменной $host и сделать из синего экрана Матрицу!

Что ещё можно делать? Матёрые COM программисты найдут для себя отличный способ повеселиться, когда обнаружат, что new-object имеет ключ -comObject. Фактически, это открывает вам ворота к полному управлению практически любой функцией локального и удалённого компьютера.

Ещё хочу заметить, что последние версии программного обеспечения от Microsoft поддерживают работу в PowerShell. Например, есть SQL PowerShell, который поставляется с 2008 сиквелом и позволяет сделать ls по записям в любой таблице. Это даёт ещё больший простор для фантазий.

Так же, хочу заметить, что комьюнити по разработке на PS очень сильно растёт и ширится. В частности, вы можете найти скрипты, готовые для чего угодно — например, вы можете нагуглить себе способ управления ITunes через PowerShell или способ использования Google Desktop Search в PS.

Что же, мой неинтересующийся друг, надеюсь, я дал тебе что-то интересное, и ты теперь возьмёшься за покорение интерпретатора, который действительно поможет тебе упростить твою нелёгкую программерскую жизнь и даст тебе возможность автоматизировать больше и быстрее. Очень приятно, что ты прочитал мою статью. Спасибо большое, я могу продолжать конкретно описывать определённые области, если вдруг тебе станет очень интересно.
+183
23676
450
Nurked 82,9

комментарии (170)

+16
justrestless, #
Появился интерес к Powershell после прочтения статьи.
+12
Nurked, #
На самом деле, я больше всего старался добиться именно этого эффекта.
+2
boolean, #
Расскажите мне пожалуйста, чем вызвано такое поведение. Я для себя так и не смог это объяснить :-)
Есть скрипт на повершеле(назовем его test.ps1):
"Arguments: $($args.count)"
$args

Запускаю его из оболочки повершела:
.\test.ps1 -arg.txt

В ответ получаю следующее:
Arguments: 2
-test
.tas
+1
boolean, #
точнее в данном примере в ответ получу
Arguments: 2
-arg
.txt
0
Nurked, #
Насколько я понял, проблема заключается в знаке — Из за этого знакак шелл начинает косить, потому что считает это свичевым оператором, поэтому разбирает аргс отдельно а .txt отдельно.

Наберите другой пример:
PS D:\live> .\test.ps1 arg.txt -rrr.ds.sd.fa.ds test .\test.ps1
Arguments: 5
arg.txt
-rrr
.ds.sd.fa.ds
test
.\test.ps1

В итоге, становится ясно, что есть несколько типов аргументов — «Свитчи» и просто аргументы

Подробности можно нагуглить
0
Nurked, #
У меня немного другое получается:
PS D:\live> .\test.ps1 -arg.txt
Arguments: 2
-arg
.txt
PS D:\live>
+2
Dim0FF, #
Прочитать за 4 минуты — это круто…
–3
justrestless, #
Извините, что так быстро читаю. В следующий раз подожду 5 часов 7 минут пока дойдет до вас.
+7
Dim0FF, #
O'rly? Вы с такой скоростью читаете техническую литературу?
В любом случае можно обойтись без оскорблений.
0
justrestless, #
За четыре минуты, пусть даже три вполне реально прочитать данный текст.

Нашли к чему придраться. Совсем у народа крыша едет сегодня.
+1
Nurked, #
Я его писал пять часов.

Помните Футураму?

— Фрай, у меня кончился сценарий? Что делать? Только 20 минут из 2х часов.

— Ну, я его писал 2 часа, думал, что и читаться он будет так же
+5
abeshkov, #
Автор забыл упомянуть что одним из главных козырей Powershell это полная интеграция со всеми новыми продуктами от Microsoft начиная с 2007 года. Ни один продукт не выходит без интерфейса к Powershell.

Даже такие конкуренты Microsoft как VMWare и IBM взяли Powershell на воружение и управляют своими продуктами с помощью него.

0
Nurked, #
Написал. Смотрите в конце
+3
abeshkov, #
Еще интересные возможности Powershell

xaegr.wordpress.com/2010/01/10/perl2ps/

И полезные русские ресурсы по языку

xaegr.wordpress.com/2011/01/19/new-russian-powershell-resources/
+5
amarao, #
Там уже пофиксили пробел/enter в more? Последний раз, когда я его (PS) видел, он у меня вызвал отвращение, сравненимое с cmd.
+4
Nurked, #
Хм. Вообще-то more — это как раз приблуда, которая осталась со времён CMD. И даже раньше. Сейчас тут есть Get-Content.
+1
amarao, #
То есть вместо dmesg|less я должен писать Get-Eventlog «System» | fl | Get-Content?

Обожаю клавиатурные упражнения
+3
Nurked, #
Alias gc Get-Content
Это стандартная приблуда, вшита в павершелл. Короче, чем мор.
+1
amarao, #
Я не поленился, залогинился на последний exchange в моём legacy хозяйстве.

[PS] C:\Documents and Settings\amarao>Get-AgentLog|gc
Get-Content : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
At line:1 char:16
+ Get-AgentLog|gc <<<<
    + CategoryInfo          : InvalidArgument: (Microsoft.Excha...g.AgentLogEn
   try:PSObject) [Get-Content], ParameterBindingException
    + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Command
   s.GetContentCommand



Унесите, пожалуйста. Get-AgentLog|more хоть криво, но листает.

2003/Exchange 2007 up to date.
0
Nurked, #
Фак, а у меня этого командлета нет. Можете сделать пустить акшин лог на гет-мембер, чтобы мне инфу дать о том, что за тип он возвращает?
+3
amarao, #

Get-AgentLog|Get-Member

   TypeName: Microsoft.Exchange.Management.AgentLog.AgentLogEntry

Name            MemberType Definition
----            ---------- ----------
Equals          Method     bool Equals(System.Object obj)
GetHashCode     Method     int GetHashCode()
GetType         Method     type GetType()
ToString        Method     string ToString()
Action          Property   Microsoft.Exchange.Transport.Agent.AntiSpam.Commo...
Agent           Property   System.String Agent {get;set;}
Diagnostics     Property   System.String Diagnostics {get;set;}
Event           Property   System.String Event {get;set;}
IPAddress       Property   System.Net.IPAddress IPAddress {get;set;}
MessageId       Property   System.String MessageId {get;set;}
P1FromAddress   Property   Microsoft.Exchange.Management.AgentLog.AgentLogEn...
P2FromAddresses Property   System.Collections.Generic.List`1[[Microsoft.Exch...
Reason          Property   System.String Reason {get;set;}
ReasonData      Property   System.String ReasonData {get;set;}
Recipients      Property   System.Collections.Generic.List`1[[Microsoft.Exch...
SessionId       Property   System.String SessionId {get;set;}
SmtpResponse    Property   Microsoft.Exchange.Data.Transport.Smtp.SmtpRespon...
Timestamp       Property   System.DateTime Timestamp {get;set;}
0
amc, #
cmdlet | out-host -paging
+1
amarao, #
Именно та же самая задница, что при more. При нажатии на enter он не просто скроллит текст на одну строчку, но и повторяет подсказку.

Писец как удобно.
+1
amc, #
А, теперь понятно.
Нет, все так же.
Мне, честно говоря, проще в | ogv
+1
amc, #
Ну если совсем жизнь не мила — ставить pscx
blogs.technet.com/b/heyscriptingguy/archive/2010/07/09/hey-scripting-guy-tell-me-about-powershell-community-extensions.aspx
там есть
+7
amarao, #
Мне жизнь вполне мила, я расстаюсь с майкрософтом со скоростью примерно 10% в год. Исходя из общего прогресса я закончу с ним возиться примерно через 2 года, таким образом я решу все проблемы в майкрософтовских продуктах, и мне больше не придётся ругаться при виде очередного уродливого more имени MS.
0
abeshkov, #
У меня gc в Powershell под Windows 7 и Windows Server 2008 R2 стандартно превращается в Get-Content.

–4
mitnlag, #
> (О, кстати, я вам не сказал, но в PS, на мой взгляд, лучше всего смотрится текстовый редактор vim. Возможно кто-то назовёт меня настоящим извращенцем, но на самом деле, я уже не раз пытался использовать что-то другое, но всегда возвращался к виму. Попробуйте и вы. Его не просто изучить с нуля, но если вы поймёте основы, то сможете очень быстро и удобно редактировать тексты.)

Читать как:
(О, кстати, я вам не сказал, но в PS, на мой взгляд, лучше всего смотрится интерпретатор bash. Возможно, кто-то назовет меня настоящим извращенцем, но на самом деле, я уже не раз пытался использовать что-то другое, но всегда возвращаюсь к башу. Попробуйте и вы. Его не так просто изучить с нуля, но если вы поймёте основы, то сможете очень быстро и удобно… делать что угодно.)

Извините, не удержался :-)

Вы еще забыли упомянуть основную вкусность PS — фактическая работа с .Net, а значит, можно прямо вызывать любой объект .net и использовать его в скрипте. Это — невероятно удобно.
0
Nurked, #
Хм. я как бы .NET даже отдельный раздел в конце посвятил. Просто не хватило у меня сил писать целую книгу про шелл за раз 8-)))
0
mitnlag, #
Конечно. Извините.
+4
BegiBober, #
А вы точно статью читали? как это не упомянул?
0
abeshkov, #
А как вам PowerGui для редактирования скриптов Powershell?

www.powergui.org
+1
kosiakk, #
CD (= Set-Location) не даёт списка файлов. Даёт LS и DIR
0
Nurked, #
Бывает. Я по привычке ls предпочитаю
+3
alisey, #
Там можно настроить юникод? Я как-то пробовал пускать скрипт, печатающий в UTF-8, но даже chcp не давал желаемого эффекта, вместо букв выводились кракозябры.
0
Nurked, #
Хм. А где конкретно проблема? Я просто как раз на повершелле писал скриптец, который позволял тексты перегонять по всем кодировкам.
+2
mitnlag, #
Можно, у некоторых команд есть параметр Encoding.
–9
bredyankey, #
ненайдя топиков на хабре за столь внушительное время (мб плохо искал) наконец, кто то заикнулся о PS… рисковано относительно сидалища и гиены огненной…
PS-его имя нельзя произносить вслух, а то он услышит и покарает…
сделаю тупое предположение/отступление невдаваясь в подробности… насколько я слышал в Seven и 2008 запихали толи эмулятор unix толи само ядро…
ЗЫ: слышал звон, незнаю где он… хоть убейте)
спасибо, интерес так сказать возбудился… или пробудился…

–1
bredyankey, #
фига я обложался, целая ветка есть )))
0
Shirixae, #
+2
dkukushkin, #
Это хороший ход MS. Администрирование с помощью командной строки во многих случаях намного проще. Может еще и файлы Power-config сделают (т.е. полная настройка системы файлами конфигурации)?
0
justrestless, #
Легче написать оболочку к unix ядру тогда (:
+2
naryl, #
Да, большое спасибо MS за PS. Теперь у вендотроллей, считающих отсутствие командной строки преимуществом ОС, будет на один аргумент меньше.
+15
System32, #
И у линупс-троллей, считающих, что в Windows нет командной строки ;)
+1
naryl, #
Ну, этот аргумент был более объективным. Тем больше заслуга авторов PoSH в его устранении.

(за неимением кармы спрошу здесь)

> Что же, мой неинтересующийся друг, надеюсь, я дал тебе что-то интересное, и ты теперь возьмёшься за покорение интерпретатора, который действительно поможет тебе упростить твою нелёгкую программерскую жизнь и даст тебе возможность автоматизировать больше и быстрее.

По google://power shell for linux только форумы msdn со сравнениями PoSH и bash и толстыми трололо. Подскажите, пожалуйста, что-нибудь стоящее… кроме установки пиратки в виртуальную машину. :D

(и ещё раз будь проклят тот человек, который посчитал меня недостойным больше чем одного коммента в час)
+1
amc, #
0
naryl, #
Спасибо но это же всё-равно только потыкать. Хотелось бы в повседневной жизни попробовать PoSH вместо bash. Переносить повседневную жизнь на другу ОС сейчас нет времени, может позже.
0
ApeCoder, #
+1
tangro, #
Вы недооцениваете вендотроллей. У них стало минимум на 2 аргумента больше:
-вот не было нормальной коммандной строки, а теперь есть!
-а у нас коммандная строка объектная, а не просто текстово-конвеерная.
+4
dmandreev, #
Вендотроллей нет в природе. Вас кто то ввел в заблуждение.
+6
tangro, #
Есть такие тематики, по которым нету троллей?
+1
Inflame, #
> -а у нас коммандная строка объектная, а не просто текстово-конвеерная.

IPython + ipipe = объектный шелл на *nix
+1
fonmax, #
покажите мне, как работает PS по ssh. RDP не предлагать.
+2
amc, #
+2
eaa, #
Ставишь cygwin (и sshd) — и вперед.
Хотя если ты поставишь cygwin, то очень большая вероятность, что вместо PS будешь использовать bash ;)
+1
bredyankey, #
Windows ТЕН ждем, пережидая в linux
+6
untyped, #
Для «предпочитателей» FAR'а есть плагин PowerShellFar.
С консолью, отладкой и прочими вкусностями.

Брать тут: code.google.com/p/farnet/
+1
Irker, #
Извиняюсь за оффтоп, но через PS можно проверить состояние сетевого соединения? (не пингом ресурса)
+1
Irker, #
Кажется нагуглил сам — Get-NetworkAdapter с нужным параметром.
+2
McAndrews, #
Вторую неделю как пререшёл на PowerShell (совместно с Console 2), в основном из-за полной поддержки UTF-8, радуюсь, но вот вчера заметил, что запятая "," в параметрах строки (в частности при вызове python скриптов) интерпретируется как сепаратор аргументов, что очень расстроило, не знаете как можно обойти/вылечить?
0
Nurked, #
Различные кавычки пробовали? Можно конкретный пример?
+1
McAndrews, #
Кавычки-то помогают, а вот без кавычек…
Раньше в cmd.exe при вызове > python script.py a,b,c
«a,b,c» было одним аргументом, а сейчас тоже самое уже ['a', 'b', 'c'] — три разных аргумента.
+1
amc, #
Лень лезть в доку, но попробуйте & python script.py a,b,c
0
ApeCoder, #
a`,b`c или «a,b,c» пробовали?
0
McAndrews, #
Это, конечно, будет работать, но это не подходит для уже существующих, а тем более для кросс-платформенных связок/вызовов из функций/модулей, которые отлично работали в cmd.exe, но перестали работать в powershell, из-за того, что изменилась концепция интерпретации символа «запятая» в строке аргументов. Выходом была бы или настройка, отменяющая использование запятой в качестве сепаратора, либо собственный «препроцессор» обработки командной строки, но я пока не нашёл, как это реализовать.
+1
freeAKK, #
новое и интересное
+2
Nesp, #
You mad cause it's not Gne\Loonex?
+7
ayambit, #
Что же вы про Windows PowerShell Integrated Scripting Environment (ISE) забыли? Чтобы запустить ее напишите ISE в поисковой строке меню «Пуск».
+6
ayambit, #
Собственно:
image
0
Nurked, #
Эт не кавайно. Эт не по-джедайски. В ИСЕ столько рюшечек понавинтили, что тормозов больше чем надо стало. ИМХО
НЛО прилетело и опубликовало эту надпись здесь
+1
ayambit, #
На глаз она не тормозит, а по удобству с не менявшимся со времен как минимум 2000 винды консольным окном сравнений не может быть никаких.

Потому что ISE умеет:
1. Человеческие копирование/вставку
2. Встроенное редактирование скриптов (не однострочных, а нормальных таких больших скриптов)
3. Табы. Человеческие табы!!! В винде! Из коробки!!!
4. Отладку

Консольное окно это тот случай, когда его использование — не олдскул, а просо олд.
+1
eaa, #
Консольное окно — это когда по ssh на винду заходишь
0
ApeCoder, #
еще оно расщширяется на самом posh и есть готовый набор расширений code.msdn.microsoft.com/PowerShellPack
0
abeshkov, #
В консольном варианте хорошее автодополнение команд и параметров по TAB делается с помощью Powertab

thepowershellguy.com/blogs/posh/pages/powertab.aspx
–2
EaS, #
Мне одному вывод виндового dir по сравнению с линуксовым ls кажется убожеством? Или это дело привычки?
+2
pel0tkin, #
+2
EaS, #
Хорошо, скажите как мне посмотреть содержимое текущий директории без дополнительной информации о файлах, только имена. И чтобы выводилось не по одному имени на строку, а на всю ширину окошка. Серьезно, неужели ls -l вам нужен чаще, чем просто ls? Ну и еще хотелось бы цветную выдачу.

И да, я ничего не имею против PS и рад этой статье потому, что давно хотел поверхностно познакомиться, но лень было искать.
0
pel0tkin, #
Если честно, понятия не имею. Я иконки в проводнике таскаю.
0
EaS, #
То есть вы обвиняете меня в троллизме за то, что я сказал, что линкусовый ls удобнее виндового dir'a, хотя ни одним из них не пользуетесь?
+1
pel0tkin, #
Вы не сказали что в линуксе удобней, Вы сказали что в винде убожество, а это немного разные вещи.
0
EaS, #
Во-первых, я сказал что мне только кажется :)
А во-вторых, лично для меня он настолько не удобнее, что это слово, опять-таки в моем понимании, вполне подходит.
И в-третьих, вы не ответили на вопрос.
0
pel0tkin, #
Странно, вот Вы линуксоид, а маны не читаете:

DIR [диск:][путь][имя файла] [/A[[:]атрибуты]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]порядок сортировки]] [/P] [/Q] [/R] [/S] [/T[[:]время]] [/W] [/X] [/4]

[диск:][путь][имя файла]
Диск, каталог или имена файлов для включения в список.

/A Отображение файлов с указанными атрибутами.
атрибуты D Каталоги. R Файлы, доступные только для чтения.
H Скрытые файлы. A Файлы, готовые для архивирования.
S Системные файлы. I Файлы с неиндексированным содержимым.
L Точки повторной обработки. - Префикс "-" имеет значение НЕ.
/B Вывод только имен файлов.
/C Применение разделителя групп разрядов при выводе размеров файлов.
Используется по умолчанию. Чтобы отключить применение
разделителя групп разрядов, задайте ключ /-C.
/D Вывод списка в нескольких столбцах с сортировкой по столбцам.
/L Использовать нижний регистр для имен файлов.
/N Новый формат длинного списка, имена файлов выводятся в крайнем
правом столбце.
/O Сортировка списка отображаемых файлов.
порядок N По имени (по алфавиту)
сортировки S По размеру (начиная с минимального)
E По расширению (по алфавиту)
D По дате и времени (начиная с самого старого)
G Начать список с каталогов. - Префикс "-" обращает порядок.
/P Пауза после заполнения каждого экрана.
/Q Вывод сведений о владельце файла.
/R Отображение альтернативных потоков данных этого файла.
/S Отображение файлов из указанного каталога и всех его
подкаталогов.
/T Выбор поля времени для сортировки.
время C Создание.
A Последнее использование.
W Последнее изменение.
/W Вывод списка в несколько столбцов.
/X Отображение коротких имен для файлов, чьи имена не соответствуют
стандарту 8.3. Формат аналогичен выводу с ключом /N, но короткие
имена файлов выводятся слева от длинных. Если короткого имени у
файла нет, вместо него выводятся пробелы.
/4 Вывод номера года в четырехзначном формате.

Стандартный набор ключей можно записать в переменную среды DIRCMD. Для отмены
их действия введите в команде те же ключи с префиксом "-", например: /-W.
+1
EaS, #
Так что же это так запрятано-то? Почему в help ls об этом не написано? Обычно в man'е достаточно полная информация о команде, почему же здесь это так запрятано?

Ну и раз уж пришлось набрать больше двух команд в PS, позвольте написать, что мне не понравилось:

1) help ls не дал список всех возможных ключей
2) help ls с ключами -full, -detailed не вывел мне то, что приведено в вашем комментарии
3) его вывод заставил меня нажимать пробел, скроллинг мышью прокручивал окно, но новой информации не появлялось
4) get-help ChildItem -detailed (предложение набрать так было в конце вывода help ls) — вывел простыню из сразу всего текста, а с конца я читать не умею
Ох ты, это, оказывается, различие между help и get-help, но в разделе «почитать» приводится более неудобная команда! Офигеть просто.
5) Ctrl-C, Ctrl-V не работаю — в принципе, ожидаемое поведение, но Ctrl-Ins, Shift-Ins тоже не сработали, а набирать ручками 'get-help ChildItem -detailed" мне как-то вломы. Правая кнопка мыши, кстати, тоже не сработала.
6) Как вы все-таки получили этот вывод?
7) Как все-таки использовать копипаст?

Знаете, когда знакомился с bash'ем, таких проблем не возникало.
0
pel0tkin, #
И снова странно! То, что я написал я получил по команде dir /?
0
EaS, #
Хм… У меня странный какой-то PowerShell. Что ls /?, что dir /? ничего не выводят, только перевод строки. А ls /D вообще ошибку выдает. Попробую погуглить, в чем проблема, но, опять-таки, это нормальное поведение для консоли?!
0
pel0tkin, #
PS C:\Users\USERNAME> help ls

ИМЯ
Get-ChildItem

ОПИСАНИЕ
Извлекает элементы и их потомки из заданных местоположений.

СИНТАКСИС
Get-ChildItem [[-Path] <string[]>] [[-Filter] ] [-Exclude <string[]
>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<Co
mmonParameters>]

Get-ChildItem [-LiteralPath] <string[]> [[-Filter] ] [-Exclude <str
ing[]>] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction]
[]

ОПИСАНИЕ
Командлет Get-ChildItem получает элементы из заданных местоположений. Если
элемент является контейнером, данный командлет получает из контейнера элеме
нты, которые называются дочерними элементами. Для извлечения элементов из в
сех дочерних контейнеров можно использовать параметр Recurse.

Местоположение может являться расположением в файловой системе, например ка
талогом, либо расположением, предоставляемым другим поставщиком, например к
устом реестра или хранилищем сертификатов.

ССЫЛКИ ПО ТЕМЕ
Online version: go.microsoft.com/fwlink/?LinkID=113308
about_Providers
Get-Item
Get-Alias
Get-Location
Get-Process

ЗАМЕЧАНИЯ
Для просмотра примеров введите: "get-help Get-ChildItem -examples".
Для получения дополнительных сведений введите: "get-help Get-ChildItem -det
ailed".
Для получения технических сведений введите: "get-help Get-ChildItem -full".
0
EaS, #
Где здесь описание, например, ключа '/D' из вашего комментария? И да, это как раз то, что я таки смог увидеть.
0
pel0tkin, #
Ключ /d таки в командной строке. Тут я ошибся окном.
0
EaS, #
Ну тогда совсем интересно. Ко всем тем вещам, что я написал ранее, добавляется еще и то, что я до сих пор не вижу в хелпе, как настроить вывод этой команды.

PS Ctrl-Shift-C еще раз проверьте, пожалуйста.
0
ApeCoder, #
ls -?
0
EaS, #
Да вы гений! Оказывается, ls -n выдаст чуть более удобоваримый вариант. Видимо, ребята из Microsoft не до конца переписали хелп, так как в хелпе ключа -n нет, но он, видимо, остался от cmd.exe. Но время, потраченное на ковыряние хелпа(!), убедило меня в том, что несмотря на неплохую попытку сделать нормальную консоль, PowerShell все еще нуждается в довольно большой доработке.
0
ApeCoder, #
возможно, тут есть некий одноранговый блаб эффект — вы видите возможности, которые еть в вашем шеле и павершелл, видите возможности, которые есть в вашем шелле и нет в павершелл, но не видите возможностей, которых нет в вашем шелле, нно есть в павершелл.
0
EaS, #
Возможно, но вот только сейчас я понял, что опции пишутся с большой буквы еще и потому, что эта заглавная буква и есть однобуквенный алиас к опции. ИМХО, эту информацию следовало бы поместить в топике, так как она не очевидна, но в то же время довольно полезна.

К тому же, я и не спорю, что возможностей для написания скриптов у PS больше, но, опять-таки, для работы command line only, он кажется мне менее приспособленным нежели bash, zsh, etc.
0
EaS, #
Опять погорячился. Это просто возможность сокращать имя опции, если нет неопределенности. Как таковых однобуквенных опция, видимо, нету.
0
ApeCoder, #
просто от названия опции можно оставлять столько начальных символов, сколько требуется, чтобы отличить от других

мне нравиться в павершелле
— объекноориентированность

— поддержка продуктов MS

— интеграция с .NET

в принципе, это используется и в коммандлайновой работе, но заметнее в автоматизации.
0
abeshkov, #
ls это всего лишь алиас для Get-ChildItem

Посмотрите по нему документацию узнаете об одной из самых интересных возможностей Powershell пришедшей в него из Unix.

Все есть файлы и директории.

— работа с реестром
get-childitem registry::hklm\software
— работа с сертификатами
get-childitem cert:\. -recurse -codesigningcert

Даже SQL server можно представить как файловый провайдер.
0
EaS, #
Да я прочитал статью, но все равно спасибо :)
И да, неужели help ls будет отличаться от help Get-ChildItem?
0
Nurked, #
На самом деле, это вы не до конца прочитали маны. Прикол заключается вот в чём:
SYNTAX
Get-ChildItem [[-Path] <string[]>] [[-Filter] ] [-Exclude <string[]>
] [-Force] [-Include <string[]>] [-Name] [-Recurse] [-UseTransaction] [<Comm
onParameters>]


А после этого, вы продолжаете читать маны по шеллу, и выясняете, что со свитч параметрами он ведёт себя очень интересно:
Что
ls -n
что
ls -nam

Это просто удобная фитча ПШ. Он позволяет сокращать свитчевые параметры
0
EaS, #
А вы не до конца прочитали ветку комментариев :)
И да, это может быть в манах по шеллу, но не в манах по ls, а я все-таки хотел лишь потрогать, а не выучить все и вся.
0
ApeCoder, #
еще можно в ise запустить спраку при помощи f1 только она про алисасы не знает
0
EaS, #
Там же ведь то же, что и help выводит?
0
ApeCoder, #
ага, только можно смотреть в более удобно виде. Вообще, бесплатные книжки есть
0
abeshkov, #
А еще можно и бесплатные русские вебкасты по Powershell смотреть :)

www.techdays.ru/Category.aspx?Tag=PowerShell
0
abeshkov, #
А еще можно если ностальгия мучает в Powershell делать

man ls

Если хочется примеров использования комманд в Powershell нужно делать вот так:

man ls -detailed
0
EaS, #
-examples не лучше будет?
0
pel0tkin, #
ctrl+shift+c
0
EaS, #
Но ведь не сами же вы это придумали, искать пришлось? Почему же когда я знакомился с bash'ем такой проблемы не возникло? Есть ведь стандартные сочетания, нафига было придумывать новое?
0
pel0tkin, #
ох лол! этим командам десятки лет!
0
EaS, #
Согласен, подзабыл. Но тем не менее, Ctrl-C, Ctrl-Ins более известны, нежели Ctrl-Shift-C.
0
EaS, #
Magic блин, у меня это тоже не работает! Хотя семерка лицензионная, по msdn aa, PowerShell, как и полагается, был с ней в комплекте.
0
pel0tkin, #
ну два раза же копипастил уже с ctrl-shift-c
0
pel0tkin, #
из командной строки и из ps
0
EaS, #
Можно $host.version, пожалуйста?
0
pel0tkin, #
0
EaS, #
Сейчас проверил на 2008 сервере. Тоже не работает. Зато работает очень странный способ копипаста (на домашнем ноуте тоже) — выделяем мышкой, потом щелкаем правой кнопкой — текст вставляется. ИМХО, лучше бы сделали это средней кнопкой, а на правую, как и ожидается повесили контекстное меню.
0
pel0tkin, #
Энтер же!
+10
Olostan, #
Я примерно год назад довольно плотно столкнулся с PS-скриптами на одном из проектов, на котором я работал. Кроме некоторого количества уже готовых скриптов (в которых пришлось разбиратся и которые писались почти PS-гурами) пришлось свои писать.

В общем впечатление такое: очень интересно, потенциально мощь (из-за возможностей .NET-а)… НО, блин, почему же так мутно: синтаксис тяжело читать, разные ограничения. То, что на C# занимает 5 стейтментов, на PS разворачивается в полотно символов… Даже Perl-скрипты, написанные бородатыми сисадминами под пиво с чипсами читалось как-то намного понятней.

Выскажу своё имхо, подкрепленное только небольшим опытом использования PS в проекте для автоматизации некоторых операций (сборка, deploy, построение-пересылка-складирование отчетов об операциях и т.д.): Неудобно.
+3
Kalantyr, #
Про Рефлектор на PS — это вы погорячились. Сила рефлектора в декомпиляции кода, а не в отображении членов классов.
–1
Nurked, #
ну так, никто не запрещает 8-)
0
grasshoppergn, #
я, уж извините, возьму на себя смелость поправить…
0
grasshoppergn, #
пардон, не вовремя отправилось
0
grasshoppergn, #
блин.
«Если же вы захотели получить справку по какой-то функции, но не знаете, как она называется, а просто предполагаете о её существовании, то просто наберите»

правильнее «предполагаете её существование»
+1
amc, #
Комментарии такого типа лучше направлять автору статьи в ЛС.
+3
Nurked, #
М, кстати, а как вам факт джедайской силы в пауэршелле?

Заходите на флешку, на которой сидит эта вирусня, котоаря по флешкам плодиться. Потом набираете
ls
И не видете ничего.
Набираете
ls -force
и видете грёбаный autorun.inf

набираете
del autorun.inf
и получаете факап от системы.
Набираете джедайско-верное
del autorun.inf -force
И… Как лазерным мечём снесло.
+4
amc, #
attrib -r -h -s *
del autorun.inf
;)

+2
Nurked, #
опять же, это просто не по-джедайски. Хотя, работает 8-)
+1
bolk, #
Чтобы показать как может выглядеть программа на PowerShell (правда, первой версии, вторую я не знаю): bolknote.ru/files/optkit.ps1
+5
BearMef, #
Все это замечательно, но одна маленькая деталь портит все удовольствие — запуск внешних программ с параметрами, особенно если параметры содержат кавычки, скобки и т.д. превращается в забавные танцы.
Почему наблюдательные парни из Майкрософта не озаботились удобным запуском внешнего софта?
Где способ задать программулину и перечислить параметры, не озабачиваясь хитрым экранированием символов и поиском где PS надумал интерпретировать параметры по своему?
MS говорит, мол, вот вам новые и крутые возможности, которых не было в bat/cmd. Замечательно! Однако то, что делалось просто в cmd теперь дико неудобно в PS.
+1
bolk, #
А дайте пример, а то я проблем особых не заметил.
+2
iblesq, #
Запуск команд PS с параметрами из-под NSIS — даже еще веселее. Лес \\\ и чурчхела кавычек…
+3
BearMef, #
....«чурчхела кавычек»

Удивительный по выразительности образ :)
0
eaa, #
запустить ssh, в кавычках указать запустить греп у которого в кавычках написать регексп с кавычками… и т.д. приходилось такое писать и еще специальную функцию, которая каждый раз эскейпила кавычки… вот это было весело отлаживать, до сих пор мурашки по коже.
0
ApeCoder, #
почему нельзя использовать select-string вместо grep?
0
moooV, #
Год назад поставил cygwin-bash и unix-toolset на винду, и зажил, как белый человек. Без необходимости учить убогий cmd и powershell.
0
Speedimon, #
Простите полюбопытствую, а они с реестром и WMI-объектами так же шустро и нативно работают?
–1
moooV, #
С реестром и WMI у меня нужды работать не было.

Ставил из-за того, что основная система — линукс, а рендер-нод на отдельном компьютере на венде ХР. На нем нужно было кое-что автоматизировать скриптом.
Само собой, чтобы не извращаться с cmd я поставил виндос — версию баша, чтобы банально иметь возможность запускать скрипты на привычном языке.

Насчет субъективной работы — тормозит шелл ужасно (банальный ls может занимать секунд 10), но с задачей справляется.
+1
Nurked, #
Мммм! Плюсы всем! Моя лучшая статья на хабре. Спасибо всем, кто голосовал, спасибо всем, кто выпендривался.

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

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

Пишите, выражайте своё мнение, это то, что мне нужно!
НЛО прилетело и опубликовало эту надпись здесь
–1
Nurked, #
Фейспалм? Вотиззис?

НЛО прилетело и опубликовало эту надпись здесь
0
uncleLem, #
Рад, что и у Windows есть хорошая консоль. А то cmd после всяких bash'ей создает ужасное впечатление.
Спасибо за статью, про PS раньше слышал, но так, краем уха. Надо будет теперь поплотнее заняться.
0
ApeCoder, #
еще надо бы ссылок надавать — на бесплатные книжки, poshcode.org/ WPK и т.д.
+1
abeshkov, #
–1
Shemet, #
Майкрософт действительно разработали что-то новое и интересное.
О, да. Действительно новое. )
0
Speedimon, #
Да. Действительно новое. Это правда, не сомневайтесь.
0
Shemet, #
А в чем собственно новизна? )
0
dax, #
Они действительно понаблюдали за пользователями других командных интерпретаторов и выяснили, какая команда чаще всего используется в интерпретаторах.


Холмс, но где же sudo?

image
0
abeshkov, #
А чем не подходит runas?
+1
dax, #
командлеты через runas.exe не работают.
зы. упс, пикча съехала
image
0
abeshkov, #
А если пользовать psexec и указывать какие командлеты подгружать через snap-in или профиль?

msdn.microsoft.com/en-us/library/ms714450(v=vs.85).aspx
0
Nurked, #
На самом деле — это был звиздёж и шелокация. Я нагло наврал. Я вообще не знаю никаких исследований на эту тему. Но звучит просто, неплохо.
+1
Siddthartha, #
а мне кажется — ужасно и так типично по-майкрософтовски. )
по вкусу напоминает 1С.Бухгалтерию)))
0
ApeCoder, #
какая бухгалтерия лучше?
–2
Siddthartha, #
О! Безусловно это лидер рынка) и, кстати, программирование под 1С — очень неплохо оплачивается даже в провинции, и работа по этому профилю всегда есть.

Только вот, пару раз попробовав — я зарёкся. И большинство моих знакомых программистов тоже.
0
ApeCoder, #
Я думаю, учетные задачи одинэсник на одинесе решит быстрее вас на чем-то-там-еще. PoSh это тоже не язык программирования а шелл
+1
abeshkov, #
А ведь главные разработчкии Powershell пришли к нам из IBM. Потребовалось несколько лет для донесения идеи едининого скриптового языка всем в компании.

Понятно что все типично по майкрософтовски потому что IBM. :)
–2
Siddthartha, #
Какая вообще разница откуда они к ВАМ пришли?
+1
abeshkov, #
Видно надо в посты включать тег юмора.
–2
Siddthartha, #
Зачем? Иронию-то я как раз заметил. Но, на мой взгляд, для нее нет оснований.
Кем бы ни были ведущие программисты этого проекта, они создали нечто полностью в духе этой системы. Нечто местами алогичное, местами произвольное, что можно только выучить, но не понять.

Например,
Первое. Командлеты в оригинальной нотации PS имеют следующую систему именования — Глагол-Объект. Это позволяет вам лучше понимать, что можно ожидать в результате выполнения того или иного командлета. Например,

Get-Process # Получить список процессов
Remove-Item # Удалить что-то
Get-Help # получить справку по чему-то
Set-Alias # Создать новый алиас
New-Item # Создать новый объект (Объектом может быть всё что угодно, например, файл)


Ребята, «New» — это не глагол и не действие!
Чувствуется, что все эти коммандлеты (!!?? wtf) долго росли как ком грязи, а не были нормально спроектированы.
0
khabarovdaniil, #
Почитал с удовольствием. Спасибо огромное. PoSh — очень интересный инструмент, а подобный материал очень редко встречаю.
Еще раз спасибо!
–1
maxidler, #
Спасибо. Интерес появился.
Новая должность и вот уже неделя на Win7 — чувствую себя крайне не комфортно, но в корпоративной среде никак без M$.
Буду автоматизировать задачи на PowerShell
–3
maxidler, #
Пару минут поглядел на что-то-делающие скрипты и теперь задаюсь вопросом…
А чем же это лучше, чем JS/VBS + WMI ????
Только тем, что менее читабельно? :)
0
ApeCoder, #
VBS имеет синтаксис менее преднзначенный для работы с файлами и их запуска.

Объектная модель WSH менее удобна для файловыз операций

Нет интеграции с .NET

Нет поддержки в SQL Server и прочее

Например, попробуйте написать на VBS

ls -r | sort FileSize -desc | select -first 20 | %{ myUtility $_.FullName }

для 20 самых больших файлов из текущего каталога и подкаталогов запутить утилиту командной строки myUtility
–1
Speedimon, #
Если вы правда не можете понять чем, то вам не стоит программировать. Простите.
0
maxidler, #
ну чем лучше vbs я понял.
чем лучше WMI — нет
чем лучше bash+binutils тоже слабо помнимаю
простите, но программировать… и скриптовать несколько разные вещи, или я ошибаюсь?
P.S. при том что и то и другое можно делать на vbs/js/bash/cmd/python/php/ruby/perl etc…

+1
bestfriend, #
Подскажите, пож-та, можно ли встроенными в винду средствами (а может быть, этим самым павершеллом) сделать так, чтобы при подключении моей мобилки к усб и определению её как внешнего накопителя, происходило автоматическое копирование его содержимого в указанную папку на моем ноуте? Если да, то как :)
0
Decoy, #
Спасибо за статью!

Есть ли штатный способ хранить глобальную историю команд?
0
Decoy, #
Снимок экрана, из которого можно почерпнуть пару трюков: goo.gl/bDJBm (via @msuiche)
0
boronins, #
Отличная статья, спасибо Nurked!

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