Перейти из форума на сайт.Реклама на Ru.Board


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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

Uriu

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 PowerShell 1.0 На текущий момент совершенно неактуальная версия, интересная только для истории.
Ссылки
 
PowerShell 2.0 и WinRM 2.0 (Последняя версия, работающая на Windows XP и Windows 2003) (Ещё)
Прямые ссылки:
* Windows XP и Windows Embedded x86 ENG
* Windows XP и Windows Embedded x86 RUS
* Windows 2003 Server x86 ENG
* Windows 2003 Server x86 RUS
* Windows 2003 Server x64 ENG
* Windows 2003 Server x64 RUS
 
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, аналогично выполнению .bat/.cmd-файлов
нужно в командной строке набрать следующую команду  
ftype microsoft.powershellscript.1=%windir%\system32\windowspowershell\v1.0\powershell.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 | Исправлено: KLASS, 16:48 30-08-2017
Tilks

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

Всего записей: 1916 | Зарегистр. 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.: или как вариант раскидывать по отдельным файлам

Всего записей: 616 | Зарегистр. 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

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

Всего записей: 616 | Зарегистр. 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, там кажется можно выставить кол-во "долбёжек" и запуск своей программы/скрипта

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

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

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

Всего записей: 252 | Зарегистр. 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}
}}  
 

Всего записей: 252 | Зарегистр. 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
}
 

Всего записей: 539 | Зарегистр. 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
т.е. открываю его , печатаю, но ничего не отображается , как будто он клавиатуру не слушается

Всего записей: 1170 | Зарегистр. 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

Всего записей: 10944 | Зарегистр. 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

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru