В этом разделе будем обсуждать, делиться накопленным опытом по работе с PowerShell. Кто не знаком, PowerShell - это оболочка, которая очень похожа на (cmd.exe). PS позволяет автоматизировать задачи, которые на первый взгляд имеют очень сложное решение. На мой взгляд, самое долгожданное удобство - alias'ы. Привыкли сидеть в *NIX'ах? - пожалуйста, переход будет не очень болезненный, т.к. большинство алиасов поддерживается. Например: Code: PS U:\> ps e* Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 637 17 21628 32968 130 81,59 2436 explorer Вообще средствами PowerShell можно работать с системой без графического интерфейса. Очень порадовала поддержка .NET платформы. Правильно, можете писать всё что угодно "на" PowerShell. P.S.: немного позже будет написана статья (вместо ---^), в которой я ознакомлю Вас с основными методами работы. А так же свои наработки и примеры решений повседневных задач администрирования. В статье будут выработаны пути решения рутинных задач.
Помню, видел много видеороликов на данную тему, наверное на techdays.ru сейчас поищу. p.s. Нашел, вот тут.Видео, на данную тему. А тут прямая ссылка http://www.oszone.net/4781/PowerShell - а тут еще дополнительно
Большой список полезной информации от русского MVP по Powershell Василия Гусева ,собственно его вебтрансляции и на techdays.ru http://xaegr.wordpress.com/poshlinks/
Потребовалось сделать простенький скрип на powershell =) Есть 2 файла в одном: Требуется: 192.168.1.10 pc1 ivanov 00:11:22:33:44:55
Может кому потребуется.Вопрос был задан в Irc и был решен с помощью Total Commander.Но без стороних средств решается довольно просто. powershell bat
Простая функция получения Rss c antichat. Get-AntichatRss вывод: Title Link Date Creator ----- ---- ---- ------- нужно восстановить почту н... http://forum.antichat.ru/s... 22.02.2010 11:38:45 IgAlex Так же без обезания. Get-AntichatRss | fl * И допустим получить последние 3 сообщения: Get-AntichatRss | select -first 3 | fl * Или получить приятный интерактивный вывод: Get-AntichatRss | Out-GridView -Title "Antichat Rss"
Продолжая вчерашний пост про RSS.Благодаря MVP Василию Гусеву по PowerShell ,я немного подрихтовал его скрипт и адаптировал для получения RSS с античат.Его скрипт http://xaegr.wordpress.com/2009/01/19/pstwitps1/ .
Для создания базовых элементов Windows Form на Powershell,есть замечательная программа от Sapien под названием PrimalForms( http://www.primaltools.com/downloads/communitytools/download.asp?file=pforms ) . С помощью нее можно быстро создать базовые элементы,так же можно использовать Visual Studio( здесь будет сложнее,код создается на C# ,в программе выше сразу имеем код на PowerShell).Так же другие полезные программы от Sapien для PowerShell на сайте http://www.primaltools.com/downloads/communitytools/index.asp И сделал с помощью PrimalForms простой пример с удалением дублей без учета регистра.Просто небольшой показ возможностей. Наша форма: Ничего сверхестественного скрипт не делает,а лишь выполняет команду: Сам скрипт:
Еще один небольшой пример работы с PrimalForms, а именно получение IP по имени и на оборот имени по IP(так сказать минимальная возможность nslookup). Проверку на валидность IP ,здесь я взял regex с сайта http://www.regular-expressions.info/examples.html .
Написал для себя скрипт ,который мониторит папку на события Changed, Created, Deleted и Renamed . Для этого воспользовался классом FileSystemWatcher - класс . Есть одна неприятность если явно не указано свойство SynchronizingObject ,то Powershell завершает свою работу.Поэтому в скрипт пришлось добавить объект Form(спасибо /\/\o\/\/ ).Для остановки скрипта добавим в область уведомления ярлык с единственным возможным действием Exit. Вывод: 2:36 : F:\1\3.txt Deleted 2:36 : F:\1\New Text Document.txt Deleted 2:36 : F:\1\2.txt Deleted 2:36 : F:\1\2 (2).txt Deleted
Известно,что PowerShell позволяет использовать WinApi функции в своих скриптах.Один из MVP Shay Levi продемонстировал ,как скрыть ярлыки рабочего стола с помощью функции ShowWindow ( http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2009/05/11/show-or-hide-your-desktop-icons-with-powershell.aspx). Немного добавив в его скрипт ,мы можем скрывать и другие окна.Я думаю это полезный пример и просто совет на будущее. #requires -Version 2.0 - указывает ,что требуется версия PowerShell 2.0.
Была затронута тема отправка файла на FTP.Существует большое колличество способов и пару простых способов продемонстрирую. 1)Использование стандартного клиента ftp.exe. 2)Использование класса FtpWebRequest Class Поддержка Proxy : 3)Использование библиотеки BytesRoad.NetSuit ,возможна работа с Proxy (Socks4,5,HTTP) Загрузить библиотеку можно по адресу - http://coad.net/blog/resources/BytesRoad.NetSuit_2_0.zip
Написал для себя простую функцию для получения всех локальных профилей на машине. Get-AllProfiles | ft -auto Вывод: Или используя: Get-AllProfiles | Out-GridView
На одном из форумов был задан вопрос - "Нужно распечатать 1000 *.pdf файлов. Но только первую страницу каждого из файлов. " Решение конечно не красивое,но рабочее.Что требуется: 1)Качаем http://sourceforge.net/projects/pdfsharp/files/pdfsharp/PDFsharp%201.31/PDFsharp-MigraDocFoundation-Assemblies-1_31.zip/download 2)Распаковываем. 3)Наличие Adobe Reader. 4)Свободное место. Суть скрипта создаем новый файл только с первой страницей (в данном случаем в F:\print\ - заменить на свое ) и распечатываем ее.Т.е у нас будет создано 1000 файлов и в каждом только 1 страница. 'F:\PdfSharp.dll' - заменяем на путь куда распаковали Get-ChildItem F:\ -Filter *.pdf - для примера искать pdf в корне диска Пример работы взят с сайта http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx
Есть файл с логами формат: xxxxx yyyyy zzzzzzz xxxxx yyyyy zzzzzzz Требуется вывод: xxxxx yyyyy zzzzzzz За одно используем особенность ,которую описал в своем блоге MVP PowerShell Marc van Orsouw (http://thepowershellguy.com/blogs/posh/archive/2007/10/23/how-to-go-to-the-next-item-in-a-for-loop-in-powershell.aspx) Как выше было сказано,что при вызове MoveNext() не обновляется переменная (в данном случае $i) ,а используется $foreach.current
На форуме был задан вопрос: Т.к я не знаю JavaScript,решение было на PowerShell. Code: $ou = New-Object -com outlook.application $ns = $ou.GetNamespace("MAPI") #Отбираем только последнее письмо из папки Входящие,содержащим txn_id $change=$ns.GetDefaultFolder(6).Items | Where-Object { $_.body -like "*txn_id=*"} | Select-Object -First 1 $change.body -match "amount= (.+)" | Out-Null #Считаем по заданной формуле $cal = [float]$matches[1]+(([float]$matches[1]/100)*15) $change.body = $change.body -replace "amount=.+","amount= $cal" Вот таким не хитрым действием ,мы решили проблему
Как удалить с помощью скрипта файлы в корзине: Константы ShellSpecialFolderConstants - http://msdn.microsoft.com/en-us/library/bb774096(v=VS.85).aspx В данном случае: ssfBITBUCKET = 0x0a