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

» PowerShell

Автор: Drunken Master
Дата сообщения: 11.07.2008 12:11
Господа, чем делить так: "/1024/1024/1024"; лучше — так: "/1Gb"
В PowerShell определены множители kb, mb, gb, tb, pb (…?)
Зацените:

Код: > 1KB, 1MB, 1GB, 1TB | Out-Host
1024
1048576
1073741824
1099511627776
> 1GB -eq 1024*1024*1024
True
> 1PB -eq [math]::pow(1024,5)
True
Автор: Joolz
Дата сообщения: 11.07.2008 12:58
Drunken Master
Вобщем, все мои предыдущие вопросы били связаны с одной задачкой.
Нужно прописать всем компьютерам в домене (желательно в контейнере) описание (Description), при условии, что его нет, в виде:
Полное имя пользователя; CPU; Motherboard; HDD; RAM; если не встроенное, то Video; дата когда введен в домен.
Выглядеть должно примерно так:

Код: Vasisualiy Lohankin, Celeron 2.4 GHz, D865GVC, 80Gb, 256Mb, add to AD 16/08/05
Vasya Pupkin, Pentium D 3 GHz, D865PERL, 200Gb, 1 Gb, ATI RADEON 9550, add to AD 22/05/06
Автор: KapralBel
Дата сообщения: 11.07.2008 15:13
А что доступ к ИД-железа из subj есть?
Автор: 01MDM
Дата сообщения: 11.07.2008 16:01
KapralBel

Цитата:
А что доступ к ИД-железа из subj есть?


Есть, но опять же, через wmi.
Автор: Drunken Master
Дата сообщения: 11.07.2008 17:10
Joolz
Отличная задачка Я не особо хорошо знаю WMI, поэтому пришлось помучиться. Получение указанных характеристик сделал так:

Код: $c = Get-Credential
# Список компьютеров
$comps = gwmi ads_computer -ComputerName Server -Credential $c -Namespace "Root\Directory\LDAP"
# Имя текущего
$localcomp = (gwmi Win32_ComputerSystem).Name
foreach ($comp in $comps)
{
    $compname = $comp.DS_name
    # Проверка доступности
    ping $compname /n 1 | Out-Null
    if ($LastExitCode -ne 0)
    {
        "$compname not found."
    }
    else
    {
        # Локальный c -Credential нельзя
        if ($compname -ne $localcomp)
        {
            $cpu = (Get-WmiObject Win32_Processor -ComputerName $compname -Credential $c -Namespace "Root\CIMV2").Name.Replace("Intel(R) ", '').Replace("(TM)", '').Replace("(R)", '').Replace("CPU", '') -Replace "\s+", ""
            if ($cpu -eq "")
            {
                "$($compname): RPC disabled or Access denied."
                continue;
            }
            $mb = (Get-WmiObject Win32_BaseBoard -ComputerName $compname -Credential $c -Namespace "Root\CIMV2").Product
            # Размер HDD в "нечестных" GB
            # и подразумевается что HDD один
            $hdd = "{0:0}GB" -f ((Get-WmiObject Win32_DiskDrive -Filter "MediaType LIKE 'Fixed%'" -ComputerName $compname -Credential $c -Namespace "Root\CIMV2").Size / 1000 / 1000 / 1000)
            $ram = "{0:0}MB" -f ((Get-WmiObject Win32_PhysicalMemory -ComputerName $compname -Credential $c -Namespace "Root\CIMV2") | Foreach-Object {$s=0}{$s +=$_.Capacity}{$s / 1MB})
            $add = [System.Management.ManagementDateTimeConverter]::ToDateTime($comp.DS_whenCreated).ToString("d")
            "$($compname): $cpu, $mb, $hdd, $ram, add to AD $add"
            $cpu = $mb = $hdd = $ram = $add = ""
        }
    }
}
Автор: SAVage22
Дата сообщения: 12.07.2008 21:23

Цитата:
Ошибки и предупреждения в журнале событий по электронной почте (в4.0)


Отличный скрипт! Спасибо автору! Вот только не пойму как сделать чтобы он запускался через определённые промежутки времени.

Из ком.строки работает на ура и даже шлёт мне на мыло. Через виндовозный планировщик не работает, т.к. выполняется приблизительно следующее (powershell ''PATCH\script.ps1") на что появляется ошибка 'PATCH\" не является командлетом и и т.д.
Автор: 01MDM
Дата сообщения: 12.07.2008 21:37
SAVage22

A так:

Код:
powershell -c ''PATCH\script.ps1"
Автор: KapralBel
Дата сообщения: 12.07.2008 23:18
Это делалось?

Цитата:
Что бы ассоциировать скипты с PowerShell, аналогично выполнению .bat/.cmd-файлов
нужно в коммандной строке набрать следующую команду
FType microsoft.powershellscript.1=%windir%\system32\windowspowershell\v1.0\powershell.exe "&'%1' %*"
запуск вместе с параметрами


У меня он работает без таких ошибок
Автор: Kein
Дата сообщения: 13.07.2008 01:05
C каких пор PowerShell стала требовать валидацию на скачку?
Автор: KapralBel
Дата сообщения: 13.07.2008 10:15
Kein
С 1-го дня
А прямые ссылки в шапке не помогают?
Автор: Kein
Дата сообщения: 13.07.2008 15:32
"С download-центра MicroSoft cкачивается битый архив почему-то", может кто выложить целый, а? У меня все лицензионное, правда-правда >_>


Цитата:
А прямые ссылки в шапке не помогают?

Нет. Page cannot be found, etc...
Автор: sArj
Дата сообщения: 14.07.2008 16:15
Почините, пожалуйста, прямые ссылки(т.к. везде 404), или вылодите 1.0 для WinXP на какой-нибудь обменник.
Спасибо.
Автор: KapralBel
Дата сообщения: 14.07.2008 16:27
sArj
Kein
Для какой ОС нужно?

Добавлено:
WindowsXP rus - http://ifolder.ru/7339656
Автор: Joolz
Дата сообщения: 14.07.2008 16:53
Drunken Master
Пока как работает код не проверял, но у меня тут втал вопрос:
У меня есть пременные, каждая из которых содержит нужные мне значения, такие как
$cpu, $mb, $hdd, $ram, $add. Как эти значения записать в одну общую переменную, например $ummary, в которой каждое значение было в своей ячейке.

PS>$ummary
User CPU MB HDD RAM Video Add to AD
---- --- -- --- --- ------ ----------
Vasisualiy Lohankin Celeron 2.4 GHz D865GVC, 80Gb 256Mb Null 16/08/05
Vasya Pupkin Pentium D 3 GHz D865PERL 200Gb 1 Gb ATI RADEON 9550 22/05/06
PS>$ummary[1].MB
D865GVC
PS>$ummary[2].ram
1Gb
Автор: KapralBel
Дата сообщения: 14.07.2008 17:12
Все 4 файла из шапки - http://ifolder.ru/f237442
Автор: Drunken Master
Дата сообщения: 14.07.2008 17:51
Kein
sArj
KapralBel
Поменялись ссылки для PS под XP и 2003, в имени файла нужно поменять v2 на v5 для русскоязычных дистрибутивов. Вот:
Win XP RUS
Win XP ENG

Win 2k3 RUS
Win 2k3 ENG

Joolz, или хешем

Код: $comp = @{CPU=$cpu; HDD=$hdd; RAM=$ram}
Автор: KapralBel
Дата сообщения: 15.07.2008 08:39
Drunken Master
Спасибо, внес в шапку
Автор: Joolz
Дата сообщения: 17.07.2008 09:27
Drunken Master
TNX!

Вопрос больше по регулярным выражениям, но все же. Как из файла удалить пустые строки?
(get-content file.txt) -replace "???" | Set-Content file1.txt
Автор: KapralBel
Дата сообщения: 17.07.2008 10:22
Кстати по ХРюшиным версиям - там что-то обновилось, по сравнению с предыдущими
Что - еще не понял
Автор: Drunken Master
Дата сообщения: 17.07.2008 10:42
Joolz

Код: Get-Content file.txt | Where-Object {$_.Length -gt 0} | Set-Content file1.txt
Автор: marfet
Дата сообщения: 19.07.2008 15:48
Лень было всю ветку читать но в шапке не нашел ссылок на чудесный блог по павершеллу xaegr.wordpress.com. Справа ссылка на страницу Ресурсы по Powershell , там ещё много линков на блоги, лабы, статьи и софт. Вообщем, строго рекомендуется.
Автор: Joolz
Дата сообщения: 29.07.2008 09:13
Можно ли скриптом перевести вермя на домен-контроллерах?
Автор: KapralBel
Дата сообщения: 29.07.2008 09:19
Joolz
Set-Date /?

marfet
Давай ссылку - оформлю шапку
Автор: Joolz
Дата сообщения: 29.07.2008 10:00
KapralBel
хм. Я смог только на локальном компе перевести.
Автор: KapralBel
Дата сообщения: 29.07.2008 10:26
Joolz
А у меня переводится

Какая ошибка
Сервер случайно по совместительству не сервер точного времени?
Автор: Joolz
Дата сообщения: 29.07.2008 11:09
KapralBel
Проблема в том, чтобы выполняя скрипт у себя на компе я дорлжен переводить время контроллера домена. Не соображу как set-date применить к удаленному компу.
Автор: KapralBel
Дата сообщения: 29.07.2008 11:24
Ясно, а если запускать скрипт на сервере локально, а не удаленно?
Автор: Joolz
Дата сообщения: 29.07.2008 11:38
KapralBel
Ну это можно, придется туда powershell ставить.
И как его там запускать? Через psexec?

Еще вопросец: если запускаем скрипт через powershell script.ps1, можно ли еще добавить в эту строчку параметр, который потом будет обрабатываться скриптом? Типа powersell script.ps1 +12m, и эти +12m в скрипте обработались до set-date -adjust +0:12:0, а если там -1h, то получалось set-date -adjust -1:0:0.
Автор: KapralBel
Дата сообщения: 29.07.2008 11:56
Joolz
Запускать планировщиком

По поводу параметра
1-й способ смотри в моем скрипте Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
2-й

Код: Param ($param1, $param2)
"param1="+$param1
"param2="+$param2
Автор: Joolz
Дата сообщения: 07.08.2008 17:23
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

Страницы: 123456789101112131415161718192021222324

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


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