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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

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



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

Цитата:
И как лучше?  

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

Всего записей: 2184 | Зарегистр. 17-11-2005 | Отправлено: 21:52 18-10-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Без строгой типизации полиморфизм накрывается медным тазом а нафига тогда баян
А принудительно в цикле через ToSTring, нельзя ToSTring переопределить… костыль еще тот, но рабочий

Код:
class Edition {
    [string] $Name
    [int] $PageCount
 
    [void] Print() {
        Write-Host ("{0} ({1} стр.)" -f $this.Name, $this.PageCount)
    }
}
 
class Magazine : Edition {
    [string] $Periodic
 
    [void] Print() {
        Write-Host ("[{0}] {1} ({2} стр.)" -f $this.Periodic, $this.Name, $this.PageCount)
    }
}
 
class Book : Edition {
    [string] $Author
 
    [void] Print() {
        Write-Host ("[{0}] {1} ({2} стр.)" -f $this.Author, $this.Name, $this.PageCount)
    }
}
 
class Publishing {
    [Edition[]] $Editions = @()
 
    [void] Add([Edition] $Edition) {
        $this.Editions += $Edition
    }
 
    [void] Save([string] $Path) {
        $this.Editions | Export-Clixml -LiteralPath $Path -Force
    }
 
    [void] Load([string] $Path) {
        $this.Editions = Import-Clixml $Path | ForEach-Object { $_ -as [type]($_.ToString()) }
    }
}
 
$Publishing = [Publishing]::new()
$Path = "$PSScriptRoot\Editions.xml"
 
$SportMagazine = [Magazine]@{
    Periodic  = "Weekly"
    Name      = "Sport Magaszine"
    PageCount = 100
}
 
$ВойнаИМир = [book]@{
    Name      = "Война и мир"
    PageCount = 100500
    Author    = "Лев Николаевич Толстой"
}
 
$Publishing.Add($SportMagazine)
$Publishing.Add($ВойнаИМир)
 
$Publishing.Editions | Format-Table
 
$Publishing.Save($Path)
 
$Publishing.Editions = @()
 
$Publishing.Load($Path)
$Publishing.Editions.Print()

Всего записей: 3505 | Зарегистр. 16-08-2012 | Отправлено: 22:13 18-10-2019
YuS_2



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

Цитата:
А принудительно в цикле через ToSTring, нельзя ToSTring переопределить… костыль еще тот, но рабочий

Почему костыль?
В данном случае, через tostring() задается именно тип конвертируемых данных из файла, для которых не существует автопреобразования... если уж требуется строгая типизация, то это самое оно, а не костыль. Ну, не предусмотрели разрабы изначально, что такое понадобится... классы ведь появились в 5 версии только...
Возможно, в PS Core это уже облагородили - проверь-посмотри...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 05:01 19-10-2019
iNNOKENTIY21



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

Цитата:
Почему костыль?

Потому что серилизация подразумевает и десириализацию.
В файле Editions.xml информация о типе есть. И делать еще цикл… это костыль.

Всего записей: 3505 | Зарегистр. 16-08-2012 | Отправлено: 10:07 19-10-2019
YuS_2



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

Цитата:
Потому что серилизация подразумевает и десириализацию.

Оно, конечно, так, но:

Цитата:
XML serialization serializes only the public fields and property values of an object into an XML stream. XML serialization does not include type information. For example, if you have a Book object that exists in the Library namespace, there is no guarantee that it is deserialized into an object of the same type.

такшта... увы и ах.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Я уже опечалился по этому поводу на прошлой странице
 
Раз такая пьянка… json уж замутить

Код:
[void] SaveToJson([string] $Path) {
        [PSCustomObject[]] $Result = @()
 
        foreach ($Item in $this.Editions) {
            $Result += @{
                Type    = [string] $Item.GetType()
                Edition = $Item
            }
        }
 
        $Result | ConvertTo-Json | Out-File -LiteralPath $Path
    }
 
    [void] LoadFromJson([string] $Path) {
        [Edition[]] $Result = @()
        $Content = Get-Content -LiteralPath $Path
        $Json = $Content | ConvertFrom-Json
 
        foreach ($Item in $Json) {
            $Result += $Item.Edition -as ($item.Type)
        }
 
        $this.Editions = $Result
    }

 
Файл Sample.ps1 целиком

Всего записей: 3505 | Зарегистр. 16-08-2012 | Отправлено: 13:18 19-10-2019 | Исправлено: iNNOKENTIY21, 13:41 19-10-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересную штукенцию нарыл.
Директива using module требует путь, переменные, подстановочные не катят. А если заранее неизвестно какие модули будут…
using module поддиректории:

Код:
Param ([string[]] $Modules = (Get-ChildItem .\addons\*.psm1).FullName)
 
$ScriptBody = foreach ($Module in $Modules) { "using module $Module`n" }
$Script = [ScriptBlock]::Create($ScriptBody)
. $Script
 
# далее ваш код

Не только для этого, конечно. В $ScriptBody можно еще чего нибудь засунуть
 
источник: Using Statement: Import PowerShell Classes from Modules - SAPIEN Information Center | SAPIEN Information Center

Всего записей: 3505 | Зарегистр. 16-08-2012 | Отправлено: 21:43 19-10-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По следам вчерашних изысканий.
PowerShell 5.1 с классами.
Написал скелет системки с аддонами, только скелет, чисто затестировать идею, работает или как

 
Кому интересно: https://www.upload.ee/files/10621120/Get-Latest.zip.html
запускаемый файл Sample.ps1
 
Критика, идеи? Кто в ООП шарит, советы?

Всего записей: 3505 | Зарегистр. 16-08-2012 | Отправлено: 21:21 20-10-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может этот скрипт заинтересует (скорее всего win-8.1+, но это не точно).
Создание теневой копии, копирование из неё, удаление теневой копии.
Copy-FromShadowCopy.ps1
 
Пример использования:

Код:
PS> .\Copy-FromShadowCopy.ps1 -Source 'C:\Users\<Укажите Пользователя>\AppData\Roaming\Mozilla\' -Destination F:\Back\

 
Что то бы выводить в консоль? Прогресс бар? Как?

Всего записей: 3505 | Зарегистр. 16-08-2012 | Отправлено: 19:37 21-10-2019 | Исправлено: iNNOKENTIY21, 19:42 21-10-2019
YuS_2



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

Цитата:
Что то бы выводить в консоль? Прогресс бар? Как?

Не всё однозначно с прогресс-баром для копирования... ссылка

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:56 22-10-2019
iNNOKENTIY21



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

Цитата:
Не всё однозначно с прогресс-баром для копирования...

Как всё сложно то. Отговорил
 
Надо в Copy-FromShadowCopy.ps1 принимать массив наверно, дабы за одно создание теневой копии, копировать из нескольких путей?
Тогда и $Destination разные… массив хэш таблиц?
Код:
=  
@(
  @{
    $Source =
    $Destination =
  }
)
А если надо и в одну и в разные $Source / $Destination…?

Всего записей: 3505 | Зарегистр. 16-08-2012 | Отправлено: 11:55 22-10-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся с задачей о необходимости напоминания о событии через каждые три рабочих дня. Среди "напоминалок" не нашел. Написал такой скрипт, который закинул в автозагрузку:

Код:
@echo off
rem создаем начальные переменные и загоняем их в файл
rem set data_event=%date:~-4%.%date:~3,2%.%date:~,2%
rem set number_count=1
rem set number_count_event=3
rem set>dump.tmp
 
rem считываем переменные из файла
for /f "usebackq tokens=1* delims==" %%A in (c:\temp\dump.tmp) do (set "%%A=%%B")
rem Получаем текущую дату
set data_event_temp=%date:~-4%.%date:~3,2%.%date:~,2%
rem Сравниваем переменную события и текущую, если равны то выходим без сохранения
if /i %data_event% EQU %data_event_temp% exit
rem т.к. дата события в файле не равна текущей, то изменяем ее на текущую
set data_event=%data_event_temp%
rem т.к. дата события была не равна текущей, то запускаем проверку на появление события
rem задаем временную переменную события
set /a number_count_temp=%number_count%+1
rem если переменные не равны, то увеличиваем значение счетчика number_count,
if %number_count_event% NEQ %number_count_temp% (
    echo Сегодня нет события
    set number_count=%number_count_temp%
    ) else (
    echo Сегодня событие
    msg * Необходимый день наступил
    set number_count=0
    )
set>dump.tmp
exit

 
Первой частью, что полностью заремлена, формирую файл для хранения переменных между запусками. data_event - дата опроса последнего файла, number_count счетчик дней, а number_count-event через какое количество дней необходимо сообщить о событии.
В принципе все устраивает, но при использовании set>dump.tmp в файл dump.tmp, попадает много лишней информации. Можно ли как-нибудь оптимизировать данный скрипт, чтобы в файл писались только нужные переменные? Или решить задачу другим способом?

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:56 22-10-2019 | Исправлено: Falcon99, 11:57 22-10-2019
YuS_2



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

Цитата:
Как всё сложно то

На самом деле, не так страшен черт, как его малюют... не знаю как с теневым копированием, а так либо robocopy, либо служба bits, вполне может справиться с прогрессбаром
 
Falcon99

Цитата:
Столкнулся с задачей о необходимости напоминания о событии через каждые три рабочих дня. Среди "напоминалок" не нашел.  

А планировщик не поможет, разве?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:52 22-10-2019
Falcon99



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

Цитата:
А планировщик не поможет, разве?

 
YuS_2, так он тоже не знает про рабочие дни, только календарные.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 13:58 22-10-2019
YuS_2



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

Цитата:
так он тоже не знает про рабочие дни

Да всё он знает, только пинка ему надо дать

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:30 22-10-2019
Falcon99



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

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 14:33 22-10-2019
YuS_2



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

Цитата:
Ну во первых и здесь не вижу как настроить через 3 рабочих дня настроить напоминание

Так рабочие дни у всех разные, у кого-то и сутки через трое, а у кого-то вообще вахты
В том смысле, что в скрипте тоже не вижу учета "рабочих" дней. Как будем их определять?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:57 22-10-2019
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2, а все просто, раз включил компьютер и скрипт отработал, значит рабочий )
Ну а если запуск произошел не в рабочий день, то ручками корректируем файл dump.tmp.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 15:22 22-10-2019
YuS_2



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

Цитата:
а все просто, раз включил компьютер и скрипт отработал, значит рабочий

Железная логика!
Полуавтомат, так сказать...
Ну, тогда, если устраивает работа скрипта:

Цитата:
Можно ли как-нибудь оптимизировать данный скрипт, чтобы в файл писались только нужные переменные?  

Можно переменным присваивать одинаковый префикс и тогда, при сохранении, получите только те переменные, которые необходимы. Например:

Код:
set pre_var1=1
set pre_abc=2
set pre_var3=3
 
set pre

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:20 22-10-2019
Falcon99



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

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

 
Спасибо большое. Проверил, получил именно то что хотелось.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 08:37 23-10-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