Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» PowerShell

Автор: KapralBel
Дата сообщения: 08.08.2008 10:02
Joolz
Было бы совсем неплохо - если бы к скрипту прилагалось совсем небольшое пояснение...
Для чего.. а то шарится по предыдущим страница лень
Автор: Joolz
Дата сообщения: 08.08.2008 11:13
KapralBel
Скрипт записывает в описание(Description) компьютеров, находящихся в определенной ветке AD, их конфигурацию в виде: проц, мать, память, винч, дата заведения в AD. Хотел еще туда же username писать, но отказался в виду частой миграции пользователей.

З.Ы. не работает определение проца на компах с CPU E8200 и SP2. Там где стоит SP3 - все Ok.
Автор: KapralBel
Дата сообщения: 08.08.2008 11:24
Кинуть в шапку?
если да - окультурь текст (справочку, назначение, как юзать)
Автор: Joolz
Дата сообщения: 08.08.2008 11:41
KapralBel
Честно говоря - лень вылизывать. Да и вообще, это первый мой скрипт, который я из командной строки запускал. Он у меня в работе и подвергается всякого рода модификациям. Вобщем, сыроват... но работает... но не всегда.
Кстати, я пока еще не разбирался с параметрами из комстроки, можно будет сканируемую ветку AD из нее вводить.
Автор: KapralBel
Дата сообщения: 08.08.2008 12:22
Joolz
А мой совет с предыдущей страницы? насчет параметров комм.строки - не помогает?
Автор: Joolz
Дата сообщения: 08.08.2008 14:58
KapralBel
1й способ помог, на счет второго - не втыкаю.
Может позже в благородном порыве и причешу скриптец.
Автор: KapralBel
Дата сообщения: 08.08.2008 15:15
Joolz

Код: Param ($param1, $param2)
"param1="+$param1
"param2="+$param2
Автор: Joolz
Дата сообщения: 11.08.2008 09:23
KapralBel
Ага, сенькс, что разжевал. Итак и так удобно.
Еще вопросец, как поставить условие, если переменная $param не определена? Нужно для того, чтобы пользователь вываливался в HELP, если забыл указать параметр.
Автор: KapralBel
Дата сообщения: 11.08.2008 09:33
Joolz

Код: Param ($Param1, $Param2)
If ($Args.Count -eq 0)
{
"Зараза, укажи параметры
А то не буду работать

Твой любимый скрипт"
Exit
}

"param1="+$param1
"param2="+$param2

Автор: Joolz
Дата сообщения: 11.08.2008 10:55
KapralBel
Хм. Попробовал так if ($z -like '') {Парам-парам} - вроде как работает.
Автор: KapralBel
Дата сообщения: 11.08.2008 10:59
Раз работает - то хорошо

В ПШ можно сделать различными способами - выбирай тот, который по душе
Автор: Joolz
Дата сообщения: 11.08.2008 11:05
Вобщем, сделал проверку на наличие более одного CPU и HDD. Сбацал маленький help. Обновил скрипт в начале страницы.
Автор: Drunken_Master
Дата сообщения: 11.08.2008 12:10
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+",""}
Автор: Joolz
Дата сообщения: 11.08.2008 12:31
Drunken_Master
С винчем все нормально, твой вариант действительно удобнее, но с CPU у меня там еще одна проверка идет (здесь не выкладывал). Просто у меня почему-то компы с процессором E8200 стали определяться как Intel Xeon III.
Впрочем приспособил и CPU.
Автор: KapralBel
Дата сообщения: 11.08.2008 13:10
Создал форум по PowerShell
http://powershell.iboards.ru/
Автор: Joolz
Дата сообщения: 11.08.2008 13:17
KapralBel
Тебе придется ОЧЕНЬ постараться, чтобы наполнить его народом. Даже тут ветка по posh насчитывает всего 13 страниц. Пока posh не очень популярен.
Автор: KapralBel
Дата сообщения: 11.08.2008 13:24
А куда торопиться
Автор: Drunken_Master
Дата сообщения: 11.08.2008 15:56
Joolz

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

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

Код: >Test-Path Variable:\param
True
Автор: Joolz
Дата сообщения: 12.08.2008 13:54
Кто-нть подскажет как грамотно подставить в replace ЛЮБОй символ. Т.е. мне нужно удалить строку содержащую "processname". Соответственно я пишу replace -"^[любой симовл]*(processname)[любой символ]*$", "". Может можно как-то по другому? Я пока ничего лучше чем [\s\S] не придумал.
Автор: KapralBel
Дата сообщения: 12.08.2008 14:15
PS X:\> $a="q123Q123q"
PS X:\> $a.Replace("123","")
qQq
Автор: Drunken_Master
Дата сообщения: 12.08.2008 16:47
Joolz
. (Точка) — любой символ.

Код: "^.*(processname).*$"
Автор: Joolz
Дата сообщения: 12.08.2008 17:11
Drunken_Master
О! Точно! Спасибо. Я уже и забыл. А то смотрю get-help about_regular_expression, а там фига. Или это только я ее вижу???

Сейчас бьюсь над мониторингом процесса. Пока что выходит уродливый франкенштейн:

Код: $date=(get-date).ToShortDateString()
$time=(get-date).ToShortTimeString()
Get-WmiObject win32_Process -computername pcname | where {$_.Name -match "process.exe"} | convertto-HTML -Property [h-z]* | foreach {$_ -replace "<tr>", "<tr bgcolor=#AABBCC>" -replace "^.*(ProcessName).*$","<tr>$time</tr>"} >>D:\Logs\log_$date.htm
Автор: Joolz
Дата сообщения: 18.08.2008 15:40
Кто подскажет, как избежать "зависания" скрипта при запуске команды get-wmiobject win32_ntlogevent -computerName COMP | select -first 1. Первую запись он находит моментально, но похоже продолжает лиcтать лог до конца в холостую.
Автор: Drunken_Master
Дата сообщения: 18.08.2008 16:49
Joolz
нужно отфильтровывать нужное "на той стороне" через параметр -Filter командлета Get-WmiObject.
Автор: Joolz
Дата сообщения: 19.08.2008 10:17
Drunken_Master
Хм. Как фильтровать параметры типа EntryType и Source понятно, но как фильтровать это безумное время, да еще и с параметрами больше или меньше.
Пробовал и через Get-WMIObject -query "Select * Ftom ....."
Но тоже пока ничего не выходит.
Автор: Drunken_Master
Дата сообщения: 19.08.2008 11:10
Joolz
"безумное время" в DateTime:

Код: [System.Management.ManagementDateTimeConverter]::ToDateTime($event.TimeWritten)
Автор: Joolz
Дата сообщения: 19.08.2008 11:54
Drunken_Master
Спасибо. Честно говоря не думал что в данном случае приведение к формату позволит решить проблему.
Учитывая, что мне нужны события из журнала Application сделал так:
Get-WmiObject -query "Select * From Win32_NtLogEvent Where (TimeWritten>'$t' AND LogFile='Application')"
Можно и так:
-Filter "TimeWritten>'$t' and LogFile='Application'"
Но скорость работы одинаковая - медленно!
Автор: Drunken_Master
Дата сообщения: 19.08.2008 14:17
Joolz
вряд-ли можно как-то ускорить, разве что поменять местами условия: -Filter "LogFile='Application' and TimeWritten>'$t'"
Автор: Joolz
Дата сообщения: 19.08.2008 16:47
Drunken_Master
Кстати, указаным способом он конвертит даты в убогий американский стандарт времени, а как перегнать н нормальный вид?
Автор: Refugee
Дата сообщения: 19.08.2008 21:18
последнюю запись можно ещё так получить:
$a = New-Object "System.Diagnostics.EventLog" "Application","compname"
$last = $a.Entries[$a.Entries.Count-1]

Страницы: 123456789101112131415161718192021222324

Предыдущая тема: Не понятная проблема с видеокартой.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.