Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Справочный материал PowerShell (http://forum.oszone.net/showthread.php?t=292023)

IVa_ 03-12-2014 12:56 2439025

Справочный материал PowerShell
 
Сайты с примерами скриптов, нововведениями, обсуждениями модулей и т.д.
Ссылки на сайты
  • Код:

    #Архив Сценариев PowerShell – примеры использования PowerShell с некоторыми программами например  ExcelAplication, Active directory.
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://www.electricmonk.org.uk’)
    $ie
    $ie.Document

  • Код:

    # Сайт посвящён командной оболочке, примеры, книги, форум и все для успешного изучения и обмена опыта с другими участниками.
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://powershell.com/’)
    $ie
    $ie.Document

  • Код:

    # Был рад этому интернет ресурсу, Нашел много интересного, примеры скриптов PowerShell, описания и много удивительных людей.
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘https://github.com/’)
    $ie
    $ie.Document

  • Код:

    # Программа для работы с Active Directory и прочая иформация касающиеся оболочки Powershell
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘https://www.manageetngine.com/’)
    $ie
    $ie.Document

  • Код:

    # В блоге PowerShell  - Обсуждаются нововведения, технологические идеи.
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://www.tomsitpro.com/tags/?refine=powershell’)
    $ie
    $ie.Document

  • Код:

    # Сайт целиком посвящен командной оболочке PowerShell
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://powershelldistrict.com/’)
    $ie
    $ie.Document

  • Код:

    #Ссылка на ссылки интернет ресурсы для более детального изучения
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://sqlvariant.com/powershell-links/’)
    $ie
    $ie.Document

  • Код:

    # Предоставляю вашему обзору ресурс на котором рассматриваются Модули, Скрипты, нововведения -  CodePlex является свободным открытым исходным кодом проекта хостинг сайта компании Microsoft.
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘https://www.codeplex.com/’)
    $ie
    $ie.Document

  • Код:

    # команды оболочек  PowerShell, CMD, VB script Bach, и других
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://ss64.com/’)
    $ie
    $ie.Document

  • Код:

    # Примеры использования PowerShell
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://www.itninja.com/tag/powershell/’)
    $ie
    $ie.Document

  • Код:

    # Полезный ресурс для изучения и повышения знания командной оболочки PowerShell
    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $true
    $ie.Navigate(‘http://www.powershellpro.com/')
    $ie
    $ie.Document


Коллекция книг.Много полезного материала для тех кто начал изучать оболочку PowerShell
Загрузка книг
  • Код:

    #       
    # .NOTES
    #===========================================================================         
    #        Created with:        SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.75
    #        Created on:          16.05.2015 21:01
    #        Created by:          Iva_
    #        Organization:        OSzone
    #        Filename:            Загрузка книг средствами PowerShell                                                                                                   
    #===========================================================================       
    #            .DESCRIPTION                                                                                                                                                       
    #            A description of the file.                                                                                                                                           
    ############################################################################
    $flesh = "J:\"
    # Диск для записи
    $WebClient = New-Object -TypeName NET.WebClient
    $hTable = @{
    # Создаем Хэш таблицу 'ссылка' = "переменная/Название док-та"       
    'http://powershell.com/cs/media/p/23856/download.aspx' = "$Flesh\File_system_tasks.pdf";       
    'http://powershell.com/cs/media/p/24814/download.aspx' = "$flesh\Arrays_and_Hash_Tables.pdf";       
    'http://powershell.com/cs/media/p/25742/download.aspx' = "$flesh\Date_Time_and_Culture.pdf";       
    'http://powershell.com/cs/media/p/26784/download.aspx' = "$flesh\Objects_and_Types.pdf";       
    'http://powershell.com/cs/media/p/28283/download.aspx' = "$flesh\WMI.pdf";       
    'http://powershell.com/cs/media/p/29098/download.aspx' = "$flesh\Regular_Expressions.pdf";       
    'http://powershell.com/cs/media/p/29920/download.aspx' = "$flesh\Functions.pdf";       
    'http://powershell.com/cs/media/p/30542/download.aspx' = "$flesh\Static_.NET_Methods.pdf";       
    'http://powershell.com/cs/media/p/31297/download.aspx' = "$flesh\Registry.pdf";       
    'http://powershell.com/cs/media/p/32274/download.aspx' = "$flesh\Internet-Related_Tasks.pdf";       
    'http://powershell.com/cs/media/p/33169/download.aspx' = "$flesh\XML-Related Tasks.pdf";       
    'http://powershell.com/cs/media/p/38383/download.aspx' = "$flesh\Security-Related_Tasks.pdf";
     }
    $hTable.GetEnumerator() | ForEach-Object -Process {       
    Write-Host "From: $($_.Name)"       
    Write-Host "Into: $($_.Value)"       
    $WebClient.DownloadFile($_.Name, $_.Value)       
     }


Administration Windows Server and PowerShell Windows Book's
Download Book's. Administration Windows Server and PowerShell Windows Book's
  • Код:

    <#               
    .NOTES       
    ===========================================================================         
    Created with:        SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.75         
    Created on:          15.05.2015 21:36       
    Created by:          Iva_         
    Organization:                  Oszone
    Filename:                      Download book
    ===========================================================================       
    .DESCRIPTION               
    A description of the file.
     #>
    function Get-Webclient {       
              $wc = New-Object Net.WebClient       
              $wc.UseDefaultCredentials = $true       
              $wc.Proxy.Credentials = $wc.Credentials       
              $wc
    }
    $url = 'Ссылку на загрузку'
    $object = Get-Webclient
    $localPath = "$home\Documents\название док-та.формат(pdf,doc,xml)"
    $object.DownloadFile($url, $localPath) explorer.exe "/SELECT,$LocalPath"
    Invoke-Item -Path $localPath


Free Tools
Download PowerShellPlus Professional Edition

Код:

#Для загрузки нужно заполнить форму
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate(‘https://www.idera.com/productssolutions/freetools/powershellplus/')
$ie
$ie.Document


Скрипт
EventLog Windows seven

Код:

 
    # Вывести список событий за указанный интервал времени
      $from = (Get-Date) - (New-Timespan -Minutes 60 )
    # переменная from, создает интервал времени(промежуток), за который отображает события из журнала событий
    #командлейт get-date получает дату, командлейтом new-timespan задать, интервал времени.
    get-eventlog -List | Select-Object -ExpandProperty Log | 
      # Получаем список журналов событий,вывод сведений записей журнала событий,
        Foreach-Object { Write-Progress 'Напишите тут что не будь' $_; $_} | 
        # индикатор выполнения твоих действий,
        Foreach-Object {$log = $_; 
        #Соблюдая последовательность, создаем условия, сохраняем объекты, глобальная переменная.
        try { Get-EventLog -after $from -LogName $log -ea stop | 
        #Получить список событий, из переменной $from, записи журнала
        Add-Member NoteProperty EventLog $log -pass  } 
        # добавляем свойства, свойства записи журнала событий с параметром pass.
        catch { Write-Warning "Unable to access $log : $_"} } |
        #Индикатор выполнения, предупреждение при отсутствии заданных условий для списков журнала событий.
        Sort-Object TimeGenerated -desc  | 
        # Сортирует объекты , формирует список по убыванию.
        Select-Object EventLog, TimeGenerated, EntryType, Source, Message | 
        #Выбирает свойства объекта.
        Format-Table -Auto
        #формируем вывод

При выводе уведомления об ошибки разрешения выполнения, смените правило политики выполнения.
Уяснить установленную политику нужно командой
Код:

get-executionPolicy
установить политику выполнения, возможно с помощью командлейта set, сменив надоедливый get на set выбрав нужную политику, из списка политик выполнения.
Example
Код:

* set-executionPolicy RemoteSigned

IVa_ 24-06-2016 15:50 2645381

Инлайн ассемблер в PowerShell

Книга о Powershell

The powershell guy

PowerShell scripts

IVa_ 24-06-2016 16:21 2645390

Видео галерея.Веб-касты о Windows Powershell

Powershell Tutorial Online

dyn-win 12-05-2017 20:29 2736227

Наткнулся случайно, поэтому делюсь ссылкой. Может кому сгодится.
Пакет системных утилит

Iska 12-05-2017 23:27 2736259

Цитата:

Цитата dyn-win
Наткнулся случайно, »

Пользователь: greg zakharov.

IVa_ 04-06-2017 14:13 2742015

PowersShell в действии работа с строками "STRING"
Код:

  • #Удалить пробелы из начала строки
    $string = ' forum.Ozone.net '
    $string = $string.TrimStart()
  • #удалить пробелы в конце строки
    $string = ' forum.Ozone.net '
    $string = $string.TrimEnd()
  • #Удалить пробелы в начале и в конце строки
    $string = ' forum.Ozone.net '
    $string = $string.Trim()
  • #изменить регистр символов применить Верхний регистр
    $string = 'news forum oszone.net rss'
    $string = $string.ToUpper()
  • #И обратно в нижний регистр
    $string = 'news forum oszone.net rss'
    $string = $string.ToLower()
  • #Выбираем подстроку "к.ф" из строки Компьютерный Форум OsZone.net
    $strin = 'Компьютерный Форум OsZone.net'
    $strin.Substring(0,18)
  • #Вывод строки  OsZone.net
    $strin = 'Компьютерный Форум OsZone.net'
    $strin.Substring(19)
  • #Узнать длину строки
    $String.Length
  • #Объединить переменные
    $string = 'Oszone'
    $string1 = '.'
    $string2 = 'net'
    [string]::Concat($string,$String1,$string2)
  • #Проверить наличие строчных букв в строке
    $string = 'Oszone.net'
    $string -cmatch "^[a-z]*$"
  • #Преобразовать число в систему счисления и наоборот
    [system.convert]::ToString(1234.2)
    [system.convert]::ToInt32(1110.2)


Iska 04-06-2017 14:35 2742023

Цитата:

Цитата IVa_
#Проверить наличие строчных букв в строке
$string = 'Oszone.net'
$string -cmatch "^[a-z]*$" »

Вообще-то, данный код проверяет, что:
  • либо данная строка пустая;
  • либо все символы данной строки — строчная латиница,
а вовсе не «проверить наличие».

IVa_ 04-06-2017 14:44 2742025

Говорим вместе с PowerShell
Код:

Add-Type -AssemblyName System.Speech
$Speech = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer
$Speech.Speak('Hello Users forums OSZONE.NET')

Цитата:

Цитата Iska
а вовсе не «проверить наличие» »

Понять можно и так, два значения Истина, Ложь
Истина - все буквы Верхнего регистра
Ложь - любое несоответствие истине

IVa_ 04-06-2017 15:13 2742037

Курс для желающих поближе познакомиться с одним из инструментов управления ОС Windows.
Введение в оболочку командной строки Windows PowerShell.

Iska 04-06-2017 16:24 2742058

Цитата:

Цитата IVa_
Понять можно и так, два значения Истина, Ложь
Истина - все буквы Верхнего регистра »

И снова неверное толкование. Я же писал выше:
Цитата:

Цитата Iska
либо данная строка пустая; »

Вот:

— «Истина». Тут все буквы верхнего регистра? Тут нет ни одной буквы верхнего регистра.

IVa_ 04-06-2017 17:07 2742072

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

Iska 04-06-2017 17:59 2742083

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

Для «проверить наличие строчных букв в строке» регулярное выражение для оператора «-cmatch» должно выглядеть так:
Код:

"[a-zа-яё]"
Для «все буквы нижнего регистра» регулярное выражение для оператора «-cmatch» должно выглядеть так:
Код:

"^[a-zа-яё]+$"
Пустая строка данными регулярными выражениями обрабатывается должным и корректным образом.

jkadaba 23-03-2021 19:01 2953721

Пацаны! Это ж ох**ть крутая вещь обращаться к драйверу из pwsh без сторонних тулз и дллэлок! Надеюсь greg zakharov не будет против если скопипижжу его код отсюда прямо сюда.
Наглый копипаст
Код:

using namespace System.Text
using namespace System.Reflection
using namespace System.ComponentModel
using namespace System.Reflection.Emit
using namespace System.Linq.Expressions
using namespace System.Runtime.InteropServices
#################################################################################################
#############    Accessing Beep driver without third party tools and assemblies    ############
#############                        Add-Type cmdlet free                            ############
#############                                                                        ############
#################################################################################################
if (![Environment]::Is64BitOperatingSystem) {
  throw [InvalidOperationException]::new('PoC requires x64 system.')
}

$requires = @{GetProcAddress = [IntPtr]::Zero; GetModuleHandleW = [IntPtr]::Zero}
$ib = ($ps = Get-Process -Id $pid).Modules.Where{$_.ModuleName -match 'kernel32'}.BaseAddress
$ps.Dispose()

$va = [Marshal]::ReadInt32([IntPtr]([Marshal]::ReadInt32($ib, 0x3C) + $ib.ToInt64() + 0x88))
$nn = [Marshal]::ReadInt32($ib, $va + 0x18) # number of names
$af = [Marshal]::ReadInt32($ib, $va + 0x1C) # address of functions
$an = [Marshal]::ReadInt32($ib, $va + 0x20) # address of names

$tmp = $ib.ToInt64()
(0..($nn - 1)).ForEach{
  if (($name = [Marshal]::PtrToStringAnsi(
    [IntPtr]($tmp + [Marshal]::ReadInt32([IntPtr]($tmp + $an + $_ * 4)))
  )) -in $requires.Keys) {
    $requires[$name] = $tmp + [Marshal]::ReadInt32([IntPtr]($tmp + $af + $_ * 4))
  }
}

$delegate = {
  param([IntPtr]$a, [Type]$p, [CallingConvention]$cc = 'StdCall')

  end {
    $method = $p.GetMethod('Invoke')
    $returntype, $parameters = $method.ReturnType, $method.GetParameters().ParameterType
    $il = ($holder = [DynamicMethod]::new('Invoke', $returntype, $parameters, $p)).GetILGenerator()

    if ($parameters) {
      (0..($parameters.Length - 1)).ForEach{ $il.Emit([OpCodes]::ldarg, $_) }
    }
    $il.Emit([OpCodes]::ldc_i8, $a.ToInt64())
    $il.EmitCalli([OpCodes]::calli, $cc, $returntype, $parameters)
    $il.Emit([OpCodes]::ret)

    $holder.CreateDelegate($p)
  }
}

$delegates = {
  param([String]$d, [ScriptBlock]$s)

  end {
    $GetProcAddress = & $delegate $requires.GetProcAddress ([Func[IntPtr, String, IntPtr]])
    $GetModuleHandle = & $delegate $requires.GetModuleHandleW ([Func[[Byte[]], IntPtr]])

    if (($mod = $GetModuleHandle.Invoke([Encoding]::Unicode.GetBytes($d))) -eq [IntPtr]::Zero) {
      throw [DllNotFoundException]::new("Cannot find $d library.")
    }

    $funcs = @{}
    for ($i, $m, $fn, $p = 0, ([Expression].Assembly.GetType(
        'System.Linq.Expressions.Compiler.DelegateHelpers'
      ).GetMethod('MakeNewCustomDelegate', [BindingFlags]'NonPublic, Static')
      ), [Marshal].GetMethod('GetDelegateForFunctionPointer', ([IntPtr])),
      $s.Ast.FindAll({$args[0].CommandElements}, $true).ToArray();
      $i -lt $p.Length; $i++
    ) {
      $fnret, $fname = ($def = $p[$i].CommandElements).Value

      if (($fnsig = $GetProcAddress.Invoke($mod, $fname)) -eq [IntPtr]::Zero) {
        throw [InvalidOperationException]::new("Cannot find $fname signature.")
      }

      $fnargs = $def.Pipeline.Extent.Text
      [Object[]]$fnargs = [String]::IsNullOrEmpty($fnargs) ? $fnret : (
        ($fnargs -replace '\[|\]' -split ',\s+').ForEach{
          $_.StartsWith('_') ? (Get-Variable $_.Remove(0, 1) -ValueOnly) : $_
        } + $fnret
      )

      $funcs[$fname] = $fn.MakeGenericMethod(
        [Delegate]::CreateDelegate([Func[[Type[]], Type]], $m).Invoke($fnargs)
      ).Invoke([Marshal], $fnsig)
    }

    Set-Variable -Name $d -Value $funcs -Scope Script -Force
  }
}

$buf, $ptr, $ptr_ = [Byte[]], [IntPtr], [IntPtr].MakeByRefType()

& $delegates kernel32 {
  bool CloseHandle([_ptr])
  bool DeviceIoControl([_ptr, uint, _buf, uint, _ptr, uint, _buf, _ptr])
}

& $delegates ntdll {
  void RtlInitUnicodeString([_buf, _buf])
  int  RtlNtStatusToDosError([int])
  int  NtCreateFile([_ptr_, int, _buf, _buf, _ptr, uint, uint, uint, uint, _ptr, uint])
}

$uni = [Byte[]]::new(($psz = [IntPtr]::Size) * 2) # UNICODE_STRING
$ntdll.RtlInitUnicodeString.Invoke($uni, [Encoding]::Unicode.GetBytes('\Device\Beep'))

$isb = [Byte[]]::new($psz * 2) # IO_STATUS_BLOCK (take but not check)
try {
  $gch = [GCHandle]::Alloc($uni, [GCHandleType]::Pinned)
  [Byte[]]$obj = [BitConverter]::GetBytes($psz * 6) + (
    ,0 * (4 + $psz) # OBJECT_ATTRIBUTES initialization
  ) + [BitConverter]::GetBytes(
    $gch.AddrOfPinnedObject().ToInt64()
  ) + (,0 * ($psz * 3))

  $hndl = [IntPtr]::Zero
  if (0 -ne ($nts = $ntdll.NtCreateFile.Invoke(
    [ref]$hndl, 0x80000000, $obj, $isb, [IntPtr]::Zero, 128, 1, 3, 0, [IntPtr]::Zero, 0
  ))) { throw [Win32Exception]::new($ntdll.RtlNtStatusToDosError.Invoke($nts)) }

  [Byte[]]$beep = [BitConverter]::GetBytes(1000) + [BitConverter]::GetBytes(700)
  $ret = [Byte[]]::new(4)
  [void]$kernel32.DeviceIoControl.Invoke(
    $hndl, (1 -shl 16), $beep, $beep.Length, [IntPtr]::Zero, 0, $ret, [IntPtr]::Zero
  )
}
catch { Write-Host $_ }
finally {
  if ($hndl -and $hndl -ne [IntPtr]::Zero) {
    if (!$kernel32.CloseHandle.Invoke($hndl)) { Write-Warning 'device has not been released.' }
  }

  if ($gch) { $gch.Free() }
}



Время: 08:33.

Время: 08:33.
© OSzone.net 2001-