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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11062 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Да всё тоже. Парсинг name`ов, привязанные к name обработчики событий, биндинг в коде…
такого бы, на 100% работающего…

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 23:00 10-09-2019
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выкачал отсюда видео-курс через youtube-dl+PS: https://info.varonis.com/thank-you/course/powershell
 

Код:
 
M1-1 - Introduction
M2-1 - Getting Started
M2-2 - Objects
M2-3 - Scripts vs. Modules
M3-1 - GUI vs. PowerShell
M3-2 - Getting Started
M3-3 - The Active Directory Module
M4-1 - The Active Directory Provider
M4-2 - PowerShell Functions
M4-3 - Working with Computer Accounts
M4-4 - Working with User Acccounts
M4-5 - Working with Groups
M4-6 - Filtering
M4-7 - Using the Search-AdAccount Command
M4-8 - Putting it All Together
M5-1 - Introduction
M5-2 - Parsing Command Line Output
M5-3 - Feature - DCDiag
M5-4 - Feature - Replication Monitoring
M5-5 - Feature - RODC Cached Passwords
M5-6 - PowerShell Remoting
M5-7 - Feature - Reading Critical AD Database
M6-1 - End - Course Wrapup
 

 
https://mega.nz/#!O49UiC4L!zbeL40S6Um1RH9EMp_dV8BOvnfXMUNZf35Nh06B3mX8

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 12:11 11-09-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересный скрипт
 
GUI таблица с авто-обновлением
 
    Статья: A Better PowerShell WPF Grid Viewer • The Lonely Administrator
    Скрипт: PSScriptTools/ConvertTo-WPFGrid.ps1 at master · jdhitsolutions/PSScriptTools · GitHub
    Репо: GitHub - jdhitsolutions/PSScriptTools: This PowerShell module contains a number of functions you might use to enhance your own functions and scripts. The Samples folder contains demonstration script files
    Пример использования (просто почистил, а то там в коде примера html ссыль):

Код:
Get-Volume | Where-Object {$_.DriveLetter -AND $_.DriveType -eq 'fixed'} | Select-object @{Name="Server";Expression={$_.PSComputername.toUpper()}},DriveLetter,HealthStatus,FileSystemLabel,@{Name="SizeGB";Expression={[int]($_.Size/1GB)}},@{Name="PctFree";Expression = {($_.sizeremaining/$_.size)*100}} | ConvertTo-WPFGrid -Title "DiskStatus" -Refresh -Timeout 60

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 19:27 11-09-2019 | Исправлено: iNNOKENTIY21, 19:31 11-09-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Так. Я-то думал, нужно просто связывание данных с формой, а тут, если я понял правильно, требуется автообновление... с этим сложнее, но не невозможно.
Но, давай по порядку:
 11-09-2019

Цитата:
Парсинг name`ов, привязанные к name обработчики событий, биндинг в коде…

Ничего плохого в парсинге name-ов нет, даже совсем наоборот, другого варианта и не вижу, ибо иначе форму проблематично связывать с кодом. Во вставке C#, также не просто запуск формы, а код, который получает данные и передает их в форму, но без обработчика события он делает это однократно, не динамически, так что...
 
То бишь этот пример, тоже не имеет автообновления:

Цитата:
такого бы, на 100% работающего…

в том смысле, что такого и не надо, в общем-то, ибо вот аналог:

Код:
gsv|ogv

 
 11-09-2019

Цитата:
Интересный скрипт  

Интересный, но перегружен кодом, поэтому достаточно непрост для понимания, что и как работает...
Тоже как-то ваял скрипт с формой, но там нужен бы прогресс-бар и использовались доп. пространства и связывались они через прокси... надо искать источники и сам код, чтобы вспомнить как.
Добавлено:


А вот, нашел источник, но сам код где-то затерялся... да и не помню точно, закончил ли я его тогда или так и остался онв сыром виде...


Вот, попроще код, где используется динамический ресурс, но с тем же таймером, запущенным в потоке:
clock.xaml
clock.ps1
Источник
- тут достаточно наглядно запускается таймер и происходит обновление формы. Может пригодится...
 
А вообще, вот здесь есть неплохое описание работы с ранспейсами.
А здесь, тоже хорошее описание из нескольких частей про XAML и Visual Studio, в том числе и про ранспейсы.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:32 11-09-2019 | Исправлено: YuS_2, 21:53 11-09-2019
iNNOKENTIY21



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

Цитата:
Ничего плохого в парсинге name-ов нет, даже совсем наоборот, другого варианта и не вижу, ибо иначе форму проблематично связывать с кодом.

Я и не оценивал, я лишь проявил любопытство к MVVM на PowerShell и показал другой вариант, без name-ов, а работает. Как раз связи формы с кодом и хотелось бы избежать. В этом суть.

Цитата:
Во вставке C#, также не просто запуск формы, а код, который получает данные и передает их в форму, но без обработчика события он делает это однократно, не динамически, так что...  

Что за вставка? Если про class ViewModel, то это родной PowerShell 5 с классами.
Реализация интерфейса INotifyPropertyChanged и должна обновлять. А для команд нужно еще реализовывать ICommand. Эти примеры и любопытно было бы увидеть.

Цитата:
в том смысле, что такого и не надо, в общем-то, ибо вот аналог:  

Вы смотрите на результат примера, что не правильно, это же не решаемая задача, а пример показывающий свойство в классе, который о форме ничего не знает.
Там одно только $Window.DataContext = $VM еще бы убрать…

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 22:24 11-09-2019
YuS_2



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

Цитата:
любопытство к MVVM на PowerShell и показал другой вариант

Да, вариант другой, но не по содержанию, а по форме, т.е. по синтаксису и оформлению. В любом случае, там есть код, который получает данные и передает их в форму, причем данные получает и передает в те же самые объекты.
 

Цитата:
Как раз связи формы с кодом и хотелось бы избежать. В этом суть.  

Ну, это вообще-то, невозможно, имхо. Описание формы, по сути, рисунок, а чтобы она работала, нужен код, так или иначе.
 

Цитата:
Что за вставка? Если про class ViewModel, то это родной PowerShell 5 с классами.

Да, конечно, но только "using" - директива C#

Цитата:
Директива using создает псевдоним для пространства имен или импортирует типы, определенные в других пространствах имен.

Т.е. в powershell это привнесли из C#/.Net, причем только уже в версии 5, как и классы... так что "родным", такой синтаксис назвать сложно, вот я и обзываю его "вставками" . Хотя, в принципе, это всего лишь, вопрос формулировок. В общем, принципиального значения, как обозвать этот прием, нет никакого.
 

Цитата:
смотрите на результат примера, что не правильно

Почему неправильно? Результат должен быть. И это, как раз, главное.
Другое дело, что результат может быть разным, ибо ogv - малоуправляемый командлет, вариант с формой более гибкий.
 

Цитата:
 пример показывающий свойство в классе, который о форме ничего не знает.

Да, сам класс, естественно, ничего не знает, но чтобы его задействовать, придется таки сообщить ему о форме.

Код:
$Window = [Windows.Markup.XamlReader]::Parse($xaml)

Разве нет?
Это всего лишь упрощение записей в коде (и соответственно, упрощается доступ к dotnet), по принципу функций...
 

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

И да, автообновления, как не было, так и в этом варианте его нет... т.е. потребуется другой способ, чтобы получить именно динамическую связь данных с формой, если она нужна без кнопок, событий и обработчиков этих событий.
Чтобы происходило обновление, всё также потребуются таймеры, тики или ранспейсы с проксями.
В общем, камень преткновения, всё тот же $VM. Сам по себе, автоматически, он не будет изменяться... потребуется внешнее воздействие.
 

Цитата:
Там одно только $Window.DataContext = $VM еще бы убрать…

Интересно было бы взглянуть, но, как и сказал выше, это вряд ли возможно.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:59 12-09-2019 | Исправлено: YuS_2, 10:07 12-09-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Вы бы уже почитали про MVVM что ли
 
$Window = [Windows.Markup.XamlReader]::Parse($xaml)
Это создатель формы вне класса vm, а класс vm о форме не знает. И ничего ему не сообщается.
Инициализирующий код создаёт форму, класс vm и связь между ними устанавливая .DataContext
Обновление данных это другое. Речь о форме, в которой обновляются данные автоматически, когда они обновляются в vm.
А уж как обновлять данные для vm это другая история.

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 19:30 12-09-2019
YuS_2



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

Цитата:
Вы бы уже почитали про MVVM что ли

да читал, но не проникся и преимуществ не понял...
И в общем-то, грани там с другими паттернами нечеткие (судя по описаниям), легко можно перепутать...
 

Цитата:
Это создатель формы вне класса vm, а класс vm о форме не знает. И ничего ему не сообщается.

Это понятно, есть V (xaml-форма), есть VM, а где M? Вот, что смущает... т.е. это:

Цитата:
Обновление данных это другое.

Как раз M, а его нет, т.е. эти данные статичны и на изменение внешних данных никак не реагируют...
И в принципе, по описанию структуры этого шаблона, формирование и обработка данных должна происходить именно в M, но никак не в VM... если я правильно понимаю.
 

Цитата:
Речь о форме, в которой обновляются данные автоматически, когда они обновляются в vm.

Ну, тут вопрос понятен... но понимания того, что это преимущество, нет, т.к. такой класс совсем не унифицирован, чему, как раз, должен служить MVVM...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:15 12-09-2019 | Исправлено: YuS_2, 21:36 12-09-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
В примере, данные (Model) это Get-Service.
$Services в конструкторе присваивается, через метод SetServices, в котором и реализуется оповещение об обновлении свойства.
В дальнейшем при обновлении данных, задавать их надо через этот SetServices метод , продолжая не знать о форме.
Обновление данных, Get-Service, надо писать конечно, тут и отдельные потоки нужны будут, дабы не зависала форма и выполнялась в своём потоке.
На пошике это наверно и не нужно, вот примеры и не находятся особо
 
Добавлено:
Я ссылки на игрушки приводил, что нашёл, где, что то реализовано, но до конца не разобрался
https://gist.github.com/nikonthethird

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 21:56 12-09-2019
YuS_2



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

Цитата:
В примере, данные (Model) это Get-Service.  
$Services в конструкторе присваивается, через метод SetServices, в котором и реализуется оповещение об обновлении свойства.

Вот я и говорю:

Цитата:
И в общем-то, грани там с другими паттернами нечеткие (судя по описаниям), легко можно перепутать...

Ведь, судя по схеме:

M не может формироваться внутри VM, должен быть четко отделенный блок получения данных, которые далее передаются в VM... или я чего-то недопонял?

Цитата:
Внимание — важно! Касательно проброса уведомлений из модели. Уведомлять об изменении суммы самостоятельно VM не может, т.к. она не должна знать, что именно измениться в модели, после вызова ее методов и измениться ли вообще. Модель для VM должна быть черным ящиком. Т.е. она должна передавать ввод и действия пользователя в модель и если в модели что-то изменилось (о чем должна ее уведомлять сама модель), то только тогда уведомлять далее View.


Цитата:
В дальнейшем при обновлении данных, задавать их надо через этот SetServices метод , продолжая не знать о форме.

Вот именно... а каким образом VM получает сообщение об обновлении? В коде этого нет... то бишь, где те четкие грани, которые разделяют код на части V-VM-M?

Цитата:
На пошике это наверно и не нужно, вот примеры и не находятся особо

Почему не нужно? И примеры есть, некоторые приводил, правда там, возможно, не MVVM, но их можно использовать...
К тому же, судя по схеме: команды на обновление данных, получаемые через UI (V), далее передаются в VM, затем в M и данные, собственно, обновляются, это вполне укладывается в схему...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 23:14 12-09-2019 | Исправлено: YuS_2, 23:19 12-09-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Я сразу писал, что любопытен MVVM. Понятно, что гуи делают, кому то нужны… Но мне то любопытно за MVVM.
 
VM есть свойство $Services, в примере одно одно в общем то куда присваивается объект для работы с данными М (инжектируется).
Через него с данными и работаем. М пишем c INotifyPropertyChanged
Есть готовая ObservableCollection наблюдаемая коллекция.

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 00:08 13-09-2019 | Исправлено: iNNOKENTIY21, 00:12 13-09-2019
farag



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

Код:
 
Function Get-Duration
{
    param ($TargetFolder)
    $shell = New-Object -ComObject Shell.Application
    $TotalDuration = [timespan]0
    Get-ChildItem -Path $TargetFolder | ForEach-Object -Process {
        $Folder = $shell.Namespace($_.DirectoryName)
        $File = $Folder.ParseName($_.Name)
        $Duration = $Folder.GetDetailsOf($File, 27)
        $TotalDuration = $TotalDuration + [timespan]$Duration
        [PSCustomObject] @{
            File = $_.Name
            Duration = $Duration
        }
    }
    $TotalDuration
}
(Get-Duration D:\Загрузки\111 | Sort-Object Duration | Out-String).Trim()
 

 
Где ошибка, что не считается общая продолжительность видео файлов в папке?

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 12:25 13-09-2019
YuS_2



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

Цитата:
Но мне то любопытно за MVVM.

Вот и я хочу разобраться...
Давай, попробуем на твоем примере (давай уже на ты, не первый день на форуме общаемся ).
Смотри, вот эта часть:

Код:
    $Services
 
    ViewModel() {
        $S = Get-Service
        $this.SetServices($S)
    }
 
    [void] SetServices($Services) {
        if ($this.Services -cne $Services) {
            $this.Services = $Services
            $this.NotifyPropertyChanged('Services')
        }
    }
 

- допустим, это модель
1. Здесь есть получение данных и их передача в VM.
2. Здесь есть передача информации об обновлении данных в VM
2. Здесь нет приемника проброшенных команд от VM на получение/обновление данных.
То бишь, либо это неполная модель, либо я неправильно определил что именно относится к ней.
Кстати, зачем здесь отдельной строкой $Services, что именно выполняется в ней?
Вынести бы получение данных за рамки класса...
В общем, я запутался в этих классах... что и куда относить, где свойства, где методы, где события, а где обработчики событий...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 15:02 13-09-2019 | Исправлено: YuS_2, 15:04 13-09-2019
YuS_2



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

Цитата:
не считается общая продолжительность видео файлов в папке?

почему не считается? Все суммируется... другое дело, что нет вывода...

Код:
Function Get-Duration
{
    param ($TargetFolder)
    $shell = New-Object -ComObject Shell.Application
    $TotalDuration = [timespan]0
    Get-ChildItem -Path $TargetFolder | ForEach-Object -Process {
        $Folder = $shell.Namespace($_.DirectoryName)
        $File = $Folder.ParseName($_.Name)
        $Duration = [timespan]$Folder.GetDetailsOf($File, 27)
        $TotalDuration += $Duration
        [PSCustomObject] @{
            File = $_.Name
            Duration = $Duration
        }
    }
    if ($TotalDuration){write-host "Всего: $TotalDuration" -for red}
}
(Get-Duration D:\Загрузки\111 | Sort-Object Duration | Out-String).Trim()

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 20:43 13-09-2019 | Исправлено: YuS_2, 20:45 13-09-2019
iNNOKENTIY21



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

Цитата:
В общем, я запутался в этих классах... что и куда относить, где свойства, где методы, где события, а где обработчики событий...

И не ты один, нас много

Цитата:
ViewModel() {
        $S = Get-Service
        $this.SetServices($S)
    }

это конструктор, срабатывает при создании класса, когда зовём new(); new-object;
и да, тут получаются данные в свойство $Services, к которому биндиться список в форме, для этого это свойство.
$Services объект и через него получаем доступ к свойствам, методам наших данных
    PS>$Services = Get-Service
    PS>$Services. #CTRL+Space список по ctrl+spsce
    PS>$Services[0]. #CTRL+Space список по ctrl+spsce
SetServices это сеттер в общем то. он призван изменять свойство $Services и информировать об этом. Форма-список получает эту инфу.
можно добавить (перегрузить) конструктор с приёмом параметров

Цитата:
 ViewModel($S) {
        $this.SetServices($S)
    }

и создавать в инициализирующем коде, получив данные вне vm
$Services = Get-Service
$vm = [ViewModel]::new($Services)
 
В примере данные не изменяются, только получаются.
Вот и хотелось увидеть пример где работает и всё, что пока нашлось, не захватывает
Кто нибудь подключился бы из более грамотных, эхъ
 
Добавлено:

Цитата:
Function Get-Duration
Хорошая штука. Только у меня ошибки сыпятся, аа помогите для вложенной папки бы посчитать?
Кстати, как на инглиш сериалы, я обозвал папку Episodes?

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 21:21 13-09-2019 | Исправлено: iNNOKENTIY21, 21:56 13-09-2019
YuS_2



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

Цитата:
можно добавить (перегрузить) конструктор с приёмом параметров

Вот, это уже ближе к делу.

Цитата:
В примере данные не изменяются, только получаются.

Ну, можно организовать изменение. Типа:
MVVM
Только в тиках таймера, надо добавить любое условие на изменение данных, чтобы они не обновлялись на каждый шаг.
 
Добавлено:
iNNOKENTIY21

Цитата:
для вложенной папки бы посчитать?

Хмм... а в шапке, скрипты сохраняем зачем?

Цитата:
 Получение детализированной информации из файлов.  

там, конечно, не прям то, что хочется, но легким движением, брюки превращаются... брюки превращаются... в элегантные шорты.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 23:36 13-09-2019 | Исправлено: YuS_2, 23:56 13-09-2019
iNNOKENTIY21



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

Цитата:
MVVM

Не. Таймер в vm, там с ним работать, стоп/старт/интервал… а в форме кнопочки/галочки, только не спрашивай как
На практике, повторюсь, оно поди и не нужно на пошике.
 
Что бы превратить брюки… примерить бы их Я не могу там прочитать код.
Буквы - переменные и экономия пробелов, пока расшифрую, быстрее переписать будет или подождать готовое.
Пока farag допилит
 

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 22:28 14-09-2019
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Работает. Спасибо. Но почему не выводилось? Заметил, что обязательно нужны кавычки вокруг переменной?

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 22:49 14-09-2019
YuS_2



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

Цитата:
Таймер в vm, там с ним работать, стоп/старт/интервал…

Таймер здесь работает как приемник от модели, на событие изменения данных. Т.е. в тиках вместо $true, необходимо добавить проверку события изменения данных... как только True, то следует команда обновления модели, получение данных в $vm и далее передача в интерфейс. Вроде укладывается в схему...
 

Цитата:
а в форме кнопочки/галочки, только не спрашивай как

В форме кнопочки, галочки и прочее (события UI) - запросто. В чем проблема-то?
Если строго по схеме, оно так и должно быть.
У формы вообще много обработчиков событий:

Код:
$window|gm add* -m method -force

и у каждого элемента тоже...  
 

Цитата:
Я не могу там прочитать код.  
Буквы - переменные и экономия пробелов, пока расшифрую, быстрее переписать будет или подождать готовое.

да чего там расшифровывать:
Две функции.  
Одна разбирает $item на запчасти (если путь к корневому каталогу - создает коллекцию объектов-файлов из каталога, если путь к файлу - создает объект-файл).  

Код:
testpth $item

Можно создать выборку каталогов с абсолютными путями и подавать функции на вход.

Код:
dir $path -dir -rec|%{testpth $_.fullname}|%{info $_ 27}

Вторая - непосредственно, получение данных в цикле (цикл можно вообще исключить, заменив получением единственного свойства) и создание кастомных объектов с уникальными ID файла и с привязанными к ID файла ID параметров
Вызов со счетчиком, на получение коллекции свойств:

Код:
testpth $item|%{$n=1}{info $_ $n;$n++}

- на выходе testpth, может быть и коллекция и единственный файл.
 
Вызов на получение конкретного свойства:
чуть выше код уже есть с таким вызовом...
 
Далее свойства просто группируются и выводятся в отдельные текстовые файлы.
 

Цитата:
Пока farag допилит

Ну, чтобы ошибки не сыпались, при наличии подкаталогов, необходимо в функции указать для Get-ChildItem, что выбирать надо только файлы (см. ниже). А для подсчета общей продолжительности, предварительно формировать коллекцию каталогов, т.е. рекурсивно выбрать все каталоги и с полным путем подавать на вход функции, по одному... в конце просуммировать Duration, т.е. внутри функции совсем необязательно считать, если не требуется отдельно продолжительность по каждому каталогу.
 
 
farag

Цитата:
Но почему не выводилось?

Видимо, потому, что формируется коллекция кастомных объектов и именно она попадает в вывод функции, а переменная игнорируется, т.к. тип объекта другой - надо разбирать как работают функции вообще...
write-host просто выводит значение непосредственно в консоль, минуя автовывод функции.
 

Цитата:
Заметил, что обязательно нужны кавычки вокруг переменной?

Нет, в данном случае кавычки необязательны, вклеил их на автопилоте
Вообще, можно ещё так обойти этот момент:

Код:
Function Get-Duration {
    param ($TargetFolder)
    $shell = New-Object -ComObject Shell.Application
    $script:TotalDuration = [timespan]0
    Get-ChildItem -Path $TargetFolder -file | ForEach-Object -Process {
        $Folder = $shell.Namespace($_.DirectoryName)
        $File = $Folder.ParseName($_.Name)
        $Duration = [timespan]$Folder.GetDetailsOf($File, 27)
        $script:TotalDuration += $Duration
        [PSCustomObject] @{
            File = $_.Name
            Duration = $Duration
        }
    }
}
 
(Get-Duration D:\Загрузки\111 | Sort-Object Duration | Out-String).Trim()
$TotalDuration

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 01:16 15-09-2019 | Исправлено: YuS_2, 01:28 15-09-2019
iNNOKENTIY21



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

Цитата:
Вроде укладывается в схему...  

Не, не укладывается.
В коде инициализации не должно быть все этого.
Логика вся в vm и обработка событий тоже.
В реалиях, еще класс настроек понадобиться, где настройка автообновление=да/нет и при нет, таймер вообще не нужно создавать. А события и команды точно так же биндятся в свойства vm. Но нужно реализовывать ICommand…
 

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 11:11 15-09-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru