Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell

Модерирует : KLASS, IFkO

KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

   

Uriu

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Версии

PowerShell 1.0 -  На текущий момент совершенно неактуальная версия, интересная только для истории. /Прямые ссылки/
PowerShell 2.0 и WinRM 2.0 - Последняя версия, работающая на Windows XP и Windows 2003 (Ещё) /Прямые ссылки/
PowerShell 3.0 (Windows Management Framework 3.0)
PowerShell 4.0 (Windows Management Framework 4.0)
PowerShell 5.0 (Windows Management Framework 5.0)
PowerShell 5.1 (Windows Management Framework 5.1)
PowerShell Core 6.0 (не заменяет PowerShell 5.1)



Ассоциация

Что бы ассоциировать скрипты с PowerShell, аналогично выполнению .bat/.cmd-файлов
нужно в командной строке набрать следующую команду(ы)
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\system32\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\sysWOW64\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версия 6.0 дя 32-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files (86)\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*
Версия 6.0 дя 64-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*



вопрос о подписи скриптов

Что бы PowerShell не задавал вопрос о том, что скрипты не подписаны, ввести в нем команду
set-executionpolicy unrestricted
или в командной строке
powershell Set-ExecutionPolicy Unrestricted -force
(для этих 2-х действий требуются административные права)



Прочее


  • Если используете "белый список" в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников кодировка скриптов на PowerShell должна быть 1251 (ANSI)




Расширение возможностей PowerShell
Функции
* Write-Color
* PowerTab --- Расширение функций клавиши Tab
Провайдеры
Готовые скрипты
* Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
 


Работа со сценариями в Windows PowerShell
Раздел в MSDN
Краткие справочники по Windows PowerShell 3.0 (english)
Windows PowerShell Франк Кох (БЕРН)  Разработчик и пропагандист платформы. На русском языке в формате pdf и doc

Всего записей: 340 | Зарегистр. 25-11-2004 | Отправлено: 07:13 23-03-2006 | Исправлено: KapralBel, 09:31 29-01-2018
HumpSoft



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
$sss=Select-String "http://www.luxorfilm.ru/upload/movies/" film.html  
$sss -match "(http://www.luxorfilm.ru/upload/movies/\d{1,}/\w{1,}.\w{1,})"
$pic_url=$matches[0]

Всего записей: 516 | Зарегистр. 17-03-2006 | Отправлено: 13:58 24-03-2014
HumpSoft



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
aftertime
$pic_url=[regex]::Matches((Select-String "http://www.luxorfilm.ru/upload/movies/" film.html), '(http://www.luxorfilm.ru/upload/movies/\d{1,}/\w{1,}.\w{1,})')-join""

Всего записей: 516 | Зарегистр. 17-03-2006 | Отправлено: 16:06 24-03-2014
aftertime



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
спасибо, все работает. уже помогли разобраться. вот рабочий скрипт

Код:
 
param($url,$folder = "C:\films")
 
Add-Type -AssemblyName system.drawing
 
# Создадим папку
$dir = [regex]::match($url,"/(\d{4})/").Groups[1].ToString()
$path = Join-Path $folder $dir
$savefile = Join-Path $path poster.png
$saveyou = Join-Path $path trailer.flv
 
if(!(Test-Path $path)) {
    md $path | out-null
}
 
# Получим ссылку на картинку
$iw = Invoke-WebRequest $url
$image = Invoke-WebRequest ($iw.Links | Where href -match "/$dir/.*\.jpg").href
 
# Сохраним картинку в png
$m = New-Object IO.MemoryStream(,([byte[]]$image.content))
$st = [drawing.image]::FromStream($m)
$st.Save($saveFile, "png")
 
# Получим ссылку на youtube
$you = $iw.ParsedHtml.getElementsByName("ctl00_contentPlaceHolder_youtubeTrailerDiv") |
    Where innerHTML -match "www.youtube.com/embed" | Foreach {if($_.innerHTML -match 'src="//(.+)" frameBorder') {$matches[1]}}
 
youtube-dl.exe -o $saveyou $you
 

Всего записей: 960 | Зарегистр. 26-11-2006 | Отправлено: 18:27 24-03-2014
HumpSoft



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
$image = Invoke-WebRequest ($iw.Links | Where href -match "/$dir/.*\.jpg").href
 
 
это если все картинки там в жипегах

Всего записей: 516 | Зарегистр. 17-03-2006 | Отправлено: 09:44 26-03-2014
aftertime



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
HumpSoft
нужна только одна и она - жпег

Всего записей: 960 | Зарегистр. 26-11-2006 | Отправлено: 18:22 27-03-2014
PREVED



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, знатоки PS.
 
Подскажите пожалуйста, нужен скрипт, который бы делал следующее:
 
1. Получить значение Handle для текущего АКТИВНОГО окна. Ну или, как вариант, получить в качестве параметра готовое значение Handle нужного окна из другой программы (в виде параметра командной строки) - у меня есть утилитка которая может считать handle окна и записать его в параметр.  
 
2. Найти PID (Process ID) запущенного процесса, которому принадлежит ОКНО с этим Handle.
 
3. Вернуть значение PID -  лучше всего записать его в виде ключа в реестр (на худой конец - в текстовый файл).
 
Весь смысл в том, чтобы найти PID процесса по hadle-у окна, которое принадлежит этому процессу.
 
Подскажите хотя бы в какую сторону копать. И вообще, возможно ли такое реализовать с помощью PS. Заранее спасибо.

Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 17:38 15-04-2014 | Исправлено: PREVED, 17:41 15-04-2014
Frank Fox



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.  
 
Есть много файлов. Каждый файл - множество абзацев, разделенных двумя пустыми строками (кроме первого абзаца, в начале файла пустых строк нет). Пустых строчек может быть и пять.  
 
Нужно выбрать абзацы, в которые входит одно какое-то конкретное слово. Оно может быть в любом месте абзаца (в конце, в начале, в середине). И сложить эти абзацы в файлы размером где-то по мегабайту. Абзацы надо разделить пустой строкой.  

Всего записей: 18 | Зарегистр. 13-08-2007 | Отправлено: 22:48 01-05-2014
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frank Fox
Посмотри тут https://xaegr.wordpress.com/2009/12/28/regexp-7-select-string/
Сорри за краткость, пишу с тел.

----------
Ой не TCP моё IP (C) Диман

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 11:58 02-05-2014
ArieBarboi

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Подскажите пожалуйста почему этот скрипт сохраняет пустой файл:
 
PS C:\temp\pwshl> get-service |convertto-html| foreach {if ($_.status -eq "running") {write-host $_.name $_.status -backgroundcolor white -foregroundcolor black} else {write-host $_.name $_.status -backgroundcolor black -foregroundcolor white}} > 1.html
 
А этот нормально отрабатывает:  
 
Get-Service | ConvertTo-Html -Property name,status | Foreach {
If ($_ -Like "*<td>Running</td>*") {$_ -Replace "<tr>", "<tr
bgcolor=green>"}
else {$_ -Replace "<tr>", "<tr bgcolor=red>"}} > .\get-service.html
 
В чем разница? Как сделать чтоб первый сохранил? поясните пожалуйста.
 
 Заранее спасибо

Всего записей: 3 | Зарегистр. 03-06-2014 | Отправлено: 10:01 03-06-2014
ArieBarboi

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Получается в первом случае условие просто для текста, а во втором уже для конвертированной веб страницы? я прав?

Всего записей: 3 | Зарегистр. 03-06-2014 | Отправлено: 11:31 04-06-2014
ArieBarboi

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос не заслуживает внимания?) отправили бы хоть куда то тогда меня повышать компетенцию....

Всего записей: 3 | Зарегистр. 03-06-2014 | Отправлено: 08:01 30-06-2014
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArieBarboi

Цитата:
почему этот скрипт сохраняет пустой файл

а вы посмотрели, какой вывод после каждого конвейера?
Я так понимаю, что после  |convertto-html уже нельзя получить $_.status от get-service, так как он, уже отдал всё на конвертацию в html.
Почувствуйте разницу.

Код:
Get-Service | Get-Member -MemberType Property
ConvertTo-Html | Get-Member -MemberType Property

Уберите  |convertto-html и вывод в консоль проходит цветной.
 

Цитата:
 Как сделать чтоб первый сохранил?

Делать конвертацию самому.

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 10:44 30-06-2014 | Исправлено: Tilks, 15:22 30-06-2014
Xanth

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день! Есть вопрос по PowerShell
Хочу сделать пару вещей.
На входе в скрипт имеем:
Файлик 1.txt в формате "IP HOSTNAME". Скрипт в цикле переберает IP из другого списка. Требуеться:
В файле "1.txt" найти соответствие IP адреса с проверяемым и закинуть в переменную Hostname из этого эе файла. Формат файла для примера

Код:
 
127.0.0.1,LocalHost
8.8.8.8,Google1
8.8.4.4,Google2
 

Не могу пока понять как реализовать поиск и выдрать вторую запись из файла (которая через запятую)

Всего записей: 69 | Зарегистр. 19-02-2006 | Отправлено: 23:39 03-07-2014
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xanth
Содержимое 1.txt поместить в массив. Это можно и через get-content сделать,затем разобрать в массив, а можно через import-csv. Далее, используя методы массива найти индекс нужного элемента. Зная индекс, в переменную Hostname поместить элемент массива

Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 06:10 04-07-2014
sundraw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте! Как с помощью Powershell можно реализовать аналог команды пакетного файла
@echo off
for /L %%i in (1,1,10) do (
commands....
)
Нужно для создания и запуска виртуальных машин в Hyper-V.

Всего записей: 844 | Зарегистр. 15-05-2011 | Отправлено: 09:00 06-09-2014
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sundraw
Ну, например, так

Код:
$i = 1
while ($i -le 11)
do
{
command
$i++
}
 

Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 22:06 06-09-2014 | Исправлено: angeltwo, 08:13 08-09-2014
sundraw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
angeltwo, спасибо!
Только сегодня начал осваивать PS. Получилось вот что после запуска, начинал с 3-й машины
 

Код:
PS C:\Windows\system32> $i = 3
while ($i‹11)
do
{
New-VM -Name "$i" -VHDPath K:\$i\$i.vhdx -BootDevice IDE -Generation 1 -MemoryStartupBytes 220MB -SwitchName "Intel 82579v"
Set-VMMemory -VMName $i -DynamicMemoryEnabled $True -MaximumBytes 220MB -MinimumBytes 80MB -StartupBytes 220MB
$i++
}  
строка:2 знак:10
+ while ($i‹11)
+          ~~~
Непредвиденная лексема "‹11" в выражении или операторе.
строка:2 знак:10
+ while ($i‹11)
+          ~
Отсутствует закрывающий знак ")" после выражения в операторе "while".
строка:2 знак:13
+ while ($i‹11)
+             ~
Непредвиденная лексема ")" в выражении или операторе.
строка:8 знак:2
+ }
+  ~
Отсутствует ключевое слово while или until в цикле do.
    + CategoryInfo          : ParserError: ( [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken  

Копировал и запускал из консоли PS. Может что-то я напутал с переменными.

Всего записей: 844 | Зарегистр. 15-05-2011 | Отправлено: 22:58 06-09-2014 | Исправлено: sundraw, 23:05 06-09-2014
sundraw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А сейчас то же самое выдаёт немного по-другому

Код:
 
PS C:\Windows\system32> $i = 3
while ($i<11)
do  
{
New-VM -Name "$i" -VHDPath K:\$i\$i.vhdx -BootDevice IDE -Generation 1 -MemoryStartupBytes 220MB -SwitchName "Intel 82579v"
Set-VMMemory -VMName "$i" -DynamicMemoryEnabled $True -MaximumBytes 220MB -MinimumBytes 80MB -StartupBytes 220MB
$i++
}  
строка:2 знак:10
+ while ($i<11)
+          ~
Оператор "<" зарезервирован для использования в будущем.
строка:2 знак:14
+ while ($i<11)
+              ~
Отсутствует тело оператора в цикле while.
строка:8 знак:2
+ }
+  ~
Отсутствует ключевое слово while или until в цикле do.
    + CategoryInfo          : ParserError: ( [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

 
Добавлено:
Всё, проблему решил с помощью справочника
Составил следующий цикл, работает нормально:

Код:
 
for ($i = 1; $i -le 10; $i++) {
New-VM -Name "$i" -VHDPath K:\$i\$i.vhdx -BootDevice IDE -Generation 1 -MemoryStartupBytes 220MB -SwitchName "Intel 82579v"
Set-VMMemory -VMName "$i" -DynamicMemoryEnabled $True -MaximumBytes 220MB -MinimumBytes 80MB -StartupBytes 220MB
}
 

Всего записей: 844 | Зарегистр. 15-05-2011 | Отправлено: 12:38 07-09-2014
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sundraw
Прошу прощения, ошибся я. Вместо знака меньше  "<" надо было "-le" использовать

Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 08:12 08-09-2014
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, есть вопрос. К примеру если ввести "Get-Process" в консоли posh, то получим нечто такое:
 
PS C:\Users\user> Get-Process
 
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     75       8     1204       3960    42     0,02   1544 armsvc
   2895     450   247260      99248   694    30,89   1576 avp
    483      49    79856       4012   365     3,54   2984 avpui
     32       5     1148       3124    29     0,00   1928 conhost
     46       6     1680       4852    63     0,03   2992 conhost
и т.д.
 
можно ли как то именно этот вывод передать в переменную, а не просто получить массив из всех процессов?

----------
Ой не TCP моё IP (C) Диман

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 20:24 09-09-2014
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell
KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru