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.: немного позже будет написана статья (вместо ---^), в которой я ознакомлю Вас с основными методами работы. А так же свои наработки и примеры решений повседневных задач администрирования. В статье будут выработаны пути решения рутинных задач.
     
    _________________________
    1. SpangeBoB

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

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

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

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

        Joined:
        22 Dec 2007
        Messages:
        527
        Likes Received:
        257
        Reputations:
        46
        Помню, видел много видеороликов на данную тему, наверное на techdays.ru сейчас поищу.

        p.s. Нашел, вот тут.Видео, на данную тему.
        А тут прямая ссылка
        http://www.oszone.net/4781/PowerShell - а тут еще дополнительно
         
        #3 procedure, 11 Nov 2008
        Last edited: 25 Nov 2008
        1 person likes this.
        1. 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.
          1. FraiDex

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

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

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

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

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

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

                  powershell
                  bat
                   
                  1. 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.
                    1. 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]

                       
                      1. 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]

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

                         
                        1. 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.
                          1. 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
                            1. 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
                              1. 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.
                                1. 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.
                                  1. 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
                                    1. 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
                                       
                                      1. 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"
                                        Вот таким не хитрым действием ,мы решили проблему ;)
                                         
                                        1. 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