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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 | Отправлено: 08:08 28-09-2010
BVV63



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

Цитата:
Попробуй подписать

Долго, лениво. Нужно вначале обучиться это делать. Рано или поздно, наверное, всё же займусь. А пока можно просто в двух словах, что с текстовым файлом происходит?

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 08:27 28-09-2010
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В последний раз баловался сразу года 2 назад
 
В конце файла появляется большая куча символов - и если изменяешь хоть 1 бит - то подпись становится недействительной
а в самой подписи указано кто подписывал

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 09:37 28-09-2010
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Относительно цифровых подписей на ftp VeriSign валялся огромный мануал, сейчас это дело можно достать лишь на трекерах. И еще минус данного дока (хотя кому как), что он полностью на аглицком.
P.S. Относительно подделок цифровых подписей можно почитать у lambda-team.

Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 14:58 28-09-2010
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ещё раз вернусь к вопросу, который я здесь задавал, но не получил ответа. И в литературе ничего путнего не нашёл ...
Как в PowerShell создать следующую модель: родительский сценарий запускает дочерние, те, отработав, возвращают управление и результаты (включая вновь определённые переменные, которые будут использоваться как в родительском, так и в других дочерних сценаиях); родительский сценарий также задаёт ряд переменных и пр., которые используются в дочерних.
Вроде как всё должно просто осуществляться (коли уж в батанике это всё элементарно реализуется), но, что-то никак не могу придумать... Как в PS передаётся управление?
 
Добавлено:
Частично вопрос решил. Ошибался в том, что вызывал дочерние скрипты без указания пути, PS этого не терпит. Но с возвратом управления проблема остаётся. Хотя нет... возвращается. Проблема с возвратом результатов (напр., новых переменных).
 
Простейший пример: создано 2 сценария: 0.PS1 и 1.PS1
0.PS1

Код:
$A=123
.\1.PS1
Echo 0
Echo $B

1.PS1

Код:
Echo $A
Echo 1
$B=321

В результате:

Цитата:
123
1
0

"321" потерято.

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:15 21-10-2010 | Исправлено: BVV63, 09:38 21-10-2010
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BVV63, пример test-1.ps1 и test-2.ps1

Код:
 
# test-1.ps1
 
$a=1
$a=.\test-2
$a
 


Код:
 
# test-2.ps1
 
$a++
return $a
 

Рассматривай вызываемый скрипт как функцию.

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:58 21-10-2010
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Работает, хотя и не понял, почему. В Test-1.PS1 переменной $A присваивается значение "1", затем присваивается значение ".\Test-2". По логике прежднее значение "1" должно потеряться.
А как быть, ежели нужно вернуть несколько параметров?
P. S. Похоже, PS не предназначен для создания модульной структуры.

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 10:22 22-10-2010 | Исправлено: BVV63, 10:33 22-10-2010
01MDM



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

Цитата:
А как быть, ежели нужно вернуть несколько параметров?

Например так:

Код:
 
# test-1.ps1
 
$a=1
$b=2
$c=3
 
"В test-1 `$a=$a"
"В test-1 `$b=$b"
"В test-1 `$c=$c`n"
 
. .\test-2
 
"В test-1 `$a=$a"
"В test-1 `$b=$b"
"В test-1 `$c=$c...`n...И новая переменная `$d=$d"
 


Код:
 
# test-2.ps1
 
"В test-2 `$a=$a"
"В test-2 `$b=$b"
"В test-2 `$c=$c`n"
 
$a="one"
$b="two"
$c="three"
$d="new"
 

 

Цитата:
P. S. Похоже, PS не предназначен для создания модульной структуры.

 
А у PS и так модульная система, т.к. функции, по своей сути и есть модули (в смысле подпрограммы).

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:01 22-10-2010
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Возможно, я не очень удачно выразился. Я подразумевал файловое разделение исполняемого кода: основное тело и подгружаемые процедуры. В батанике с этим как-то проще...

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 13:25 22-10-2010 | Исправлено: BVV63, 13:26 22-10-2010
baystruk

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BVV63
там несколько пространств переменных Глобальные, Локальные, Частные, родительские, дочерние
из дочернего доступны родительские, но не наоборот, если не задано явно по другому
а вообще
Get-help about_Scopes

Всего записей: 68 | Зарегистр. 07-04-2006 | Отправлено: 16:37 01-11-2010
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
baystruk
Угу. Get-Help -Full About_Scopes. Почитал, мало что понял (чтой-то сегодня я не в форме), отложил до лучших времён.

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 07:29 02-11-2010 | Исправлено: BVV63, 07:30 02-11-2010
forwindowssites

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите с одной проблемкой.
Есть код. Смысл в следующем - сравнить содержимое двух папок и выгрузить результат в файл.
 

Код:
 
cd o:\1
$1 = get-childitem -force -recurse | foreach-object {$_.fullname} | split-path -leaf
cd o:\2
$2 = get-childitem -force -recurse | foreach-object {$_.fullname} | split-path -leaf
compare-object -ReferenceObject $1 -DifferenceObject $2 | export-csv o:\compare.csv  -Delimiter ";"  
 

 
 
Проблема в последней строке. Если выполнять так как есть - то русские буквы отображаются знаками вопроса (при этом символы => и <= - помещаются во второй столбец - как я и хотел)
 
Добавил в последню строку -Encoding Unicode
 

Код:
 
compare-object -ReferenceObject $1 -DifferenceObject $2 | export-csv o:\compare.csv -Encoding Unicode -Delimiter ";"  
 

 
Русский язык при этом стал отображатся корректно, но символы => и <=  - перестали попадать во второй столбец.
 
Подскажите как сделать так что бы русские названия корректно выгружались ( ставил шрифт Lucida Console - не помогает) и результат разбивался на 2 колонки (во второй должны быть => и <= )
 
 
*Примечание -  Все описаное касается MS Excell.  (ситуацию можно обойти открывая файл OpenOffice и выбирая там разделитель ";") Но надо открывать именно через Эксель.  

Всего записей: 11 | Зарегистр. 29-12-2007 | Отправлено: 11:33 02-12-2010 | Исправлено: forwindowssites, 16:56 02-12-2010
ComradG



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

Код:
compare-object -ReferenceObject $1 -DifferenceObject $2 | export-csv o:\compare.csv  -Delimiter ";" -encoding ASCII


Всего записей: 2041 | Зарегистр. 05-07-2008 | Отправлено: 20:51 02-01-2011
TCPIP

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

Цитата:
Долго, лениво.

Ну подписать-то как раз пару пустых, через командлет Set-AuthenticodeSignature, работающий с Windows Authenticode. Вот документ на формат работы с подписями файлов формата Portable Executable.
Другое дело, вопрос, надо ли это вообще, сертификат-то просто так не получишь (с нужным полем key usage)? Или я вру? Так или иначе, можно выписать самоподписанный сертификат с помощью утилиты makecert. О том как все это сделать, хорошо написано в посте Скота Ханзельмана.

Всего записей: 4667 | Зарегистр. 31-01-2003 | Отправлено: 20:49 03-01-2011
amnon10



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

Цитата:
 
сертификат-то просто так не получишь (с нужным полем key usage)? Или я вру? Так или иначе, можно выписать самоподписанный сертификат с помощью утилиты makecert
 

 
Похорошему, нужно подымать свою инфраструктуру PKI, что технически сделать не сложно, но без планирования потом может вылиться в большую головную боль.
Здесь не плохо расскрывают тему:
 
http://www.sysadmins.lv/PermaLink,guid,5ee5feb6-bcb0-4a1f-adfc-de989556785a.aspx
 
Вопрос подписывания скриптов встает как только хочешь запустить скрипт из шары на Windows Servere , так как даже с Set-EexecutingPolicy Unrestricted все равно задет какие-то вопросы.

Всего записей: 85 | Зарегистр. 23-04-2003 | Отправлено: 21:22 25-01-2011
gamletv102

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят помогите разобраться в чем тут соль? В общем есть скрипт приблизительно вот такого содержания:
 
$folderBrowserDialog1 = New-Object System.Windows.Forms.FolderBrowserDialog;
$Button1 = New-Object  System.Windows.Forms.Button;
$textBox1 = New-Object System.Windows.Forms.TextBox;
$checkBox1 = New-Object System.Windows.Forms.CheckBox;
$label1 = New-Object System.Windows.Forms.Label;
$textBox2 = New-Object System.Windows.Forms.TextBox;
$label2 = New-Object System.Windows.Forms.Label;
$listBox1 = New-Object System.Windows.Forms.ListBox;
$label3 = New-Object System.Windows.Forms.Label;
$listBox2 = New-Object System.Windows.Forms.ListBox;
$label4 = New-Object System.Windows.Forms.Label;
$label5 = New-Object System.Windows.Forms.Label
$Button1.Location = New-Object System.Drawing.Point(430, 38);
$Button1.Name = "Button1";
$Button1.Size = New-Object System.Drawing.Size(75, 23);
$Button1.TabIndex = 0;
$Button1.Text = "Папка";
$Button1.UseVisualStyleBackColor = $true;
....
В общем скрипт выводит на экран форму для ввода данных пользователя.
Пишу его в PowerGUY Script Editor, где он без проблем отрабатывается. В PowerShell ISE он так же прекрасно работает, причем как из области редактирования скриптов так и из консльной области.  
Но когда я запускаю непосредственно оболочку PowerShell и ввожу команду C:\MyScript.ps1 выходит следующее:
 
New-Object : Не удается найти тип [System.Windows.Forms.FolderBrowserDialog]: убедитесь в том, что сборка, содержащая этот тип, загружена.
 
И так на каждую строчку где используются объекты.
Может быть нужно както явно укзать использование этого типа, например через Add-type?  
в общем если есть какие соображения или ссылки на этот счет буду весьма благодарен.
 
OS Windows7 Ultimate
PowerShell 2.0  
 
Добавлено:
4 часа жесткого серфинга и вот что удалось найти : http://technet.microsoft.com/en-us/library/ff730941.aspx
Исходя из этого добавил в скрипт верхние две строчки:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")  
 [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
и все пошло на ура.

Всего записей: 3 | Зарегистр. 12-08-2010 | Отправлено: 00:58 21-02-2011 | Исправлено: gamletv102, 02:13 21-02-2011
gamletv102

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И вроде все хорошо, но домкрат все же сломался.  Скрипт запускается, и почти все работает, почти кроме одной мелочи: при отработки команды выбора папки: $folderBrowserDialog1.ShowDialog(); скрипт просто зависает и тогда только ctrl+break. причем опять же, powershell_ise и PowerGUY отрабатывают это все по честному и ничего не виснет. В чем тут собака порылась не пойму. версия файла PowerShell 6.1.7600.16385. Подскажите пожалуйсто, срочно нужно сдать этот скрипт заказчику.

Всего записей: 3 | Зарегистр. 12-08-2010 | Отправлено: 14:58 21-02-2011
Black_Swan



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Подскажите плиз что это за параметры, как можно получить весь их допустимый список или где почитать:
.Status
.workingset
.ProcessName
.PSIsContainer
 
Вот допустим, работаю с папками, как мне найти другие возможные параметры для доп. ограничений, при работе с папками.
Get-ChildItem 'C:\Program Files' | Where-Object {$_.PSIsContainer}

Всего записей: 40 | Зарегистр. 20-03-2006 | Отправлено: 10:31 22-02-2011
temio



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Black_Swan
перенаправляйте на Get-Member и смотрите на свойства и методы

Всего записей: 163 | Зарегистр. 27-09-2009 | Отправлено: 11:26 22-02-2011
Black_Swan



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

Всего записей: 40 | Зарегистр. 20-03-2006 | Отправлено: 01:04 23-02-2011
   

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