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

» PowerShell

Автор: 01MDM
Дата сообщения: 07.04.2008 14:48
nepost
У меня нет Exchanger 2007, и поэтому судить сложно, единственно что могу предположить, что возможно надо что-то записать в profile.ps1 или запустить с -NoProfile

powershell -NoProfile -Command C:\1.ps1
Автор: EviLAuro
Дата сообщения: 07.04.2008 18:52
народ! помогите, не въезжаю. начало скрипта - скоммуниздил с msdn

Код: $excel = New-Object -comobject Excel.application
$workbooks = $excel.workbooks.open("C:\scripts\test.xlsx")
$worksheets = $workbooks.Worksheets
$worksheet = $worksheets.Item(1)
Автор: Drunken_Master
Дата сообщения: 07.04.2008 21:21
EviLAuro
Это ошибка Excel 2007.
Ссылки:
http://support.microsoft.com/kb/320369
http://forum.sysfaq.ru/index.php?showtopic=3514
Автор: nepost
Дата сообщения: 08.04.2008 06:58
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, без которой он командлеты не понимает
Автор: EviLAuro
Дата сообщения: 08.04.2008 08:47

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

спасибо, прогресс есть, но небольшой.

мне бы образец реально работающего скрипта, чтобы от и до был указан, а не кусками.
или книжку типа powershell in action... говорят, очень полезна.
Автор: Drunken Master
Дата сообщения: 08.04.2008 13:20
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)
Автор: EviLAuro
Дата сообщения: 08.04.2008 18:17
Drunken Master
ну, в идеале (задачу себе такую поставил), скрипт должен брать данные о юзверях из таблицы и формировать на основе каждой строки (1строка=1юзверь) карточку пароля в виде страницы html.

но вообще, кроме того как открыть книгу экселя, не могу найти методы... задающий координаты ячейки, считывающий данные из ячейки, и записывающий значение в ячейку.
Автор: Drunken_Master
Дата сообщения: 08.04.2008 21:49
Вот такой пример. В таблице 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
Автор: EviLAuro
Дата сообщения: 09.04.2008 12:20
Drunken_Master
спасибо, все заработало)
Автор: miranon
Дата сообщения: 11.04.2008 21:40
Подскажите пожалуйста, как скопировать папки (около 200 штук) без файлов которые в них находятся?

А еще можно ли скопировать те же папки но только с определёнными файлами, например только с расширением .doc и .png но без .bmp и т.д.?
Автор: EviLAuro
Дата сообщения: 12.04.2008 09:03
miranon
можно, но это скорее вопрос к алгоритму чем к скриптам.
Автор: EviLAuro
Дата сообщения: 16.04.2008 09:04
обнаружил проблему.
при работе вышеописанного скрипта, нагружает процессор до 100%
и 25 строк экселя перебирает по 5 минут...
это недостаток работы с экселем, или вообще PS?
excel2007, PS 1.0, XPSP2
Автор: aMD_MicROBB
Дата сообщения: 30.04.2008 15:37
Проблема заключается по переименованию машин в домене.
Вот код скрипта:

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)


Подскажите в чем грабли.
Автор: Joolz
Дата сообщения: 09.07.2008 12:19
Хех... смотрю, что тут все те же люди, что и в CMD
Есть простой вопросец, нужно получить имя пользователя на компьютере. Я сейчас для этого использую 2 переменные, можно ли как-то получить одну переменную в одно действие?

Код: $cc=Get-WmiObject Win32_ComputerSystem -computername SPB5-501-001 -property username
$cf=(Get-QADUser $cc.UserName).DisplayName
Автор: KapralBel
Дата сообщения: 09.07.2008 12:27

Код: $cf=(Get-WmiObject Win32_ComputerSystem -computername SPB5-501-001 -property username).username
Автор: Joolz
Дата сообщения: 09.07.2008 12:42
KapralBel
Сенькс, но из доменного имени мне еще нужно получить полное DisplayName.
Должно быть что-то типа этого, но оно не работает:

Код: $cf=(Get-WmiObject Win32_ComputerSystem -computername SPB5-509-001 -property username).username -replace "^DOMAIN\\" | (Get-QADUser $_).DisplayName
Автор: KapralBel
Дата сообщения: 09.07.2008 13:35
Joolz
А где ты взял командлет Get-QADUser, а то в стандартной поставке такого нет
Автор: Joolz
Дата сообщения: 09.07.2008 14:28
KapralBel
в З.Ы. сцылка есть.
Автор: Drunken Master
Дата сообщения: 09.07.2008 15:06
Joolz

Код: (GWmi Win32_UserAccount | ? {$_.Caption -eq (GWmi Win32_Com
puterSystem).UserName}).FullName
Автор: Joolz
Дата сообщения: 09.07.2008 15:23
Drunken Master
У меня тупо на этом висит.
Даже через wmic useraccount list brief я результата только через 2 минуты дождался.
Автор: Drunken Master
Дата сообщения: 09.07.2008 15:49
Joolz
Может так будет быстрее:

Код: (gwmi win32_useraccount -filter "caption='$((gwmi win32_com
putersystem).username.replace("\", "\\"))'").FullName
Автор: KapralBel
Дата сообщения: 10.07.2008 11:05
Кто знает на каком свете разработка 2-й части?
Автор: 01MDM
Дата сообщения: 10.07.2008 13:34
KapralBel

2.0 сейчас только в CTP (Alpha). Обещают значительные улучшения и изменения (вплоть до создания командлетов прямо в консоли) при совместимости с первой версией.
Автор: Joolz
Дата сообщения: 10.07.2008 16:11
Еще один дурацкий вопрос, как привести число "2146402304" к виду "2 Gb"?
Как разделить его трижды на 1024 понятно, но как округлить?
Автор: Drunken Master
Дата сообщения: 10.07.2008 16:51
Joolz

Код: [Math]::Round(2146402304 / 1Gb)
Автор: KapralBel
Дата сообщения: 10.07.2008 16:52
$gb=[int](2222222222/1024/1024/1024)
Автор: 01MDM
Дата сообщения: 10.07.2008 16:56
Joolz


Код:
$a=[math]::round((2146402304/1024/1024/1024),0)
Автор: Joolz
Дата сообщения: 11.07.2008 09:54
Drunken Master
KapralBel
01MDM
Всем спасибо.
Самое изящное, на мой взгляд, решение - последнее. Красота!
01MDM, где ты это вычитал? Почитал здесь все-равно мало чего понял.
Автор: 01MDM
Дата сообщения: 11.07.2008 10:22
Joolz
Тоже изучаю по "PowerShell in Action", дается с трудом из-за отсутствия реальных задач

Цитата:
где ты это вычитал?

Задал пару месяцев назад вопрос на одном форуме. Надо было округлить значение до сотых. Предложили решение с [math]::round и это "{0:n2}" -f

Автор: Joolz
Дата сообщения: 11.07.2008 10:29
01MDM

Цитата:
дается с трудом из-за отсутствия реальных задач


Хочешь, предложу задачку?

Страницы: 123456789101112131415161718192021222324

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


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