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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
turboon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как можно ускорить перебор событий командлетом Get-Eventlog?
Использую в системе мониторинга, и желателен отклик от скрипта в течении хотя бы 15 секунд.
Ну, или хотя бы быстро определить, что событий от заданного источника в журнале нет.
Такое ощущение, что в таком случае PS перебирает все события, что занимает очень много времени.

Всего записей: 22 | Зарегистр. 22-06-2010 | Отправлено: 12:59 27-08-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
turboon
попробуй так, анализируй журнал за последний час (каждый час), и ищи только ошибки или определенный ID.

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 07:55 28-08-2012
OverDope



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток, уважаемые форумчане!
Прошу гуру Power Shell растолковать поведение командлета Get-ChildItem.
 
Делаю: Get-ChildItem "C:\TMP\Test"
 
Получаю:  
Каталог: C:\TMP\Test
 
Mode                LastWriteTime     Length Name                                      
----                -------------     ------ ----                                      
-a---        14.09.2012     16:36       2571 Новый текстовый документ.txt              
 
Все честно, в директории один файл, размером 2,51 КБ (2 571 байт).
Вызываю свойство "Length":
(Get-ChildItem "C:\TMP\Test").Length
 
Получаю:2571
Ок, совпадает
Но все меняется как только в этой директории появляется еще один файл.
Делаю: Get-ChildItem "C:\TMP\Test"
 
Получаю:  
Каталог: C:\TMP\Test
 
Mode                LastWriteTime     Length Name                                      
----                -------------     ------ ----                                      
-a---        14.09.2012     16:36       2571 Новый текстовый документ - копия.txt      
-a---        14.09.2012     16:36       2571 Новый текстовый документ.txt
 
Теперь, по моим ожиданиям, вызвав свойство "Length" я должен получить сумму размеров файлов но ...
Делаю: (Get-ChildItem "C:\TMP\Test").Length
 
Получаю: 2
             
То есть если файл один то свойство "Length" выводит его размер, а если файлов больше одного то получаем общее количество файлов. Понимаю, что это видимо фича, а не баг, но хотелось бы узнать как получить общее количество файлов в папке, и их общий размер.
 
P.S. Да не сочтут многоуважаемые модераторы оффтопом - буду признателен если посоветуете хорошую книгу по Power Shell на русском. Ссылки из шапки темы, к сожалению мертвые.

Всего записей: 44 | Зарегистр. 26-05-2006 | Отправлено: 16:51 14-09-2012
sewell



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OverDope
Ну например так:
Get-ChildItem C:\TMP\Test | Measure-Object -Property Length -Sum
Если надо подсчет с подкаталогами - добавь после пути -recurse.
В поле Count - будет количество файлов, в Sum - размер в байтах.
P.S. Вот Здесь я выложил книгу Коха из шапки...

Всего записей: 833 | Зарегистр. 06-07-2005 | Отправлено: 17:41 14-09-2012 | Исправлено: sewell, 17:48 14-09-2012
OverDope



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста как правильно использовать командлет "Test-Path".
Задача - проверить подключен ли к компьютеру диск.
Делаю:

Код:
$Path = Test-Path "C:\TMP"
if ($Path -eq "True") {
Write-Host "Директория есть"
} else {
Write-Host "Директории нет"
}

 
В ответ получаю:

Код:
Отсутствует оператор "=" после ключа в хеш-литерале.
C:\TMP\ExchArh.ps1:10 знак:5
+ if ( <<<< $Path -eq "True") {
    + CategoryInfo          : ParserError: ( [], ParentContainsErrorRecordExce
ption
    + FullyQualifiedErrorId : MissingEqualsInHashLiteral

 
Что я делаю не так ?
Гугл выдает массу примеров скриптов авторы которых используют конструкцию вида:

Код:
if (!($Path -eq "True")
и у них все работает. Пытаюсь использовать это - все равно PowerShell ISE сыплет красным и выдает такую же ошибку.
Вопрос - как правильно использовать командлет Test-Path с условиями "если есть - делаем то-то", "если нет - делаем то-то".
Всем спасибо за ответы.

Всего записей: 44 | Зарегистр. 26-05-2006 | Отправлено: 17:08 21-09-2012 | Исправлено: OverDope, 17:12 21-09-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OverDope
попробуй так:
 
$Path = "C:\TMP"  
if (Test-Path $Path) {  
 Write-Host "Директория есть"  
} else {  
 Write-Host "Директории нет"  
}
 
и еще могу посоветовать вместо PowerShell ISE установить PowerGUI, поудобнее будет.

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 21:19 21-09-2012
TeHNoSaL

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите пожалуйста, есть винд 2008 сервер. нужно из логов безопасности достать все попытки входа с неправильными паролям. в таблице ip, время,логин(порядок не важен) и желательно вывести в файл.Буду признателен за помощь!

Всего записей: 41 | Зарегистр. 08-10-2008 | Отправлено: 01:38 11-10-2012 | Исправлено: TeHNoSaL, 01:39 11-10-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нужно получить температуру процессора, материнки и диска + обороты на всех кулерах (где возможно). пока откопал пару wmi-классов: Win32_TemperatureProbe, Win32_Fan, CIM_TemperatureSensor. Но сделать с ними ничего не смог (получить какие-то значения, свойства). Раздобыл пару скриптов в инете, которые должны выводить значения свойств этих классов, но они ничего не выводят (пустые значения).  
Ещё один скрипт:

Код:
(([int](Get-WmiObject -class "MSAcpi_ThermalZoneTemperature" -Namespace "root\WMI").CurrentTemperature) - 2732) / 10
 
тоже не работает, выводит это:  

Цитата:
Get-WmiObject : Not supported  
C:\_BOOKS\PowerShell\_Датчики\Температура процессора\TempProc_test.ps1:1 знак:2
2
+ (([int](Get-WmiObject <<<<  -class "MSAcpi_ThermalZoneTemperature" -Namespace
 "root\WMI").CurrentTemperature) - 2732) / 10
    + CategoryInfo          : InvalidOperation: ( [Get-WmiObject], Managemen  
   tException
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.C  
   ommands.GetWmiObjectCommand
 
-273,2

 
Я в powershell новичок, и ещё не разобрался толком с wmi-объектами (может быть не знаю каких-то возможностей PS), но скрипт надо сделать срочно.
 
Знаком с ООП на примере С++, средне знаю саму  сишку; пытаюсь выехать на пауэр с некими знаниями Си

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 12:07 11-10-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
выяснил, что с помощью WMI это осуществить нельзя. Может, тогда кто-то знает, как ещё можно получить информацию с термодатчиков, а также обороты кулеров?

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 14:51 12-10-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeHNoSaL
чуть выше я давал ссылку, если этого мало то вот еще, но это под 2003 сервер. под 2008 думаю можно легко переделать
 
 
Добавлено:
Lich130387
полгода назад разбирался с этим вопросом, но так до конца не решил, есть вариант - speedfan + плагин  к нему был (сейчас не вспомню) но плагин старый и не работает с x64 (вроде так). по другому я решения не нашел.

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 21:26 12-10-2012
TeHNoSaL

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я видел эту статью, по ней и делал, но на 2008 некоторые команды не так отрабатывают, ищу в чем же ошибка, Спасибо!

Всего записей: 41 | Зарегистр. 08-10-2008 | Отправлено: 22:36 12-10-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeHNoSaL
там вроде id другие + парсинг надо сделать, не так сложно должно получится.... сам давно хочу сделать это, но поступил проще - отрубил фаерволом доступ на сервера по RDP и проблема отпала. А то раньше ломились все кому не лень и пароли подбирали на внешние сервера, а сейчас ляпота, в логах тишина

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 23:18 12-10-2012
TeHNoSaL

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
поясните пожалуйста эту сроку
нашел отличия в коде для 2003 и 2008, но скрипт доходит до этой строки и прерываеться
 
Добавлено:
мне нужно просто список ip с которых ломились(порт) и не только по рдп. и желательно вывести в файл.
 
Добавлено:
event id 4625 в 2008
 
Добавлено:
что не так в этом коде? таблицу составляет, но значений нет, и цветами окрашивает.
 
param ($key1,$val1,$val2,$val3,$val4,$val5,$val6)  
 
if ($val1 -eq $null) {$val1=0};  
 
$mydate = Get-date -hour 0 -minute 0 -second 0;
 
if ($key1 -eq "year") { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 -month 1); $mydate = $mydate.addyears(-$val1); };  
 
if ($key1 -eq "month") { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1); $mydate = $mydate.addmonths(-$val1); };  
 
if ($key1 -eq "day") { $mydate = $mydate.adddays(-$val1) };
 
if ($key1 -eq "date") { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day $val1 -month $val2 -year $val3); }; # здесь реализуем возможность задания интервала
 
if ($val4 -eq $null) {$Events = Get-EventLog security -message "*Тип входа10*" -after ($mydate) | ?{$_.eventid -eq 4625 }}  
if ($val4 -ne $null) {$Events = Get-EventLog security -message "*Тип входа10*" -after ($mydate) -before (get-date -hour 0 -minute 0 -second 0 -day $val4 -month $val5 -year $val6) | ?{$_.eventid -eq 4625 }}
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Address ($null)
 
$Events | %{
 
$Data.time = $_.TimeGenerated
 
 
$Data.UserName = ($message | ?{$_ -like "Имя учетной записи:*"} | %{$_ -replace "^.+:."} )  
$Data.Address = ($message | ?{$_ -like "Сетевой адрес источника:*"} | %{$_ -replace "^.+:."})  
 
$textcolor = $host.ui.rawui.foregroundcolor
 
$host.ui.rawui.foregroundcolor = "red"
 
if ($data.address -like "192.168.0*") {$host.ui.rawui.foregroundcolor = "DarkGreen"}
if ($data.address -like "10.*") {$host.ui.rawui.foregroundcolor = "yellow"}
 
$data
 
$host.ui.rawui.foregroundcolor = $textcolor
 
}
 
Добавлено:
ошибок нет!

Всего записей: 41 | Зарегистр. 08-10-2008 | Отправлено: 00:01 13-10-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oldster
Что-то пока не могу разобраться со спидфаном. Может подскажешь, что там да как? плиз, постарайся вспомнить, что делал. И что-то я не пойму, какой плагин там надо, что он должен делать, как выглядеть, как работает, как его запускать/устанавливать/подключать...
 
Добавлено:
пробовал разобраться с логами (чтобы из них читать инфу), но не смог: там всё мудрёно.

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 07:21 15-10-2012 | Исправлено: Lich130387, 07:26 15-10-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lich130387
Вот что я нашел у себя в записях:
Готового решения я не нашел.
Варианты решения: Есть "готовое" решение (см. http://www.zabbix.com/forum/archive/index.php/t-13939.html), но он работает только с x86. Смысл его в том, что к SpeedFun-у прикручивается SNMP "плагин" и по нему происходит обмен информации. На сайте автора "плагина" есть исходники, они достаточно маленькие и разобраться с ними можно! В результате мы получим то, что мы хотим. Так же в комплекте с исходниками идут тестовые утилиты для проверки. Кроме того, в инете есть много примеров, для реализации чтения значений из SpeedFun-а (я находил и под C#). Примеры ищется по слову: "SFSharedMemory_ALM".
 
 
Добавлено:
Задача у меня была такая: прикрутить мониторинг температуры к Zabbix.
В принципе - можно сам SpeedFan настроить на отправку почты о превышении температуры. Возможно, что это самое простое будет.

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 10:38 15-10-2012 | Исправлено: Oldster, 10:40 15-10-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oldster
не, мне это надо сделать с помощью ПоверШелл, а не через почту. За инфу спасибо, посмотрю. (упоминание си-шарпа смутило, но пофигу...)

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 13:30 15-10-2012
sewell



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lich130387
Теоретически, любой код с С# можно представить как скрипт POwerShell. Там тоже можно работать с объектами .NET. Только синтаксис немного другой. А там - все реально. Правда у меня не было нужды особой так поступать, ибо в C#  это сделать быстрее, но иногда определенные небольшие решения переносил на PS.
 
P.S. Кстати, Microsoft выпустил программку для поиска всевозможных скриптов PowerShell на спецфорумах и т.п. Здесь можно ее скачать

Всего записей: 833 | Зарегистр. 06-07-2005 | Отправлено: 12:10 16-10-2012 | Исправлено: sewell, 12:13 16-10-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
блин, в PowerShell ISE 3.0 выдаёт какие-то кракозябры, видимо, проблемы с кодировкой. Главное, в обычном PS 3.0 всё выдаётся нормально. В чём проблема, как исправить?

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 07:58 18-10-2012 | Исправлено: Lich130387, 09:08 18-10-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lich130387
1) НИКОГДА не используй название директорий на русском языке!!!
2) сохрани файл (*.ps1) в кодировки 866 и запусти

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 09:54 18-10-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oldster
1.понятно.
2.как это сделать? (желательно пошагово)
 
Добавлено:
исправил русские названия на английские - не помогло =(

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 10:08 18-10-2012
   

Страницы: 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