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

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



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

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:24 31-10-2013
chand1er

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

Всего записей: 4 | Зарегистр. 13-12-2013 | Отправлено: 12:46 13-12-2013 | Исправлено: chand1er, 13:20 13-12-2013
angeltwo

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

Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 02:47 14-12-2013 | Исправлено: angeltwo, 02:55 14-12-2013
chand1er

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
angeltwo - спасибо за ответ и помощь!
 
тег [more] - это тут на форуме скрыло большое сообщение
 
Дело в том, что в моем случае датасет берется из обращения к 'C:\RAID\rstcli64.exe -I -d 0-0-0-0'
И пока неясно как выдернуть параметр "State" из раздела "Volume Information"
Я пробую совместить ваш вариант и свой, но пока что-то не вытанцовывается.

Всего записей: 4 | Зарегистр. 13-12-2013 | Отправлено: 10:32 16-12-2013 | Исправлено: chand1er, 10:36 16-12-2013
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
PS 4.0 http://www.microsoft.com/ru-ru/download/details.aspx?id=40855

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:47 16-12-2013
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chand1er
У меня такой утилиты нет, но попробую на другом примере пояснить.
Вывод команды получаем например так $a = ping -n 1 127.0.0.0
 
В Вашем случае вероятно это будет
$str = C:\RAID\rstcli64.exe -I -d 0-0-0-0
И тут надо смотреть, что получается в этой переменной. Если датасет такой, как Вы и приводили в примере, то так и берется значение, как я в конце привел (только я там для Num Disks писал):
$hshIniContents["more"]["State"]
 
Только параметр -d 0-0-0-0 в Вашей команде я так понимаю по Id фильтрует, мож без него попробовать. Вобщем. покажите. что получается в переменной $str = C:\RAID\rstcli64.exe -I -d 0-0-0-0
 
Добавлено:
Если тега [more] вообще нет в датасете, то просто не используйте его. Значение тогда должно получаться так $hshIniContents["State"]

Код:
 
$str = '--VOLUME INFORMATION--
Num Disks:         2
State:             Normal
--END DEVICE INFORMATION--
 
ID:                0-0-0-0
State:             Normal
Model:             WDC WD5003ABYX-01WERA0
 
ID:                0-1-0-0
State:             Normal
Model:             WDC WD5003ABYX-01WERA0'
 
$hshIniContents = @{}
$str -split "\n" | %{
    switch -regex ($_) {
        "ID:[^\d]*((\d*-?){4}).*" {$strID = $Matches[1]; if ($strID) {$hshIniContents[$strID] = @{}};break}
        "(.*):\s*([^\r\n]*)" {$strKey = $Matches[1];$strValue = $Matches[2]; if ($strKey -and $strID){$hshIniContents[$strID][$strKey] = $strValue}
            else {$hshIniContents[$strKey] = $strValue}}
    }
}
 
$hshIniContents["0-1-0-0"]["State"]  #значение State для опредленного ID  
$hshIniContents["Num Disks"]          #значение из --VOLUME INFORMATION--
$hshIniContents["State"]                  #значение из --VOLUME INFORMATION--
 

Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 20:54 16-12-2013 | Исправлено: angeltwo, 07:34 17-12-2013
chand1er

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

Всего записей: 4 | Зарегистр. 13-12-2013 | Отправлено: 08:42 17-12-2013 | Исправлено: chand1er, 09:29 17-12-2013
angeltwo

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

Цитата:
Если выполнить ваш оригинальный скрипт из powershell ise, то результат
Подробнее...  
 

такой результат появляется при повторных запусках этого скрипта в одном окружении powershel ise. При первом запуске ошибок нет. Дело в том, что я не делал явную инициализацию переменных, поэтому в них оставались значения от предыдущего выполнения, что приводило к неправильной проверки условия в if. Решается легко, нужно добавить

Код:
 
$strID = $null
$strKey = $null
$strValue = $null
перед строкой:  
$str -split "\n" | %{
 

В командной строке powershell.exe Вы запускали этот код как файл, поэтому все переменные после завершения скрипта уничтожались и повторные запуски к ошибке не приводили.
 
Далее:

Цитата:
 

Код:
 
$str = C:\Raid\rstcli64.exe -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
 

 

Тут у Вас выполняется команда и ее вывод уходит сразу в файл. Переменная остается пустая, поэтому дальше ошибки выполнения. Здесь все просто, если уж так хочется в файл вывести, то нужны скобки:

Код:
 
($str =  C:\Raid\rstcli64.exe -I -d 0-0-0-0) > C:\Raid\pdisk0.txt
 

 
В последнем сообщении я вижу другой вывод, не содержащий общей информации, поэтому конкретно по этому выводу обращение к значению State будет таким:

Код:
 
$hshIniContents["0-0-0-0"]["State"]
 

 
Насчет

Цитата:
 
То есть единицу он возвращает как состояние, но при этом еще приписывает 0, насколько я понял - из-за неправильного оформления
 

Что-то смутно похоже, что вместо параметра 0-0-0-0 вычисляется это выражение и 0 как результат показывается перед 1. Попробуйте взять в кавычки значение  "0-0-0-0"

Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 23:04 17-12-2013 | Исправлено: angeltwo, 23:18 17-12-2013
MAVrADMIN



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, подскажите плз по управлению ролью RDS в Windows 2012
Установлена и настроена роль "Remote Desktop Services", активирован режим "High Availability Mode"
Требуется скрипт для смены активного брокера подключений.
 
Нашел такое...

Код:
import-module RemoteDesktop
$RDS_ACB = Get-RDConnectionBrokerHighAvailability

Могу получить имя активного брокера:

Код:
$RDS_ACB.ActiveManagementServer

и список всех брокеров:

Код:
$RDS_ACB.ConnectionBroker

 
Но вот как осуществить смену - никак ума не приложу. Кто в теме? Какие есть мысли?

Всего записей: 194 | Зарегистр. 18-05-2006 | Отправлено: 12:55 23-01-2014
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MAVrADMIN
Нет 2012 сервера, к сожалению.
Но начать надо с команды Get-Member, если гугл по Вашему вопросу ничего не выдает.
$RDS_ACB | gm  - что выдает.
Но, эта переменная получена командой Get, а значит, все свойства в ней могут быть только для чтения. Значит нужно посмотреть. есть ли команда Set-RDConnectionBrokerHighAvailability ?
 
И гугл выдает нам пару ссылок
Set-RDConnectionBrokerHighAvailability
Configure Remote Desktop Connection Broker in Windоws Server 2012 with SQL Server 2012 High Availability
 
Может это как-то поможет Вам.

Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 21:44 23-01-2014 | Исправлено: angeltwo, 21:47 23-01-2014
MAVrADMIN



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет, через Get-RDConnectionBrokerHighAvailability точно ничего не установить... это просмотр
Set-RDConnectionBrokerHighAvailability - там тоже ничего не установить... это создание HA-кластера(равно как и ваша вторая ссылка).
 
Моя задача - управлять уже созданным HA-брокером, а именно - переключать его активную ноду.
Можно конечно просто ребутнуть сервак... тогда по аларму все переключится... но хотелось бы сначала переключить, а уж затем ребутать.
 
На всякий случай приведу запрошенный Get-Member:
Get-RDConnectionBrokerHighAvailability | Get-Member

Всего записей: 194 | Зарегистр. 18-05-2006 | Отправлено: 16:32 24-01-2014
aChikatillo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день! Есть PowerShell-скрипт по резервному копированию Hyper-v, Windows server 2008 R2,при выполнение скрипта появляется ошибка :
Исключение при вызове "Add" с "2" аргументами: "Ключ не может быть неопределенным.
Имя параметра: key"  
C:\HVBACKUP\VM_Backup.ps1:148 знак:20
+         $VMList.add <<<< ($VM.ElementName, $State)
 
Вот сам скрипт:
Код скрипта
 
Подскажите в чем может быть проблема ?Скрипт нарыл в одном из журналов"Системного Администратора"..

Всего записей: 245 | Зарегистр. 18-10-2007 | Отправлено: 12:44 29-01-2014
ia medved



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день коллеги.
Первый раз сел за PS
С программированием очень туго.
Нужно или из вывода команды или если слить вывод в текстовый файл выбрать указанные символы в указанной строке. Подскажите как это сделать?
 
Пример: вывод команды  

Код:
E:\>defrag c: /A /u
Оптимизация диска (Майкрософт)
(c) Корпорация Майкрософт (Microsoft Corporation), 2013.
Вызов анализ на (C...
        Анализ:  выполнено на 100%.
Операция успешно завершена.
Post Defragmentation Report:
        Сведения о томе:
                Размер тома                 = 161,69 ГБ
                Свободное место                  = 114,36 ГБ
                Общий объем фрагментированного пространства      = 0%
                Максимальный размер свободного места     = 56,82 ГБ
        Примечание. В статистику фрагментации не включаются фрагменты файлов, ра
змер которых превышает 64 МБ.
        Дефрагментация этого тома не требуется.

 
Выбирать из строки "общий объем фрагментированного пространства" значение процентов.

Всего записей: 18 | Зарегистр. 29-01-2008 | Отправлено: 17:04 14-03-2014 | Исправлено: ia medved, 17:04 14-03-2014
gmax007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста как проверить статус службы и запустить ее если остановлена, не знаю какие типы данных выдают команды и как все это дело обработать в условии
Какое значение в выводе команды get-service name | where {$_.status -eq 'stopped'}, если служба name запущена, null или пустая строка. Как условие написать, если вывод команды засунуть в переменную

Всего записей: 104 | Зарегистр. 21-10-2010 | Отправлено: 15:05 18-03-2014
KapralBel



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

Цитата:
Как условие написать, если вывод команды засунуть в переменную


Код:
$a=(get-service <name> | where {$_.status -eq 'stopped'}).Service

 

Цитата:
Подскажите пожалуйста как проверить статус службы и запустить ее если остановлена, не знаю какие типы данных выдают команды и как все это дело обработать в условии  


Код:
 
$Service=Get-Service Alerter
If ($Service.Status='Stopped') { $Service.Start()}
 


Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:31 18-03-2014
gmax007



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, тут же объектно все а я про null и пустые строки думаю , стало понятней

Всего записей: 104 | Зарегистр. 21-10-2010 | Отправлено: 16:36 18-03-2014 | Исправлено: gmax007, 16:38 18-03-2014
KapralBel



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

Код:
Get-Service Alerter | Start-Service

Срабатывает всегда (запущена служба или нет)
Метод .Start() отрабатывает без ошибок только если служба остановлена

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:32 18-03-2014
aftertime



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет! Передо мной стоит следующая задача - имея ссылку на страничку в интернете проанализировать ее содержимое, скачать и сконвертировать в другой формат одну картинку (имя каждый раз разное, но есть характерные приметы), а так же скачать трейлер с ютуба. Картинку и клип положить в созданную папку. Исходная ссылка всегда имеет вид: http://www.luxorfilm.ru/film/хххх/названиефильма/ Где хххх - четыре цифры. Именно их нужно использовать в качестве имени для папки.  
 
1 скрипт принимает ссылку как аргумент и создает папку из части этой ссылки. Каждый раз ссылка содержит четыре цифры, их и нужно взять в качестве имени
2 скачивает html файл по ссылке
3 читает содержимое файла и выцепляет две ссылки:
- одна на картинку
- одна на ролик на ютубе
4 конвертирует каринку в нужный формат
5 скачивает видео с ютуба
6 складывает результаты шагов 4 и 5 в папку, созданную на шаге 1
 
Пока не получилось выдернуть необходимые куски текста из ссылки для создания директории и из файла для скачивания картинки и ролика.
 
Что получилось:  
1 скачать файл, получить из него части текста содержащие нужные значения
2 сконвертировать файл в нужный формат
3 скачать клип с ютуба
 
Под катом результат моих трудов
 
скачиваем файл и ищем строки
 
скачиваем и конвертируем картинку
 
скачиваем трейлер (используется youtube-dl. пока не переписал на PS)

Всего записей: 960 | Зарегистр. 26-11-2006 | Отправлено: 22:01 20-03-2014 | Исправлено: aftertime, 22:14 20-03-2014
HumpSoft



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

Цитата:
1 скрипт принимает ссылку как аргумент и создает папку из части этой ссылки. Каждый раз ссылка содержит четыре цифры, их и нужно взять в качестве имени  

$p=('http://www.luxorfilm.ru/film/2161/Rio-2/' -split '/')[4]
 
сойдет ?

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



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

Цитата:
сойдет ?

даже очень. теперь конструкция выглядит так:

Код:
$source = "$args[0]#.Length"
$dir = ("$args[0]#.Length" -split '/')[4]  
New-Item -ItemType Directory $dir

осталось распарсить ссылки на постер и трейлер. был бы очень благодарен за помощь.

Всего записей: 960 | Зарегистр. 26-11-2006 | Отправлено: 10:08 24-03-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