PowerShell. Советы, методы, итд.

Discussion in 'Windows' started by NaX[no]rT, 11 Jul 2008.

  1. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    В этом разделе будем обсуждать, делиться накопленным опытом по работе с 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.: немного позже будет написана статья (вместо ---^), в которой я ознакомлю Вас с основными методами работы. А так же свои наработки и примеры решений повседневных задач администрирования. В статье будут выработаны пути решения рутинных задач.
     
    _________________________
  2. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Теперь PoSH можно использовать в ASP.

    http://www.powershelltoys.com/default.aspx
     
  3. procedure

    procedure Elder - Старейшина

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    #3 procedure, 11 Nov 2008
    Last edited: 25 Nov 2008
    1 person likes this.
  4. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Большой список полезной информации от русского MVP по Powershell Василия Гусева ,собственно его вебтрансляции и на techdays.ru

    http://xaegr.wordpress.com/poshlinks/
     
    CKAP likes this.
  5. FraiDex

    FraiDex Elder - Старейшина

    Joined:
    16 Jun 2006
    Messages:
    193
    Likes Received:
    68
    Reputations:
    -11
    Знакомство с Windows PowerShell (документация)
    Вот неплохой материал:
    Скачать
     
  6. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    PowerGUI - IDE-шка для PowerShell с возможностями отладки
     
  7. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Потребовалось сделать простенький скрип на powershell =)
    Есть 2 файла в одном:
    Требуется:
    192.168.1.10 pc1 ivanov 00:11:22:33:44:55


     
    #7 SpangeBoB, 15 Jan 2010
    Last edited: 15 Jan 2010
  8. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Может кому потребуется.Вопрос был задан в Irc и был решен с помощью Total Commander.Но без стороних средств решается довольно просто.

    powershell
    bat
     
  9. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Простая функция получения 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"
    [​IMG]
     
    #9 SpangeBoB, 22 Feb 2010
    Last edited: 22 Feb 2010
    2 people like this.
  10. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Продолжая вчерашний пост про RSS.Благодаря MVP Василию Гусеву по PowerShell ,я немного подрихтовал его скрипт и адаптировал для получения RSS с античат.Его скрипт http://xaegr.wordpress.com/2009/01/19/pstwitps1/ .

    [​IMG]

    [​IMG]

     
  11. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Для создания базовых элементов 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 простой пример с удалением дублей без учета регистра.Просто небольшой показ возможностей.

    Наша форма:
    [​IMG]

    Ничего сверхестественного скрипт не делает,а лишь выполняет команду:
    Сам скрипт:

     
  12. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Еще один небольшой пример работы с PrimalForms, а именно получение IP по имени и на оборот имени по IP(так сказать минимальная возможность nslookup). Проверку на валидность IP ,здесь я взял regex с сайта http://www.regular-expressions.info/examples.html .

    [​IMG]

     
    1 person likes this.
  13. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Написал для себя скрипт ,который мониторит папку на события 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
     
    #13 SpangeBoB, 15 Mar 2010
    Last edited: 15 Mar 2010
  14. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Известно,что 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.
     
    #14 SpangeBoB, 22 Mar 2010
    Last edited: 22 Mar 2010
  15. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Была затронута тема отправка файла на 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

     
    #15 SpangeBoB, 28 Mar 2010
    Last edited: 28 Mar 2010
    1 person likes this.
  16. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Написал для себя простую функцию для получения всех локальных профилей на машине.

    Get-AllProfiles | ft -auto

    Вывод:
    [​IMG]

    Или используя:
    Get-AllProfiles | Out-GridView

    [​IMG]
     
    #16 SpangeBoB, 29 Mar 2010
    Last edited: 29 Mar 2010
    1 person likes this.
  17. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    На одном из форумов был задан вопрос - "Нужно распечатать 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
     
    #17 SpangeBoB, 5 Apr 2010
    Last edited: 5 Apr 2010
  18. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Есть файл с логами формат:
    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
     
  19. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    На форуме был задан вопрос:
    Т.к я не знаю 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"
    Вот таким не хитрым действием ,мы решили проблему ;)
     
  20. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    Как удалить с помощью скрипта файлы в корзине:
    Константы ShellSpecialFolderConstants - http://msdn.microsoft.com/en-us/library/bb774096(v=VS.85).aspx

    В данном случае:
    ssfBITBUCKET = 0x0a