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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня напрямую из PS нормально, а из cmd говорит, что "не распознано как командлет, функция, выполняемая программа или файл сценария"
Непонятно

Всего записей: 10 | Зарегистр. 04-12-2007 | Отправлено: 14:46 07-04-2008
01MDM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nepost
У меня нет Exchanger 2007, и поэтому судить сложно, единственно что могу предположить, что возможно надо что-то записать в profile.ps1 или запустить с -NoProfile
 
powershell -NoProfile -Command C:\1.ps1

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:48 07-04-2008
EviLAuro



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
народ! помогите, не въезжаю. начало скрипта - скоммуниздил с msdn

Код:
$excel = New-Object -comobject Excel.application
$workbooks = $excel.workbooks.open("C:\scripts\test.xlsx")
$worksheets = $workbooks.Worksheets
$worksheet = $worksheets.Item(1)

 
выдает такую вот ошибку. даже не представляю что копать.

Код:
PS C:\scripts> .\example.ps1
Исключение при вызове "Open" с "1" аргументами: "Использован старый формат, либ
о библиотека имеет неверный тип. (Exception from HRESULT: 0x80028018 (TYPE_E_IN
VDATAREAD))"
В C:\scripts\example.ps1:2 знак:35
+ $workbooks = $excel.Workbooks.Open( <<<< "C:\scripts\test.xlsx")
Нельзя вызвать метод для выражения со значением NULL.
В C:\scripts\example.ps1:4 знак:30
+ $worksheet = $worksheets.Item( <<<< 1)
PS C:\scripts>

Всего записей: 7 | Зарегистр. 23-05-2006 | Отправлено: 19:52 07-04-2008 | Исправлено: EviLAuro, 19:57 07-04-2008
Drunken_Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
EviLAuro
Это ошибка Excel 2007.
Ссылки:
http://support.microsoft.com/kb/320369
http://forum.sysfaq.ru/index.php?showtopic=3514

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 22:21 07-04-2008
nepost

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM
Не совсем разобрался, что к чему, но нашел причину:
C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -command ". 'C:\1.ps1'"
Вот так работает из cmd
Видимо, exshell.psc1 - какая-то надстройка для exchange, без которой он командлеты не понимает

Всего записей: 10 | Зарегистр. 04-12-2007 | Отправлено: 07:58 08-04-2008
EviLAuro



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

Цитата:
EviLAuro
Это ошибка Excel 2007.
Ссылки:
http://support.microsoft.com/kb/320369
http://forum.sysfaq.ru/index.php?showtopic=3514

спасибо, прогресс есть, но небольшой.
 
мне бы образец реально работающего скрипта, чтобы от и до был указан, а не кусками.
или книжку типа powershell in action... говорят, очень полезна.

Всего записей: 7 | Зарегистр. 23-05-2006 | Отправлено: 09:47 08-04-2008
Drunken Master

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

Цитата:
$excel = New-Object -comobject Excel.application  
$workbooks = $excel.workbooks.open("C:\scripts\test.xlsx")  
$worksheets = $workbooks.Worksheets  
$worksheet = $worksheets.Item(1)

перепишется так

Код:
 
$excel = New-Object -comObject Excel.Application
$ci = [System.Globalization.CultureInfo]("en-US")
$filename = "C:\scripts\test.xlsx"
$workbooks = $excel.Workbooks.PSBase.GetType().InvokeMember("Open", "InvokeMethod", $null, $excel.Workbooks, @($filename), $ci)
$worksheets = $workbooks.Worksheets
$worksheet = $worksheets.Item(1)
 

Ключевые куски выделил. И так для всех методов: указывается имя метода, объект (изначальный) и можно массив параметров как @($param1, $param2, 8, "str") или $null, если параметров у метода нет.

Цитата:
мне бы образец реально работающего скрипта

А что скрипт должен делать?

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 14:20 08-04-2008
EviLAuro



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken Master
ну, в идеале (задачу себе такую поставил), скрипт должен брать данные о юзверях из таблицы и формировать на основе каждой строки (1строка=1юзверь) карточку пароля в виде страницы html.
 
но вообще, кроме того как открыть книгу экселя, не могу найти методы... задающий координаты ячейки, считывающий данные из ячейки, и записывающий значение в ячейку.

Всего записей: 7 | Зарегистр. 23-05-2006 | Отправлено: 19:17 08-04-2008
Drunken_Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот такой пример. В таблице 2 колонки: user, pass. Читаем из первой, пишем во вторую (1 строку пропускаем - типа заголовок).

Код:
$excel = New-Object -comObject Excel.Application
$ci = [System.Globalization.CultureInfo]("en-US")
$filename = "e:\Scripts\PS\test.xls"
$excel.Workbooks.PSBase.GetType().InvokeMember("Open", "InvokeMethod", $null, $excel.Workbooks, @($filename), $ci) | Out-Null
#$excel.Visible = $true
$wb = $excel.Workbooks.Item(1)
$ws = $wb.Worksheets.Item(1)
 
$oldofs = $ofs
$ofs = ''
 
$i = 2 # Пропускаем заголовок
do {
    $usr = $ws.Cells.Item($i, 1).FormulaLocal
    $ws.Cells.Item($i, 2).FormulaLocal = [String]($usr[($usr.Length - 1)..0])
    $i++
} until ($usr -eq "")
$wb.PSBase.GetType().InvokeMember("Save", "InvokeMethod", $null, $wb, $null, $ci) | Out-Null
$wb.PSBase.GetType().InvokeMember("Close", "InvokeMethod", $null, $wb, $null, $ci) | Out-Null
$ws = $null
$wb = $null
$excel.Quit()
$excel = $null
 
$ofs = $oldofs

Читать:
http://msdn2.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.cells.aspx
и дальше по объектам, методам

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 22:49 08-04-2008 | Исправлено: Drunken_Master, 22:49 08-04-2008
EviLAuro



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken_Master
спасибо, все заработало)

Всего записей: 7 | Зарегистр. 23-05-2006 | Отправлено: 13:20 09-04-2008
miranon



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста, как скопировать папки (около 200 штук) без файлов которые в них находятся?
 
А еще можно ли скопировать те же папки но только с определёнными файлами, например только с расширением .doc и .png но без .bmp и т.д.?

Всего записей: 504 | Зарегистр. 03-06-2004 | Отправлено: 22:40 11-04-2008
EviLAuro



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
miranon
можно, но это скорее вопрос к алгоритму чем к скриптам.

Всего записей: 7 | Зарегистр. 23-05-2006 | Отправлено: 10:03 12-04-2008
EviLAuro



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
обнаружил проблему.
при работе вышеописанного скрипта, нагружает процессор до 100%
и 25 строк экселя перебирает по 5 минут...
это недостаток работы с экселем, или вообще PS?
excel2007, PS 1.0, XPSP2

Всего записей: 7 | Зарегистр. 23-05-2006 | Отправлено: 10:04 16-04-2008
aMD_MicROBB

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема заключается по переименованию машин в домене.
Вот код скрипта:
 
param(
$computer,  
$newName,  
$user = "domain\administrator",  
$password = "password",  
$help
)
 
$objWMI = Get-WmiObject -Class Win32_Computersystem -computername $computer
$objWMI.psbase.Scope.Options.EnablePrivileges = $true
$objWMI.rename($newName,$password,$user)
$objWMI.JoinDomainOrWorkgroup("group",$password,$user)
 
При вызове этого дела, PowerShell вот как ругается:
 
PS C:\> d:\scripts\renamecomputer.ps1 -computer t399b -newname t399c
Exception calling "Rename" : "Для выполнения данной операции клиентское подключение к WINMGMT должно быть зашифровано. Настройте параметры IWbemServices-прокси и повторите попытку. "
At D:\scripts\renamecomputer.ps1:11 char:15
+ $objWMI.rename( <<<< $newName,$password,$user)
Exception calling "JoinDomainOrWorkgroup" : "Для выполнения данной операции клиентское подключение к WINMGMT должно быт
ь зашифровано. Настройте параметры IWbemServices-прокси и повторите попытку. "
At D:\scripts\renamecomputer.ps1:12 char:30
+ $objWMI.JoinDomainOrWorkgroup( <<<< "group",$password,$user)
 
 
Подскажите в чем грабли.

Всего записей: 131 | Зарегистр. 23-01-2005 | Отправлено: 16:37 30-04-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хех... смотрю, что тут все те же люди, что и в CMD
Есть простой вопросец, нужно получить имя пользователя на компьютере. Я сейчас для этого использую 2 переменные, можно ли как-то получить одну переменную в одно действие?

Код:
$cc=Get-WmiObject Win32_ComputerSystem -computername SPB5-501-001 -property username
$cf=(Get-QADUser $cc.UserName).DisplayName

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 13:19 09-07-2008 | Исправлено: Joolz, 13:26 09-07-2008
KapralBel



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

Код:
$cf=(Get-WmiObject Win32_ComputerSystem -computername SPB5-501-001 -property username).username

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 13:27 09-07-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Сенькс, но из доменного имени мне еще нужно получить полное DisplayName.
Должно быть что-то типа этого, но оно не работает:

Код:
$cf=(Get-WmiObject Win32_ComputerSystem -computername SPB5-509-001 -property username).username -replace "^DOMAIN\\" | (Get-QADUser $_).DisplayName

 
З.Ы. Для доступа к объектам AD юзаю это. В шапке вроде нет.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 13:42 09-07-2008 | Исправлено: Joolz, 13:46 09-07-2008
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Joolz
А где ты взял командлет Get-QADUser, а то в стандартной поставке такого нет

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:35 09-07-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
в З.Ы. сцылка есть.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 15:28 09-07-2008
Drunken Master

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

Код:
(GWmi Win32_UserAccount | ? {$_.Caption -eq (GWmi Win32_Com
puterSystem).UserName}).FullName

Можно и как-то так. Без Get-QADUser.

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 16:06 09-07-2008 | Исправлено: Drunken Master, 16:07 09-07-2008
   

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