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

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



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lich130387
пришли еще раз лог ошибки и скрипт (на картинки плохо видно)
из того, что увидел, исправь:
net use G: /delete /y

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 11:10 18-10-2012
Lich130387

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

Цитата:
Готового решения я не нашел.
Варианты решения: Есть "готовое" решение (см. http://www.zabbix.com/forum/archive/index.php/t-13939.html), но он работает только с x86. Смысл его в том, что к SpeedFun-у прикручивается SNMP "плагин" и по нему происходит обмен информации. На сайте автора "плагина" есть исходники, они достаточно маленькие и разобраться с ними можно! В результате мы получим то, что мы хотим. Так же в комплекте с исходниками идут тестовые утилиты для проверки. Кроме того, в инете есть много примеров, для реализации чтения значений из SpeedFun-а (я находил и под C#). Примеры ищется по слову: "SFSharedMemory_ALM".  

посмотрел по ссылке  http://www.zabbix.com/forum/archive/index.php/t-13939.html. Что-то не понял, как темпы получать. написано так:
 
Получилось так что служба SNMP не отдает подобные данные, и пакет lm_sensors не портирован на платформу Windows. Но выход все же есть. Используем следующие инструменты SpeedFan – http://www.almico.com/sfdownload.php и SFSNMP – это плугин для сбора статистика SpeedFan’а по SNMP – http://code.bastart.eu.org.nyud.net/files/sfsnmp-0.0.4-12.msi
перезапускаем на всякий случай snmp службу и сам speedfan. Теперь данные можно брать по SNMP через следующие OID’ы
 
.1.3.6.1.4.1.16.0.1.x – Температура (.0 – HDD; .1 – Temp1 – материнская плата; .2 – Memory; .3 – CPU; .4 – GPU)
.1.3.6.1.4.1.16.0.2.x – Частота вращения кулеров
.1.3.6.1.4.1.16.0.3.x – Напряжение
 
Непонятно, куда это вводить....
 
"net use G: /delete /y" - что здесь означает "/y"?

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 11:21 18-10-2012 | Исправлено: Lich130387, 11:23 18-10-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lich130387
забудь про SNMP, это было привязано непосредственно к моей задачи, лучше поищи как с помощью PowerShell достать "SFSharedMemory_ALM"

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 11:24 18-10-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oldster
ладно, а по вопросу с кодировками ничего не можешь сказать?  
 
кстати, в  командной строке команда chcp 866 помогает изменить кодировку, надпись становится понятной. а вот если ввожу команду chcp 1251, то опять не по-русски всё становится.  В PowerShell ISE такое не проканывает.
нашёл инфу в этой статье. получилось исправить непонятные символы на английские, но хотелось бы, чтобы выдавало это на русском.
http://anvarichn.livejournal.com/43752.html
 
Кстати, разбирать сам код я Вас, Oldster, не просил, только с кодировкой помочь разораться....

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 11:34 18-10-2012 | Исправлено: Lich130387, 11:49 18-10-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lich130387
PowerShell ISE - я этим не пользуюсь, предпочитаю PowerGUI.
 
PS: смотри ПМ

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 11:48 18-10-2012
amnon10



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ, нужна помощь
Мозк сломался уже...
 
Задача такая: Есть Вотч фолдер как только туда попадает файл
Нужно получить количество трэков и потом сделать демукс
 

Код:
 
$folder = '\\server\video\wf\Muxer\Watch\DeMuxer\tmp\'
$filter = '*.mpg'
$timeout = 1000
$FileSystemWatcher = New-object System.IO.FileSystemWatcher $folder , $filter
$logformat = Get-Date -f "yyyy-MM"
$Date = Get-Date -f "yyyy-MM-dd"
$log = "C:\Script\Log\Watch_$Date.txt"
$logtime = Get-Date -f "HH:mm:ss"
$o = dir $Path
$CONV = "\\server\video\wf\Muxer\Converted\DeMuxer\"
$tool = "C:\Tools\ffmpeg.exe"
Write-Output "`n" "$Date $logtime Start" >> $Log
 
 
Write-Host "Press any key to abort monitoring $folder"
 
do {
$result = $FileSystemWatcher.WaitForChanged("changed", $timeout)
 
if ($result.TimedOut -eq $false) {  
    '{0} : {1}' -f (Get-Date), $result.Name |  
Out-File $log -Append
$path = $folder + $result.Name
Write-Host $path
$o = dir $path
Write-Host "Script exit"
$STREAMS = 3
$COM = '-y -i ' + $o.FullName + ' -map 0:0 -vcodec copy ' + $CONV + $o.BaseName + '.m2v '
$val = 0
While ($val -ne $STREAMS)
 
{
$val++
$COM = $COM + '-map 0:' + $val + ' -acodec copy ' + $CONV + $o.BaseName + '_track' + $val + '.mp2 '
}
 
Start-Job Invoke-Expression "$tool $COM"
 
rm $o -Force
Write-Output "$logtime Mux seccessfull $o" >> $log
}
 
} until ( [System.Console]::KeyAvailable )
 

 
Как передать аргументы ffmeg запустить фоновую задачу демукса, чтобы цыкл не ждал пока закончится демукс?

Всего записей: 85 | Зарегистр. 23-04-2003 | Отправлено: 18:39 20-10-2012
amnon10



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Разобрался.
Вся часть которая обрабатывает файл вынес в отдельный скрипт и его запускаю через Start-Job
 
Но появилась другая проблема.
Нужно получить количество стримов в MPG..

Всего записей: 85 | Зарегистр. 23-04-2003 | Отправлено: 05:09 22-10-2012 | Исправлено: amnon10, 05:13 22-10-2012
amnon10



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
На всякий случай.. обновлю
стримы получаю через ffprob
Если нужны подробности, свисните

Всего записей: 85 | Зарегистр. 23-04-2003 | Отправлено: 18:54 08-11-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В справке к PowerShell'у есть такой пример:
 

Цитата:
Пример 4
 
C:\PS>add-content -value (get-content test.log) -path C:\tests\test134\logs\test134.log
 
Описание
-----------
Эта команда создает новые каталог и файл и копирует содержимое существующего файла в созданный файл.
 
Для добавления содержимого в данной команде используется командлет Add-Content. Значение параметра Value представляет собой команду Get-Content, которая получает содержимое из существующего файла, Test.log.  
 
Значение параметра Path — это путь, который на момент запуска команды не существует. В данном примере существуют только каталоги C:\Tests. Остальные каталоги и файл Test134.log создаются командой.
 
Параметр Force для этой команды не требуется. Командлет Add-Content создает каталоги для завершения заданного пути даже без параметра Force.

Я использовал этот командлет в своём скрипте, но он не создавал у меня папке. Думал, что дело в скрипте или как я там всё пишу.  
Но если я даже  вставляю код из примера в PS, он выдаёт мне ошибку и ничего не создаёт.
Ошибка такая:
Add-Content : Не удалось найти часть пути "C:\tests\test134\logs\test134.log".
строка:1 знак:12
+ add-content <<<<  -value (get-content test.log) -path C:\tests\test134\logs\test134.log
    + CategoryInfo          : ObjectNotFound: (C:\tests\test134\logs\test134.log:String) [Add-Content], DirectoryNotFo
   undException
    + FullyQualifiedErrorId : GetContentWriterDirectoryNotFoundError,Microsoft.PowerShell.Commands.AddContentCommand

 
Добавлено:
Кстати, пока обхожусь командлетом New-Item. Создаю с его помощью директорию (файл уже создаёт add-content, причём без проблем).
Но всё равно интересно, можно ли ограничиться одним add-content.

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 06:09 27-11-2012 | Исправлено: Lich130387, 07:51 27-11-2012
skanja

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, есть такая команда:
Select-String "слово" .\text.txt | Foreach-Object {$_.Line} > out.txt
 
Но она не работает с файлами в кодировке windows-1251.
Есть решение или это невозможно?

Всего записей: 12 | Зарегистр. 12-04-2007 | Отправлено: 19:54 28-11-2012
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Другой вопрос.
 
Пытаюсь запустить приложение wincontig (дефрагментатор).  
 
Вот такой код в скрипте:

Код:
 
$disk = "F:\"
$keys = "/NOGUI /DEFRAG"
$soft = "C:\test\WContig\WinContig.exe"
 
&$soft $disk $keys
 

Код не работает, то есть ключи "/NOGUI" и "/DEFRAG" вообще не видятся. Правда приложение всё равно запускается. В командной строке всё выполняется нормально, но вставляю такую строку: C:\test\WContig\WinContig.exe F:\ /NOGUI /DEFRAG.
 
Кстати, вставил ту же строку (без всяких кавычек или других символов) в консоль powershell, а потом - в powershell ise, в скрипт, - и всё работало, выполнялось.  
 
Порыскал по интернету, и  нашёл то, что мне нужно.
 
ЗЫ Хм, есть подозрение, что это такое приложение дурацкое, так как некоторые другие вроде бы вызывались таким способом (через переменные и строки)

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 10:29 04-12-2012
DevisKurpatov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте люди и гуру PowerShell'a! Я тут столкнулся с задачей:
У меня есть скрипт(не мой, нашел в интернете), переделал его под свой домен! Он добовляет пользователей в Домен! Проблема заключается в том что он кладет в стандартную группу членства домена! А у меня этих групп куча, помогите понять куда надо вставить ADD-AdGroupMember и с какими параметрами! Не сильно силен в PowerShell'e но стремительно хочу познать его! Вот скрипт: http://rusfolder.com/34054801

Всего записей: 1 | Зарегистр. 11-12-2012 | Отправлено: 17:35 11-12-2012
FastCat



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите, как пользоваться этим PowerShell скриптом ?
 

Код:
function add-hostfilecontent {            
 [CmdletBinding(SupportsShouldProcess=$true)]            
 param (            
  [parameter(Mandatory=$true)]            
  [ValidatePattern("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")]            
  [string]$IPAddress,            
               
  [parameter(Mandatory=$true)]            
  [string]$computer            
 )            
 $file = Join-Path -Path $($env:windir) -ChildPath "system32\drivers\etc\hosts"            
 if (-not (Test-Path -Path $file)){            
   Throw "Hosts file not found"            
 }            
 $data = Get-Content -Path $file              
 $data += "$IPAddress  $computer"            
 Set-Content -Value $data -Path $file -Force -Encoding ASCII              
}

 
Он должен в Windows 8 изменять файл hosts. Добавлять в него IP и имя компьютера.

Всего записей: 964 | Зарегистр. 06-01-2002 | Отправлено: 17:10 30-12-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FastCat
Вероятнее всего вызвать эту функцию с параметрами, например так:
 
add-hostfilecontent -IPAddress 127.0.0.1 -computer localhost
 
Скрипт должен работать не только в W8 но и в W7

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 20:54 30-12-2012
FastCat



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Oldster
А как сделать так, что бы PowerShell знал о такой функции hostfilecontent ?

Всего записей: 964 | Зарегистр. 06-01-2002 | Отправлено: 21:48 30-12-2012
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FastCat
сохрани это в файл name.ps1

Код:
 
function add-hostfilecontent {              
  [CmdletBinding(SupportsShouldProcess=$true)]              
  param (              
   [parameter(Mandatory=$true)]              
   [ValidatePattern("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")]              
   [string]$IPAddress,              
                 
   [parameter(Mandatory=$true)]              
   [string]$computer              
  )              
  $file = Join-Path -Path $($env:windir) -ChildPath "system32\drivers\etc\hosts"              
  if (-not (Test-Path -Path $file)){              
    Throw "Hosts file not found"              
  }              
  $data = Get-Content -Path $file              
  $data += "$IPAddress  $computer"              
  Set-Content -Value $data -Path $file -Force -Encoding ASCII              
}
 
add-hostfilecontent -IPAddress 127.0.0.1 -computer localhost
 

и запусти так:
 

Код:
powershell.exe name.ps1

 
должно заработать, если нет - читай шапку, и доки по powershell

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 13:41 01-01-2013
Vitalik85

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При обновлении Vista требует удалить windows powershell. Ни в программах, ни в установленных пакетах ее нет. Скачал пакет установки, при установке тоже ошибка. Как выйти из этой ситуации и все-таки его удалить?
Или может он в тот же фремеворк входит?

Всего записей: 54 | Зарегистр. 15-10-2008 | Отправлено: 22:18 20-01-2013
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vitalik85
POSH вроде как апдейтом ставится, имхо надо там искать
 
 
Добавлено:
вроде как эти:
Windows6.0-KB928439-x64.msu
Windows6.0-KB928439-x86.msu
смотри по номеру и удаляй из системы.

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 21:24 21-01-2013
MadSeas0n

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, прошу помощи.
Необходимо с удаленной машины собирать ивенты с определённым ID за последний, скажем, час.
Запрос следующего вида:
Get-Eventlog -logname "security" -computername $server -after (Get-Date).AddHours(-1)   | Where-Object {$_.eventID -eq 540} | Select-Object EventID,Category,UserName,TimeGenerated | Format-List  
Справляется с этим на ура, но есть одно "НО"...после выполнения запроса шелл не возвращает командную строку, а просто повисает с мигающим курсором и всё. С локальной машиной результат тот же. При этом, если заментить параметр -after на -newest, всё проходит как по маслу. Может сталкивался кто-нибудь, подскажите, в каком направлении думать. Заранее спасибо.

Всего записей: 1 | Зарегистр. 26-01-2013 | Отправлено: 18:59 26-01-2013
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MadSeas0n
Могу предложить использовать вначале New-PSSession для подключения к компу\серверу, а потом Invoke-Command, как описано тут

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

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 19:15 26-01-2013
   

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