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

» PowerShell

Автор: forwindowssites
Дата сообщения: 02.12.2010 10:33
Помогите с одной проблемкой.
Есть код. Смысл в следующем - сравнить содержимое двух папок и выгрузить результат в файл.


Код:
cd o:\1
$1 = get-childitem -force -recurse | foreach-object {$_.fullname} | split-path -leaf
cd o:\2
$2 = get-childitem -force -recurse | foreach-object {$_.fullname} | split-path -leaf
compare-object -ReferenceObject $1 -DifferenceObject $2 | export-csv o:\compare.csv -Delimiter ";"
Автор: ComradG
Дата сообщения: 02.01.2011 19:51
forwindowssites

Код: compare-object -ReferenceObject $1 -DifferenceObject $2 | export-csv o:\compare.csv -Delimiter ";" -encoding ASCII
Автор: TCPIP
Дата сообщения: 03.01.2011 19:49
BVV63

Цитата:
Долго, лениво.

Ну подписать-то как раз пару пустых, через командлет Set-AuthenticodeSignature, работающий с Windows Authenticode. Вот документ на формат работы с подписями файлов формата Portable Executable.
Другое дело, вопрос, надо ли это вообще, сертификат-то просто так не получишь (с нужным полем key usage)? Или я вру? Так или иначе, можно выписать самоподписанный сертификат с помощью утилиты makecert. О том как все это сделать, хорошо написано в посте Скота Ханзельмана.
Автор: amnon10
Дата сообщения: 25.01.2011 20:22

Цитата:

сертификат-то просто так не получишь (с нужным полем key usage)? Или я вру? Так или иначе, можно выписать самоподписанный сертификат с помощью утилиты makecert


Похорошему, нужно подымать свою инфраструктуру PKI, что технически сделать не сложно, но без планирования потом может вылиться в большую головную боль.
Здесь не плохо расскрывают тему:

http://www.sysadmins.lv/PermaLink,guid,5ee5feb6-bcb0-4a1f-adfc-de989556785a.aspx

Вопрос подписывания скриптов встает как только хочешь запустить скрипт из шары на Windows Servere , так как даже с Set-EexecutingPolicy Unrestricted все равно задет какие-то вопросы.
Автор: gamletv102
Дата сообщения: 20.02.2011 23:58
Ребят помогите разобраться в чем тут соль? В общем есть скрипт приблизительно вот такого содержания:

$folderBrowserDialog1 = New-Object System.Windows.Forms.FolderBrowserDialog;
$Button1 = New-Object System.Windows.Forms.Button;
$textBox1 = New-Object System.Windows.Forms.TextBox;
$checkBox1 = New-Object System.Windows.Forms.CheckBox;
$label1 = New-Object System.Windows.Forms.Label;
$textBox2 = New-Object System.Windows.Forms.TextBox;
$label2 = New-Object System.Windows.Forms.Label;
$listBox1 = New-Object System.Windows.Forms.ListBox;
$label3 = New-Object System.Windows.Forms.Label;
$listBox2 = New-Object System.Windows.Forms.ListBox;
$label4 = New-Object System.Windows.Forms.Label;
$label5 = New-Object System.Windows.Forms.Label
$Button1.Location = New-Object System.Drawing.Point(430, 38);
$Button1.Name = "Button1";
$Button1.Size = New-Object System.Drawing.Size(75, 23);
$Button1.TabIndex = 0;
$Button1.Text = "Папка";
$Button1.UseVisualStyleBackColor = $true;
....
В общем скрипт выводит на экран форму для ввода данных пользователя.
Пишу его в PowerGUY Script Editor, где он без проблем отрабатывается. В PowerShell ISE он так же прекрасно работает, причем как из области редактирования скриптов так и из консльной области.
Но когда я запускаю непосредственно оболочку PowerShell и ввожу команду C:\MyScript.ps1 выходит следующее:

New-Object : Не удается найти тип [System.Windows.Forms.FolderBrowserDialog]: убедитесь в том, что сборка, содержащая этот тип, загружена.

И так на каждую строчку где используются объекты.
Может быть нужно както явно укзать использование этого типа, например через Add-type?
в общем если есть какие соображения или ссылки на этот счет буду весьма благодарен.

OS Windows7 Ultimate
PowerShell 2.0

Добавлено:
4 часа жесткого серфинга и вот что удалось найти : http://technet.microsoft.com/en-us/library/ff730941.aspx
Исходя из этого добавил в скрипт верхние две строчки:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
и все пошло на ура.
Автор: gamletv102
Дата сообщения: 21.02.2011 13:58
И вроде все хорошо, но домкрат все же сломался. Скрипт запускается, и почти все работает, почти кроме одной мелочи: при отработки команды выбора папки: $folderBrowserDialog1.ShowDialog(); скрипт просто зависает и тогда только ctrl+break. причем опять же, powershell_ise и PowerGUY отрабатывают это все по честному и ничего не виснет. В чем тут собака порылась не пойму. версия файла PowerShell 6.1.7600.16385. Подскажите пожалуйсто, срочно нужно сдать этот скрипт заказчику.
Автор: Black_Swan
Дата сообщения: 22.02.2011 09:31
Всем привет!
Подскажите плиз что это за параметры, как можно получить весь их допустимый список или где почитать:
.Status
.workingset
.ProcessName
.PSIsContainer

Вот допустим, работаю с папками, как мне найти другие возможные параметры для доп. ограничений, при работе с папками.
Get-ChildItem 'C:\Program Files' | Where-Object {$_.PSIsContainer}
Автор: temio
Дата сообщения: 22.02.2011 10:26
Black_Swan
перенаправляйте на Get-Member и смотрите на свойства и методы
Автор: Black_Swan
Дата сообщения: 23.02.2011 00:04
temio
Спасибо!
Автор: stal104
Дата сообщения: 25.02.2011 12:53
Всем привет!
Помогите пожалуйста разобраться с одной проблемкой.
В общем, в папке есть куча jpg'ов с названиями в utf-8, есть программа convert из пакета imagemagick, которая такие названия файлов в упор не хочет понимать, необходимо натравить на jpg'и программу. Сам алгоритм более менее ясен: необходимо переконвертировать названия jpg'ов во что-нибудь что будет понимать программа (я пытался в ascii, вопросы из названий убирал обычным gsar'ом), затем обработать jpg'и convert'ом и вернуть названия файлов назад.
Первый раз связался с powershell'ом, нифига не понятно Заранее спасибо.
Автор: Black_Swan
Дата сообщения: 25.02.2011 13:39
как вариант найди ответ от PetSerAl, по этой ссылке ХТТП://otvety.google.ru/otvety/thread?tid=6ae7c76c6e675111.
Тема очень схожая...
Автор: stal104
Дата сообщения: 28.02.2011 13:31
В общем получилось, для моего первого скрипта на powershell будет наверно нормально, но выглядит весьма длинно, думаю его ещё можно каким-нибудь образом сократить, да и убрать батник

convert.ps1

Код: get-childitem -name -include *.jpg | out-file 1.txt
get-childitem -name -include *.jpg | out-file 2.txt -encoding ASCII
(get-content 2.txt) | foreach-object {$_ -replace "\?"} | set-content 2.txt
$1 = get-content 1.txt
for ($i=1; $i -le $1.count; $i++) { if ($i -le 1) {[string]$a = get-content 1.txt -totalcount $i; [string]$b = get-content 2.txt -totalcount $i; rename-item $a -newname $b} elseif ($i -le $1.count){[string]$a = (get-content 1.txt -totalcount $i)[-1]; [string]$b = (get-content 2.txt -totalcount $i)[-1]; rename-item $a -newname $b} }
.\convert.bat
for ($i=1; $i -le $1.count; $i++) { if ($i -le 1) {[string]$a = get-content 1.txt -totalcount $i; [string]$b = get-content 2.txt -totalcount $i; rename-item $b -newname $a} elseif ($i -le $1.count){[string]$a = (get-content 1.txt -totalcount $i)[-1]; [string]$b = (get-content 2.txt -totalcount $i)[-1]; rename-item $b -newname $a} }
del 1.txt
del 2.txt
Автор: alterpub
Дата сообщения: 01.03.2011 15:42
Как через powershell сделать вызов программы в имени которой есть пробелы с аргументами?
C:\Program Files\Program.exe argument1 argument2 ?
Автор: 01MDM
Дата сообщения: 01.03.2011 18:28
alterpub

Код:
& 'C:\Program Files\Program.exe' argument1 argument2
Автор: es2424
Дата сообщения: 24.03.2011 14:52
Подскажите пожалуйста есть ли такая фича в команде powershel send-mailmessage, как отправка письма с уведомлением о прочтении? На манер аутлука. То что там есть ключ -dno знаю, но он сообщает только о доставке или не доставке, а о прочтении нет.
Автор: AlexNNM
Дата сообщения: 26.03.2011 19:17
Добрый день! Помогите решить задачу. Необходимо получить размеры папок в папке C:\Users Windows Server 2008. Пробовал следующее
Get-ChildItem C:\Users | measure-object -property length -sum
Пишет ошибку "Не удается найти свойства length в каком либо из объектов ввода", хотя в другой папке срабатывает. Нет ли какого либо другого способа в PowerShell получить размер папок? Нужно только имя папки и размер. Спасибо
Автор: 01MDM
Дата сообщения: 26.03.2011 20:11
AlexNNM
Попробуй так:

Код:
gci -force 'C:\Users' | ? { $_ -is [io.directoryinfo] } | % {

$len = 0
gci -recurse -force $_.fullname | % { $len += $_.length }
'{0}: {1:0.00} mb' -f $_.fullname, ($len / 1mb)

}
Автор: AlexNNM
Дата сообщения: 26.03.2011 20:24
Спасибо! Можно сказать работает ))) Правда на многие файлы пишет "Отказано в доступе", хотя запускал из под Администратора

Добавлено:
Размер соответствует, еще раз большое спасибо
Автор: legat75
Дата сообщения: 18.04.2011 14:02
Доброго врмени суток всем!
Подскажите плз - есть задачка переименования нескольких файлов. Новое имя берется внутри самого файла. Но- на экране все выглядит замечательно, а вот переименовывать не хочет. Пробовал вывести в файл - получилось очь интересно- каждая буква в HEX отделена 00 от следующей, и строка начинается с 0D0A. выглядит как FF FE 50 00 69 00 74 00 и т.д. Как выбрать из строки (лежит в переменной) только буквы? Или сменить кодировку самой строки? Что-то я запутался..
Автор: 01MDM
Дата сообщения: 18.04.2011 19:03
legat75
Допустим есть файл "old.txt", с содержанием:

Код:
new.txt
Автор: temio
Дата сообщения: 19.04.2011 15:48
01MDM
название для файла должно браться из его содержания

legat75
$file = gc filename.txt
$file.split() | % {[Char][Convert]::ToInt32($_,16)}

Содержание будет простым языком и можно вычленить название
Автор: 01MDM
Дата сообщения: 19.04.2011 16:28
temio

Цитата:
название для файла должно браться из его содержания

Ну? А у меня откуда берется?
Автор: temio
Дата сообщения: 21.04.2011 22:35
01MDM
Pardon, my bad. Проглядел.
Я понял так, что он читает хексом, а не через Get-Content (у меня написано для примера)
Автор: 01MDM
Дата сообщения: 23.04.2011 13:21
temio
Зачем legat75 открывал файл в hex-редакторе для меня загадка.
Автор: GooZzzRB
Дата сообщения: 25.04.2011 17:29
Добрый день. Помогите в задаче.
Нужно написать скрипт на PowerShell, который проверяет на всех рабочих станциях домена, запущен ли заданный процесс и завершает его
Автор: 01MDM
Дата сообщения: 25.04.2011 19:31
GooZzzRB
Убить процесс(ы) calc.exe на локальном компьютере:

Код:
get-process 'calc' -ea "silentlycontinue" | stop-process
Автор: post4
Дата сообщения: 27.04.2011 13:49
приветствую
помогите плз решить проблему.
запускаю скрипт для переименования нескольких ПК в домене



Код:
function renameAndReboot([string]$computer, [string]$newname)
{
$comp = gwmi win32_computersystem -computer $computer
$os = gwmi win32_operatingsystem -computer $computer
$comp.Rename($newname)
$os.Reboot()}Import-Csv mylist3.csv
foreach ($entry in $list){ renameAndReboot($entry.oldname,$entry.newname)}
Автор: 01MDM
Дата сообщения: 27.04.2011 17:00
Попробуй:

Код:
$comp = invoke-command { gwmi win32_computersystem } -computer $computer
Автор: post4
Дата сообщения: 28.04.2011 05:36
01MDM


Код:
Invoke-Command : Недопустимое имя одного или нескольких компьютеров. Если необходимо передать URI, используйте параметр
"-ConnectionUri" или передайте URI-объекты вместо строк.
Автор: legat75
Дата сообщения: 01.05.2011 13:46
01MDM, temio Спасибо, но возможно немного непонятно оьяснил.. Hex-ом смотрел что именно выдирается из файла, судя по всему символы которые не могут присутствовать в имени файла, потому и не переименовывает.

Файл читается в переменную как

Код: (Get-Content -Path $file -TotalCount 1).Substring(4,26)).TrimEnd("")

Страницы: 123456789101112131415161718192021222324

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


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