Войти

Показать полную графическую версию : Справочный материал PowerShell


IVa_
03-12-2014, 12:56
Сайты с примерами скриптов, нововведениями, обсуждениями модулей и т.д.



#Архив Сценариев 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



<#
.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


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


Скрипт



# Вывести список событий за указанный интервал времени
$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
Инлайн ассемблер в PowerShell (https://habrahabr.ru/post/304010/)

Книга о Powershell (https://blogs.technet.microsoft.com/abeshkov/2008/02/29/870/)

The powershell guy (http://thepowershellguy.com/)

PowerShell scripts (http://www.rlmueller.net/PSScripts.htm)

IVa_
24-06-2016, 16:21
Видео галерея.Веб-касты о Windows Powershell (http://www.mashpedia.com/Windows_PowerShell)

Powershell Tutorial Online (http://powershelltutorial.net)

dyn-win
12-05-2017, 20:29
Наткнулся случайно, поэтому делюсь ссылкой. Может кому сгодится.
Пакет системных утилит (https://github.com/gregzakh/winside)

Iska
12-05-2017, 23:27
Наткнулся случайно, »
Пользователь: greg zakharov (http://forum.oszone.net/member.php?userid=516369).

IVa_
04-06-2017, 14:13
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
#Проверить наличие строчных букв в строке
$string = 'Oszone.net'
$string -cmatch "^[a-z]*$" »
Вообще-то, данный код проверяет, что:
либо данная строка пустая;
либо все символы данной строки — строчная латиница,
а вовсе не «проверить наличие».

IVa_
04-06-2017, 14:44
Говорим вместе с PowerShell
Add-Type -AssemblyName System.Speech
$Speech = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer
$Speech.Speak('Hello Users forums OSZONE.NET')

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

IVa_
04-06-2017, 15:13
Курс для желающих поближе познакомиться с одним из инструментов управления ОС Windows.
Введение в оболочку командной строки Windows PowerShell. (http://www.intuit.ru/studies/courses/1059/225/lecture/27313)

Iska
04-06-2017, 16:24
Понять можно и так, два значения Истина, Ложь
Истина - все буквы Верхнего регистра »
И снова неверное толкование. Я же писал выше:
либо данная строка пустая; »
Вот:
http://i.imgur.com/qkECtx6.png
— «Истина». Тут все буквы верхнего регистра? Тут нет ни одной буквы верхнего регистра.

IVa_
04-06-2017, 17:07
Да верно, но с пустой строкой это выражение теряет смысл, виду его основного предназначения вывод истинности с символами верхних и нижних регистров.

Iska
04-06-2017, 17:59
IVa_, выражение не теряет смысла. Приведённое Вами описание некорректно. Пустая строка — точно такая же строка, как и любая другая.

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

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

jkadaba
23-03-2021, 19:01
Пацаны! Это ж ох**ть крутая вещь обращаться к драйверу из pwsh без сторонних тулз и дллэлок! Надеюсь greg zakharov не будет против если скопипижжу его код отсюда (https://yandex.ru/chat#/chats/1%2F0%2Fbebed620-df0e-4143-949d-fac11d763e33) прямо сюда.
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() }
}




© OSzone.net 2001-2012