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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 226 227 228 229 230

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

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

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



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
Зря убрал всё под кат
Это лучше, чем 99% псевдоповершела в гугле
Если бы я увидел такое несколько лет назад, это сэкономило бы мне годы.

 
Разве что для новичков надо знать о существовании Sort-Object и т.п.: дотнет изучать необязательно.
Автор упражнений наверное имел в виду ручную реализацию сортировки, но нафиг.
 
 
Добавлено:
 
В профиль такое:
 

Код:

$script = {
    $Items = & $executeParams $Params
    & $processItems
}
 

 
 
Вызывать так:
 

Код:

$Params = @{
   Path        = "$env:SystemRoot\System32"
   File        = $true
   Force       = $true
   ErrorAction = "SilentlyContinue"
}
 
$executeParams = {
    Get-ChildItem @Params
    [array]::sort($Items.ForEach('Length'), $Items)
}
 
$processItems = {
    @($Items[-10..-1].ForEach{
       [PSCustomObject] @{
           Name       = $_.Name
           "Size, MB" = [math]::round($_.Length/1MB, 2)
       }
    })
}
 
& $script

 
 
Добавлено:
 
А теперь вспомним синтаксис
& C:\scripts\savedScript.ps1
 
То есть: скрипты повершел бывают сохранённые и несохранённые скриптблоки
Задача пользователя определить несколько переменных, нужных скрипту который он намерен вызвать.
 
Совсем не то, что думают по аналогии с cmd
 
Над отладкой каждого определения придётся потрудиться - но:
     есть слона по частям проще, чем целиком,  
     можно попросить помощи, и  
     можно поместить что-то в профиль для повторного использования
 
 
Добавлено:
Понятно теперь, почему в PS два разных парсера?
Именно для того, чтобы можно было не думать о кавычках, прямо в консоли дёргая сохранённый скрипт
 
Вызов функции и запуск скрипта - разные вещи, со своими плюсами и минусами каждая.

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 10:03 14-01-2020 | Исправлено: KLASS, 09:46 15-01-2020
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT
Это замечание, отвечать на него здесь не советую.
Итак, последнее китайское.
Все, что от тебя требуется (если считаешь, по другому, то мне это не интересно) это ответы\вопросы в стиле:
==
А вот так будет быстрее
пример
А вот так будет короче
пример
А я бы поступил так
пример
А что бы сказали на это
пример
==
Твои переживания и лирика в теме не уместны. Потому выше зачеркнул, а ты молча прими к сведению, иначе снова не оставляешь мне выбора.
И на этом все.

Всего записей: 11448 | Зарегистр. 12-10-2001 | Отправлено: 09:51 15-01-2020
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PowerShell-модуль AutoRuns для отслеживания всего-всего, что загружается
https://github.com/p0w3rsh3ll/AutoRuns

Всего записей: 2522 | Зарегистр. 27-07-2009 | Отправлено: 09:18 16-01-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И о5 буквы, образа с дисками вдоль дороги… Жесть определения букв дисков. Это полиморфизм у них такой?
Get-DiskImageVolume
Трудности с названием функции, наверное потому, что нарушен «принцип единой ответсвенности».
Как именовать функцию? / Функцию, разделять или не разделять, вот  в чём вопрос Ну и по традиции, как улучшить код?


Добавлено:
Наступил! О5! Снова!
 
При загрузке удалённого реестра и внесении изменений в него с помощью New-Item, в дальнейшем может возникать ошибка доступа, при выгрузке, этого, удалённого реестра.
Код:
# Загрузка удалённого реестра
reg load "HKLM\MountedRegistry" "V:\Windows\System32\config\SYSTEM"

# Путь, который необходимо создать
$Path = "HKLM:\MountedRegistry\Software\Policies\Microsoft\Windows\WindowsUpdate"

# Внесение изменений
#$null = New-Item -Path $Path -Force

# Борьба с ошибкой, при выполнении: reg unload - access denied!
$NewRegistryPath = New-Item -Path $Path -Force
$NewRegistryPath.Handle.Close()
#[gc]::Collect()

# Выгрузка удалённого реестра
reg unload "HKLM\MountedRegistry"

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 09:03 18-01-2020 | Исправлено: iNNOKENTIY21, 10:02 18-01-2020
LevT



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

Цитата:
 
   .INPUTS
   [System.IO.FileInfo] с информацией о файле образа диска
   Можно указать строку [string] с полным именем файла образа диска
 

 
Вот это плохо, судя по компьютерной науке и практике команд разработки
Плохо сливать в один параметр данные разных типов и отдавать выбор на откуп юзеру во время исполнения.
 
Правильно тут делать разные ParameterSet или выбрать что-то одно, доверив юзеру сделать | Get-Item
      или (что хуже) два необязательных параметра.
 
Чтобы хватало взгляда на сигнатуру вызова
 
 
Добавлено:
iNNOKENTIY21
 
И загляни уже сюда

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 10:22 18-01-2020 | Исправлено: LevT, 10:25 18-01-2020
YuS_2



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

Цитата:
Жесть  определения букв дисков. Это полиморфизм такой?

А что там с определением букв? DriveLetter
 

Цитата:
 Ну и по традиции, как улучшить код?

А почему только 1 и 3 в переключателе? У меня есть, например:

Код:
StorageType           : 2

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



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

Цитата:
А что там с определением букв? DriveLetter  

Для iso достаточно get-volume, а для vhdx уже не достаточно. А хотелось бы одинаково. То же с mount. Приходится вот городить.

Цитата:
А почему только 1 и 3 в переключателе? У меня есть, например:

А не всё сразу и только для образов. А что там, за 2 скрывается, какой образ?
 
 
LevT

Цитата:
Плохо сливать в один параметр данные разных типов и отдавать выбор на откуп юзеру во время исполнения.  

Там один тип.

Цитата:
И загляни уж

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

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 11:25 18-01-2020
LevT



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

Цитата:
Трудности с названием функции, наверное потому, что нарушен «принцип единой ответсвенности».

 
Если точнее, то нарушен принцип разделения команд и запросов  
или что то же самое, функция нечистая (с побочным эффектом монтирования образов)
 
Или ты как раз хочешь разрулить всем томам разные буквы?
 
А если как у меня дифференциальные диски растут из одного предка?
Глупо ж разные буквы им давать
 
 
Добавлено:

Цитата:
Всё равно же всё писать, код действующий, только с калбаком каким то,

 
Как у меня в результате сформулировалось, это фреймворк.
Цель которого - убрать правильно написанную "трубу" в библиотечный скрипт
 
Остаётся написать три функции - и делать это могут параллельно разные умельцы, практически не включая мозги.
 
 

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 11:46 18-01-2020 | Исправлено: LevT, 11:53 18-01-2020
iNNOKENTIY21



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

Цитата:
с побочным эффектом монтирования образов

Вот и делить\не делить функцию на две…
Функция вылезла, так, как в одном скрипте монтировались и iso и vhdx и нужна их буква.
А тут одним выстрелом получаю букву + если просто монтировать iso, к примеру, то их может на создаваться…
А тут вернёт букву, уже имеющегося виртуального привода с этим образом, если есть такой или создаст.

Цитата:
А если как у меня дифференциальные диски растут из одного предка?  

Вот, это вообще не учитывал, багофича

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 13:03 18-01-2020
YuS_2



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

Цитата:
А что там, за 2 скрывается, какой образ?

о море-море...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:09 18-01-2020
LevT



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

Цитата:
Вот и делить\не делить функцию на две…  

 
Конечно, делить. На
 
команды (меняют состояние системы) и  
запросы (возвращают какие-то данные)

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 13:32 18-01-2020 | Исправлено: LevT, 13:36 18-01-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Море вернулось
Это же не образы и не Get-DiskImage.
 


Добавлено:
LevT

Цитата:
Конечно, делить. На

Ох, не знай. Сферический Фэн-шуй в вакууме гласит дели.
А скриптовая необходимость, говорит да ну его. Придётся писать в вызывающем коде, что-то типа:

Код:
function IsMounted ($DiskImagePath) {}

function Get-DriveLetter ($DiskImagePath) {}

function Mount-DiskImage ($DiskImagePath) {}

if (IsMounted) {
   $DriveLetter = Get-DriveLetter -DiskImagePath $DiskImagePath
} else {
   $DriveLetter = Mount-DiskImage -DiskImagePath $DiskImagePath | Get-DriveLetter
}

if (-not ($DriveLetter)) {}


половина кода готова

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 13:53 18-01-2020 | Исправлено: iNNOKENTIY21, 14:33 18-01-2020
YuS_2



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

Цитата:
Это же не образы и не Get-DiskImage.

А что же это?
"DOS Hard Disk.vhd"


Код:
 
Attached          : True
BlockSize         : 2097152
DevicePath        : \\.\PHYSICALDRIVE1
FileSize          : 138449408
ImagePath         : d:\TEMPWORK\!!!VM\DOS_WIN311\DOS Hard Disk.vhd
LogicalSectorSize : 512
Number            : 1
Size              : 536870912
StorageType       : 2
PSComputerName    :

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:59 18-01-2020 | Исправлено: YuS_2, 15:04 18-01-2020
LevT



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

Цитата:
Ох, не знай. Сферический Фэн-шуй в вакууме гласит дели.  
А скриптовая необходимость, говорит да ну его. Придётся писать в вызывающем коде, что-то типа:  
 

 
Вызывающий код - является тем самым скриптом, в котором инкапсулируется логика твоего алгоритма.
 
Потому ему место в переменной, и
 
& $script  $DiskImagePath
 
или
 
$script.Invoke($DiskImagePath)
 
 
Попозже представлю свой вариант
 

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 15:12 18-01-2020 | Исправлено: LevT, 16:24 18-01-2020
iNNOKENTIY21



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

Цитата:
А что же это?

Ясно, что get-disk покажет и виртуальные. Но мой скрипт работает с get-diskimage.
Простой vhd значит-с за двоечкой скрывался
Собственно, оно больше и не умеет: Specifies the type of a disk image: ISO, VHD, VHDx, or Unknown. If the StorageType parameter is not specified or the Unknown type is provided, the storage type is determined by file extension.

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 15:46 18-01-2020
YuS_2



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

Цитата:
Но мой скрипт работает с get-diskimage.

 18-01-2020

Код:
3 { $DiskImageVolume = $DiskImage | Get-Disk | Get-Partition | Get-Volume }

?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 16:26 18-01-2020 | Исправлено: YuS_2, 16:27 18-01-2020
iNNOKENTIY21



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

Цитата:
?

A: Ну, с $DiskImage и работает.


Обновил немного Get-DiskImageVolume

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 16:36 18-01-2020
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
Набросал НЕ ОТЛАЖИВАЛ!
(вдруг опять не понравится)
 
 

Код:

   [CmdletBinding()]  
   [OutputType([Microsoft.Management.Infrastructure.CimInstance])]  
   param (  
       # Файл образа диска  
       [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]  
       [ValidateNotNullOrEmpty()]  
       [ValidateScript({Test-Path -Path $PSItem -PathType Leaf})]  
       [Alias("FullName")]  
       [IO.FileInfo]  
       $DiskImageFile  
   )  
 
    begin {  
        $VHDGet = {Param ($DiskImage) {
            $DiskImage | Get-Disk | Get-Partition | Get-Volume
            }}  
 
        $VHDMount = {Param ($DiskImageFile) {
            Mount-DiskImage -ImagePath $DiskImageFile |  
                Get-Disk |  
                    Get-Partition |  
                        Get-Volume  
            }}  
 
        $storageTypeSwitcher = {Param ($imageProcessor, $vhdOperation) {
            switch ($StorageType) {
                1 { & $imageProcessor}
                2..3 {& $vhdOperation}
                default { throw "Неизвестный тип хранения образа диска" }  
            }
        }}
    }  
 
   process {  
#       как вариант убрать в переменную и основной скрипт
#       $DiskImageVolume = $script.Invoke({Get-DiskImage -ImagePath $DiskImageFile})    
 
        $DiskImage = Get-DiskImage -ImagePath $DiskImageFile  
        $StorageType = $DiskImage.StorageType
         
        $DiskImageVolume =  
            if ($DiskImage.Attached) {
                & $storageTypeSwitcher {$DiskImage | Get-Volume}  $VHDGet
            } else {
                & $storageTypeSwitcher {Mount-DiskImage -ImagePath $DiskImageFile | Get-Volume}  $VHDMount
            }
 
        if (-not (Test-Path -Path ($DiskImageVolume.DriveLetter + ':\'))) {  
            throw "Не удалось смонтировать: $DiskImageFile"  
        }  
 
        $DiskImageVolume  
   }  

 
 
Твой вариант хорош тем, что хорошо читается.
Но мы же уже высянили, что внутри повторных инструментов может быть сколь угодно замороченный код.
 
Мой вариант читать-писать сложнее, но и поддерживать проще, так как убрано дублирование кода (принцип DRY)
 
 
Добавлено:
 
При отладке может пригодиться метод
.GetNewClosure()

Всего записей: 17727 | Зарегистр. 14-10-2001 | Отправлено: 17:28 18-01-2020 | Исправлено: LevT, 11:51 19-01-2020
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
У меня какой-то диссонанс... что не так-то?
Я лишь обратил внимание, что помимо StorageType : 1 и 3, существует ещё и 2. Привел пример этого, который у меня в наличии.
Ты говоришь:

Цитата:
Это же не образы и не Get-DiskImage.

Я спросил: что это, если не образы (в смысле, что это образ именно) и привел скриншот из VirtualBox плюс вывод от:

Код:
get-diskimage -im "d:\TEMPWORK\!!!VM\DOS_WIN311\DOS Hard Disk.vhd"

На что ты говоришь:

Цитата:
Но мой скрипт работает с get-diskimage.

??
Чего я не так понял или иначе: где загвоздка?
Это ведь образ и он вполне работает с get-diskimage... почему противопоставление?

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 20:06 18-01-2020
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Цитата:
У меня какой-то диссонанс... что не так-то?

Не так, было, что на вопрос:
iNNOKENTIY21: А что там, за 2 скрывается, какой образ?
YuS_2: показывает вывод команды get-disk
iNNOKENTIY21: Это же не образы и не Get-DiskImage.
YuS_2: А что же это?
YuS_2: показывает вывод команды Get-DiskImage.
iNNOKENTIY21: Ясно, что get-disk покажет и виртуальные. Но мой скрипт работает с get-diskimage.
iNNOKENTIY21: Простой vhd значит-с за двоечкой скрывался
вопрос исчерпан
Но…
YuS_2: цитата Но мой скрипт работает с get-diskimage. …3 { $DiskImageVolume = $DiskImage…
iNNOKENTIY21: Ну, с $DiskImage и работает.


 
YuS_2
Цитата:
Чего я не так понял или иначе: где загвоздка?

В сопоставлении вопрос-ответ. Выделил жирным и курсивом.
YuS_2
Цитата:
Это ведь образ и он вполне работает с get-diskimage... почему противопоставление?

Дак, это, нету противопоставления с get-diskimage, был у тебя лишний пост с get-disk, только и всего

Всего записей: 3640 | Зарегистр. 16-08-2012 | Отправлено: 08:30 19-01-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 226 227 228 229 230

Компьютерный форум 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