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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oldster
Не совсем понятно, что вы хотите получить.
 $str = Get-process | Out-String
 $str.gettype() // String
 $str
 
 [Diagnostics.Process[]]$zz = Get-Process
 $zz.gettype() // Process[]
 $zz[0]

Всего записей: 2088 | Зарегистр. 14-08-2005 | Отправлено: 22:17 09-09-2014
Oldster



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

Цитата:
$str = Get-process | Out-String

Спасибо, это то, что надо, как то я ступил

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

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да вам и этого будет достаточно ))
$str = Get-process

Всего записей: 1 | Зарегистр. 24-01-2006 | Отправлено: 11:47 10-09-2014
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BlackSwan
нет, к сожалению, результат будет разный между
$str = Get-process
и  
$str = Get-process | Out-String


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

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



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, еще вопрос.
Делаю так:

Код:
 
...
$session = New-PSSession -ComputerName srv1,srv2,srv3 -Credential $cred -ErrorVariable err
...
$out = Invoke-Command -Session $session -FilePath c:\my_script.ps1 -ErrorVariable err
...
Write-Host $out
...
 

в файле c:\my_script.ps1 скритп:

Код:
 
Get-Process
 

 
В результате часто получается "каша", где перемешиваются строки вывода местами, для примера:
...
   1416      14     4140       1664    49   690,38    344 csrss      srv1
     74       9     2232        140    37     1,03    388 csrss      srv3
    319      11     2676        468   113   378,19 223116 csrss      srv3
   1416      14     4140       1664    49   690,38    344 csrss      srv3
     74       9     2232        140    37     1,03    388 csrss      srv2
    319      11     2676        468   113   378,19 223116 csrss      srv2
...
 
можно сделать так:

Код:
 
$out = $out | sort {$_.PSComputerName}
 

и вывод "красивее" становится, НО если изменить c:\my_script.ps1 к примеру так (не говоря о более сложных скриптах):

Код:
 
Get-Service
Get-Process
 

то все опять превращается в "кашу". В помощи сказано это:

Цитата:
При выполнении команд на нескольких компьютерах Windows PowerShell подключается к компьютерам в том порядке, в котором они указаны в списке. Результаты выполнения команд отображаются в порядке поступления результатов от удаленных компьютеров, который может отличаться от порядка выполнения команд.

Да фиг с ним, пусть отличается, но хотя бы пусть не перемешивает результат между серверами.  
Понимаю, что можно по одному серверу опрашивать и все хорошо будет (при этом не надо использовать сортировку по PSComputerName!!!), но по одному - не вариант, т.к. у меня много серверов и не по феншую это...
Вопрос - это решается как то?

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 22:37 10-09-2014
Collapse Troll

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

Цитата:
Вопрос - это решается как то?

а задержку просто вставить?
 
upd.: или как вариант раскидывать по отдельным файлам

Всего записей: 633 | Зарегистр. 05-08-2006 | Отправлено: 11:20 05-12-2014 | Исправлено: Collapse Troll, 11:28 05-12-2014
Oldster



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

Цитата:
а задержку просто вставить?

это как и куда ее поставить?

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 17:04 05-12-2014
Collapse Troll

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
а вы что именно хотите сделать? что хотите в итоге получить
 
Добавлено:
Если например получить процессы с компьютеров, то я бы добавил logon-скрипт в AD, например такой

Код:
get-process >\\server\in-out\$env:computername.txt

 
После рестартов у вас в шаре будут фалы с результатами. Эти файлы можно при желании собрать в один
 

Код:
Get-Content \\server\in-out\*.txt | Out-File \\server\in-out\combined.txt

 
Правда понадобится как-то добавить туда ещё имя компьютера, вобщем всё зависит от того что конкретно в вашем случае нужно

Всего записей: 633 | Зарегистр. 05-08-2006 | Отправлено: 19:19 06-12-2014
Oldster



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

Цитата:
а вы что именно хотите сделать? что хотите в итоге получить

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

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Подскажите как выполнить такую задачу:
Проверять каждые 10 минут определенные устройства в сети( по ip) - если ping от 2 и более  не приходит то делать рестарт службы.
Я понимаю что надо использовать команды Test-Connection и Restart-Service, но как их привязать пока не хватает мозгов.

Всего записей: 33 | Зарегистр. 05-12-2011 | Отправлено: 02:29 20-12-2014
Collapse Troll

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

Цитата:
Проверять каждые 10 минут определенные устройства в сети( по ip) - если ping от 2 и более  не приходит то делать рестарт службы.  

Если для работы - то можно использовать программу FriendlyPinger, там кажется можно выставить кол-во "долбёжек" и запуск своей программы/скрипта

Всего записей: 633 | Зарегистр. 05-08-2006 | Отправлено: 21:26 22-12-2014
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vat21
Если пинга нет, то как тогда собираетесь делать рестарт службы? Или это рестарт какой-то службы на том компьютере, откуда пингуете?
 
В случае второго варианта это делается так

Код:
 
if (Test-Connection "127.0.0.1") {Restart-Service "W32Time"}
 

Всего записей: 253 | Зарегистр. 09-05-2007 | Отправлено: 07:10 23-12-2014 | Исправлено: angeltwo, 07:26 23-12-2014
vat21

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

Цитата:
Если для работы - то можно использовать программу FriendlyPinger, там кажется можно выставить кол-во "долбёжек" и запуск своей программы/скрипта

 
Хотелось бы средствами Windows
 
angeltwo
 

Цитата:
В случае второго варианта это делается так  
 
Код:
 
if (Test-Connection "127.0.0.1") {Restart-Service "W32Time"}  
 

это я и имел ввиду... А как указать условие если пинга нет от 2 и более устройств....
 
При проверке этого кода получается обратное - если пинг есть служба перезапускается...

Всего записей: 33 | Зарегистр. 05-12-2011 | Отправлено: 09:07 23-12-2014 | Исправлено: vat21, 09:55 23-12-2014
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vat21
так? в массив $arr список пингуемых компов надо поместить

Код:
 
cls
$arr = @("127.0.0.1", "127.0.0.0", "169.255.254.255", "169.254.254.255")
$n = 0
$arr | %{if (!(Test-Connection $_)) {$n++
    if ($n -ge 2) {Restart-Service "W32Time";break}
}}  
 

Всего записей: 253 | Зарегистр. 09-05-2007 | Отправлено: 10:38 23-12-2014
lavren



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

Код:
 
$Devices = @('Comp1','Comp2','Comp3','Comp4','Comp5')
function TestDev {
    $ret = 0;
    foreach ($D in $Devices){
        if (!(Test-Connection $D -ErrorAction Ignore)){
            $ret++
        }
    }
    $ret
}
while($true){
    if ((TestDev) -ge 2){
        #Restart-Service "W32Time"
    }
    Start-Sleep -Seconds 600
}
 

Всего записей: 540 | Зарегистр. 29-05-2007 | Отправлено: 11:06 23-12-2014
vat21

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

Цитата:
cls  
$arr = @("127.0.0.1", "127.0.0.0", "169.255.254.255", "169.254.254.255")  
$n = 0  
$arr | %{if (!(Test-Connection $_)) {$n++  
    if ($n -ge 2) {Restart-Service "W32Time";break}  
}}  

Спасибо, все на 100%.

Всего записей: 33 | Зарегистр. 05-12-2011 | Отправлено: 11:56 23-12-2014
Futurism

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

Всего записей: 1176 | Зарегистр. 04-02-2011 | Отправлено: 21:59 08-02-2015
Sje

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго дня!
 
Коллеги, нужна помощь в скриптовании powershell.
Из powershell выгружен список пользователей без логинов более 60ти дней, список подкорректирован, теперь требуется заблокировать пользователей из списка.  
 
$list = Import-CSV c:\3.csv
forEach ($item in $list) {$samAccountName = $item.samAccountName Disable-ADAccount -Identity $samAccountName}
 
на что получаю
 
Неверная числовая константа: 1..
строка:1 знак:3
+ 1. <<<< ps1
    + CategoryInfo          : ParserError: (1.:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : BadNumericConstant
 
Подскажите, что я делаю не так?

Всего записей: 57 | Зарегистр. 28-12-2007 | Отправлено: 13:19 24-04-2015
KapralBel



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

Цитата:
Подскажите, что я делаю не так?

Неправильно запускаете
 
Нужно не powershell 1.ps1
а powershell .\1.ps1

Всего записей: 11298 | Зарегистр. 16-02-2005 | Отправлено: 13:23 24-04-2015
num1984

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее... [/more]

Всего записей: 1 | Зарегистр. 31-05-2015 | Отправлено: 13:55 31-05-2015 | Исправлено: num1984, 14:00 31-05-2015
   

Страницы: 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.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru