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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken Master
Еще раз АГРОМНАЭ спасибо за помощь. Наконец дошли руки, и я доваял скрипт.

Код:
 
###########Скрипт использует ActiveRoles Management Shell for Active Directory от Quest Software. Взять его можно по ссылке : http://www.quest.com/powershell/activeroles-server.aspx############
#Для корректной работы скрипта нужно заменить dc.domain.ru на имя домен-контроллера
#Для определения модели монитора нужен файл вида: PNPDeviceID        DeviceName.
#Таблицу с большим количеством PNPDeviceID можно взять по адресу http://listing.driveragent.com/pnp/
 
param ($z)
 
function helpme
{
    write-host -fore White -back DarkGray "`n         Добавление конфигурации компьютеров ActiveDirectory в их описание"
 
    write-host "`n Скрипт записывает в пустые описания (Description) компьютеров, находящихся в определенной ветке/подразделении/контейнере AD,  их конфигурацию в виде: модель процессора, модель материнской платы, объем оперативной памяти, объем винчестера(-ов), дата заведения в AD."  
    write-host " Например: " -no
    write-host -fore Green "Celeron 1.70GHz, D845GLVA, 40GB, 256MB, ATI RADEON 9550, NEC Multisync 1970NX (21.08.2008)"
 
    write-host "`n Для запуска скрипта в качестве параметра нужно указать ветку/подразделение/контейнер/объект AD."  
    write-host " Например: " -no
    write-host -fore Green "ConfigToDescription.ps1 domain.ru/container1/container14"
 
    write-host "`n Если ветка/подразделение/контейнер/объект AD содержит пробелы, то его/её нужно заключать в ковычки."  
    write-host " Например: " -no
    write-host -fore Green "ConfigToDescription.ps1 \"domain.ru/container one/container14\""
 
    write-host "`n Скрипт использует Download ActiveRoles Management Shell for Active Directory от Quest Software"  
    write-host " Адрес: " -no
    write-host -fore Green " http://www.quest.com/powershell`n"
 
exit
}
 
if ($z -like '' -or $z -imatch "[?]" -or $z -imatch "(help)" ) {helpme}
 
############################# Запрс login/password для доступа к объектам AD ###################################################################################
$c=get-credential -credential administrator@domain.ru
$dc="dc.domain.ru"
$drvpath="C:\DRV\all.drv"
 
connect-QADService -service $dc -credential $c 2>CTD.log | Out-Null
$comps=Get-QADObject -Credential $c -searchroot "$z" -type Computer 2>>CTD.log | Where {$_.OSName -notlike '*Server*'}
foreach ($comp in $comps)
{
$compname=$comp.name
ping $compname /n 1 | Out-Null
    if ($LastExitCode -ne 0)
    {
    "$compname не найден в сети."
    }
    else
    {
$compname>>CTD.log
 
############################# Проверяем количество ядер и запоминаем модель процессора #########################################################################
            (Get-WmiObject Win32_Processor -ComputerName $compname -Credential $c 2>>CTD.log) | Select-Object -First 1 | ForEach-Object {$cpu = $_.Name -Replace 'Intel\(R\) ','' -Replace '\(TM\)','' -Replace'\(R\)','' -Replace"CPU","" -Replace "\s{2,}"," " -Replace "^\s+",""}
            if(((Get-WmiObject Win32_Processor -ComputerName $compname -Credential $c 2>>CTD.log) | Select-Object -First 1 | ForEach-Object {$_.ProcessorID}) -eq 'BFEBFBFF00010676') {$cpu = "Core2 E8200 2.66GHz"}
 
############################# Если модель не разрешилась, то сервер RPC недоступен или доступ запрещен ###############################################################
                     if ($cpu -eq "")
                     {
                     "$($compname): Сервер RPC недоступен или доступ запрещен."
                     continue;
                     }
 
############################# Узнаем модель материнской платы ############################################################################################
            $mb = (Get-WmiObject Win32_BaseBoard -ComputerName $compname -Credential $c 2>>CTD.log).Product -Replace "\s+",""
 
############################# Определяем количество винчестеров и запоминаем их  объем ##########################################################################
            Get-WmiObject Win32_DiskDrive -Filter "MediaType LIKE 'Fixed%'" -ComputerName $compname -Credential $c 2>>CTD.log | Where {$_.PNPDeviceID -LIKE "IDE*"} | ForEach-Object {$hdd = ""}{$hdd += "{0:0}GB, " -f ($_.Size/1e+9)}{$hdd = $hdd.Trim(' ,')}
 
############################# Поределяем объем оперативной памяти ###########################################################################################
            $ram = "{0:0}MB" -f ((Get-WmiObject Win32_PhysicalMemory -ComputerName $compname -Credential $c 2>>CTD.log) | Foreach-Object {$s=0}{$s +=$_.Capacity}{$s / 1MB})
 
############################# Поределяем объем оперативной памяти ###########################################################################################
 
            $vga=(Get-WmiObject Win32_VideoController -ComputerName $compname -Credential $c 2>>CTD.log | ? {$_.PNPDeviceID -like "PCI\Ven*"} | select -first 1).caption -Replace '\(R\)','' -Replace 'Family','' -Replace 'Series','' -Replace 'Controller','' -Replace 'Graphics','' -Replace 'Chipset','' -Replace '\s{2,}',' ' -Replace '\s$',''
############################# Поределяем объем оперативной памяти ###########################################################################################
 
            $mnt=(Get-WmiObject Win32_DesktopMonitor -ComputerName $compname -Credential $c 2>>CTD.log | ? {$_.PNPDeviceID -like "Display\*"}).PNPDeviceID -replace "^(.+\\)(.+)(\\.+)", '$2' -replace "^\s*$", "unknown"
 
             $mon=(select-string -path $drvpath -pattern "$mnt").Line -replace "$mnt    ",""
 
############################# Задаем дату обновления #####################################################################################################
 
            $add = (Get-Date).ToString("d")
 
############################# Записываем полученные даннные в описание компа ##################################################################################
 
get-QADObject -SearchRoot "$comp" -Type Computer  2>>CTD.log |  Where {$_.description -notlike "*$add*"} | set-QADObject -ObjectAttributes @{Description="$cpu, $mb, $hdd, $ram, $vga, $mon ($add)"} 2>>CTD.log | out-null
 
"$compname - Ok!"
 
############################# Обнуляем значения для следующего цикла ########################################################################################
            $cpu = $mb = $hdd = $ram = $add = $vga = $mnt = $mon= ""  
     }
}
disconnect-QADService 2>>CTD.log
 

 
Содержимое файла all.drv

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 18:23 07-08-2008 | Исправлено: Joolz, 17:53 28-08-2008
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Joolz
Было бы совсем неплохо - если бы к скрипту прилагалось совсем небольшое пояснение...
Для чего.. а то шарится по предыдущим страница лень

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Скрипт записывает в описание(Description) компьютеров, находящихся в определенной ветке AD,  их конфигурацию в виде: проц, мать, память, винч, дата заведения в AD. Хотел еще туда же username писать, но отказался в виду частой миграции пользователей.
 
З.Ы. не работает определение проца на компах с CPU E8200 и SP2. Там где стоит SP3 - все Ok.

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



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Кинуть в шапку?
если да - окультурь текст (справочку, назначение, как юзать)

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:24 08-08-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Честно говоря - лень вылизывать. Да и вообще, это первый мой скрипт, который я из командной строки запускал. Он у меня в работе и подвергается всякого рода модификациям. Вобщем, сыроват... но работает... но не всегда.
Кстати, я пока еще не разбирался с параметрами из комстроки, можно будет сканируемую ветку AD из нее вводить.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 12:41 08-08-2008 | Исправлено: Joolz, 12:44 08-08-2008
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Joolz
А мой совет с предыдущей страницы? насчет параметров комм.строки - не помогает?

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
1й способ помог, на счет второго - не втыкаю.
Может позже в благородном порыве и причешу скриптец.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 15:58 08-08-2008
KapralBel



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

Код:
Param ($param1, $param2)
"param1="+$param1
"param2="+$param2  

Param - ключевое слово - в скобках список переменных, в которые передаются параметры
Далее просто используешь эти переменные
 
Запусти вышеуказанный скрипт как

Код:
test_param.ps1 FirstParam SecondParam

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Ага, сенькс, что разжевал. Итак и так удобно.
Еще вопросец, как поставить условие, если переменная $param не определена? Нужно для того, чтобы пользователь вываливался в HELP, если забыл указать параметр.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 10:23 11-08-2008
KapralBel



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

Код:
Param ($Param1, $Param2)
If ($Args.Count -eq 0)  
{  
"Зараза, укажи параметры
А то не буду работать
 
Твой любимый скрипт"
Exit
}
 
"param1="+$param1
"param2="+$param2  
 
 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:33 11-08-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Хм. Попробовал так if ($z -like '') {Парам-парам} - вроде как работает.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 11:55 11-08-2008
KapralBel



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

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:59 11-08-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вобщем, сделал проверку на наличие более одного CPU и HDD. Сбацал маленький help. Обновил скрипт в начале страницы.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 12:05 11-08-2008
Drunken_Master

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Joolz
 
Проверять количество CPU и HDD не обязательно, можно нужно сразу писать так чтобы работало в любых условиях.
 
CPU

Код:
Get-WmiObject Win32_Processor -ComputerName $compname -Credential $c | Select-Object -First 1 | ForEach-Object {$cpu = $_.Name -Replace 'Intel\(R\) ','' -Replace '\(TM\)','' -Replace'\(R\)','' -Replace"CPU","" -Replace "\s{2,}"," " -Replace "^\s+",""}

 
HDD

Код:
Get-WmiObject Win32_DiskDrive -Filter "MediaType LIKE 'Fixed%'" -ComputerName $compname -Credential $c | ForEach-Object {$hdd = ""}{$hdd += "{0:0}GB, " -f ($_.Size/1e+9)}{$hdd = $hdd.Trim(' ,')}

 
Кстати, «1e+9» это ты классно придумал, моё почтение.

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 13:10 11-08-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Drunken_Master
С винчем все нормально, твой вариант действительно удобнее, но с CPU у меня там еще одна проверка идет (здесь не выкладывал). Просто у меня почему-то компы с процессором E8200 стали определяться как Intel Xeon III.
Впрочем приспособил и CPU.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 13:31 11-08-2008 | Исправлено: Joolz, 13:52 11-08-2008
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Создал форум по PowerShell
http://powershell.iboards.ru/

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
Тебе придется ОЧЕНЬ постараться, чтобы наполнить его народом. Даже тут ветка по posh насчитывает всего 13 страниц. Пока posh не очень популярен.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 14:17 11-08-2008
KapralBel



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

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:24 11-08-2008
Drunken_Master

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

Цитата:
как поставить условие, если переменная $param не определена

Более правильный вариант

Код:
>Test-Path Variable:\param
True

Сравнения с пустой строкой, или с $null будут вызывать исключение, если переменная не определена и Set-PSDebug -strict.

Всего записей: 75 | Зарегистр. 11-12-2005 | Отправлено: 16:56 11-08-2008
Joolz

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нть подскажет как грамотно подставить в replace ЛЮБОй символ. Т.е. мне нужно удалить строку содержащую "processname". Соответственно я пишу replace -"^[любой симовл]*(processname)[любой символ]*$", "". Может можно как-то по другому? Я пока ничего лучше чем [\s\S] не придумал.

Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 14:54 12-08-2008 | Исправлено: Joolz, 14:54 12-08-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