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

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

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



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

Код:
$src = gi -lit ".\Metro\UPMetroSkin-master\Unofficial 4.x Patch\Main Files [Install First]"
$dst = ".\Metro\metro-for-steam-4.4"
 
dir -lit $src.fullname -incl "*.*" -rec -file|mi -d {
    if (!(test-path -lit ($d = split-path $_.fullname.replace("$($src.fullname)",$dst)))){
        md $d -force
    } else {$d}
} -force

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 22:25 19-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS 2
https://pastebin.com/SrJrTSPU
 
Попытался сделать общую функцию, but failed. Орет на

Код:
 
Move-Item : Не удается привязать аргумент к параметру "LiteralPath", так как он имеет значение NULL.
строка:62 знак:28
+     Move-Item -LiteralPath $Source.FullName -Destination $fdst -Force
+                            ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: ( [Move-Item], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCommand
 
Get-ChildItem : Не удается привязать аргумент к параметру "LiteralPath", так как он имеет значение NULL.
строка:68 знак:32
+     Get-ChildItem -LiteralPath $_.FullName -Recurse -File -Force | Mo ...
+                                ~~~~~~~~~~~
    + CategoryInfo          : InvalidData: ( [Get-ChildItem], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetChildItemCommand
 

На номера строк смотреть не надо.
И еще заметил:  

Код:
 
$split = [regex]::escape([io.path]::getfilename($a))
 

не получается заменить на

Код:
 
$split = (Get-Item -LiteralPath $a).Name
 

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 23:04 19-01-2021 | Исправлено: farag, 00:47 20-01-2021
YuS 2



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

Цитата:
Попытался сделать общую функцию

Скрипт для копирования-перемещения с сохранением структуры
 

Цитата:
Орет на

Ну, раз орет, значит там действительно пусто, где-то скрипт неправильно получает имена...
 

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

Естественно, я же говорил... оператор Split воспринимает правую часть, как регэксп...
Пример:

Код:
$string = 'просто строка имя файла [а здесь такая бяка], которую надо разрезать'
$splt = 'имя файла [а здесь такая бяка]'
 
# не разрежет, ибо совпадения не будет (всё дело в квадратных скобках! )
$string -split $splt
 
# как нож по маслу
$string -split [regex]::escape($splt)

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:29 20-01-2021 | Исправлено: YuS 2, 13:35 20-01-2021
farag



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

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 12:00 20-01-2021
LevT



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

 
https://www.meziantou.net/convert-cmd-script-to-powershell.htm

Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 23:33 23-01-2021
farag



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

Код:
 
$SystemDriveUniqueID = (Get-Volume | Where-Object {$_.DriveLetter -eq "$($env:SystemDrive[0])"}).UniqueID
$SystemProtection = ((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SPP\Clients")."{09F7EDC5-294E-4180-AF6A-FB0E6A0E9513}") | Where-Object -FilterScript {$_ -match [regex]::Escape($SystemDriveUniqueID)}
 
switch ($null -eq $SystemProtection)
{
    $true
    {
        "System protection disabled"
    }
}
 

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 11:54 24-01-2021 | Исправлено: farag, 16:20 25-01-2021
iNNOKENTIY21



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

Цитата:
защита системы для диска

Что за защита?
судя по скрипту проверяется системный диск, а система не всегда на C:

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 17:29 24-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Та, где можно создать точку восстановления:
cmd —> SystemPropertiesProtection —> Enter
 

Цитата:
система не всегда на C:


Код:
 
$env:SystemDrive[0]
 

Покажет всегда, какой диск под ОС определен. А если надо проверить другой, то указывать надо другой. Так что у меня все правильно )

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 23:35 24-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Захотел впендерить сий код в форму отображения UWP-приложений, чтобы отображались локализованные имена пакетов вместо самих имен пакетов, but failed again...

Код:
 
$Packages = [Windows.Management.Deployment.PackageManager,Windows.Web,ContentType=WindowsRuntime]::new().FindPackages()
$Packages | Select-Object -ExpandProperty Id -Property DisplayName
#
$Packages = [Windows.Management.Deployment.PackageManager,Windows.Web,ContentType=WindowsRuntime]::new().FindPackages()
($Packages | Select-Object -ExpandProperty Id -Property DisplayName | Where-Object {$_.Name -eq "Microsoft.Windows.Photos"}).DisplayName
 

https://pastebin.com/DXVs6Fg9
 

Код:
 
Add-AppxControl : Не удается привязать аргумент к параметру "AppxName", так как он представляет собой пустую строку.
строка:245 знак:30
+             Add-AppxControl -AppxName $_.DisplayName
 

Отображается весь список, игнорируя все условаия.

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 15:00 25-01-2021 | Исправлено: farag, 15:02 25-01-2021
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
Описание кода тоже важно А там декларируешь, что будет проверятся диск C:.
Код то правильный, только не соответствует декларации.
Это как сигнал поворота в авто, важно декларировать правильное направление поворота

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 16:18 25-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Не ори на меня! Исправил.
Лучше подумай надо более насущным вопросом...

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 16:20 25-01-2021
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
насущном пустая строка вместо .DisplayName иногда выходит. как решить надо думать(т.е. нужны ли эти пакеты с пустым DisplayName) а как проверить (и если не нужны пакеты с пустым DisplayName):

Код:
   # Window Loaded Event
    $Window.Add_Loaded({
        $OFS = "|"
        $Packages | Where-Object {$_.Name -cnotmatch $ExcludedAppxPackages} | Select-Object DisplayName -ExpandProperty Id | ForEach-Object -Process {
            if ($_.DisplayName) { # если есть DisplayName, то бла-бла-бла
                Add-AppxControl -AppxName $_.DisplayName
            }
        }
        $OFS = " "
    })

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 16:48 25-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Да, стало лучше. Но все равно почему-то игнорируется строка с условием

Код:
 
Get-AppxPackage -PackageTypeFilter Bundle
 

-PackageTypeFilter Bundle — вывод лишь обычных приложений, скрывая все системные.

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 16:54 25-01-2021
iNNOKENTIY21



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

Цитата:
Get-AppxPackage -PackageTypeFilter Bundle

Это где?
В окно должно вывестись, только не системные?

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 17:02 25-01-2021
farag



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

Код:
 
    function UninstallButton
    {
        [void]$Window.Close()
        $OFS = "|"
        if ($CheckboxRemoveAll.IsChecked)
        {
            Get-AppxPackage -PackageTypeFilter Bundle -AllUsers | Where-Object -FilterScript {$_.Name -cmatch $AppxPackages} | Remove-AppxPackage -AllUsers -Verbose
        }
        else
        {
            Get-AppxPackage -PackageTypeFilter Bundle | Where-Object -FilterScript {$_.Name -cmatch $AppxPackages} | Remove-AppxPackage -Verbose
        }
        $OFS = " "
    }
 

То есть выводится всегда только из семейства -PackageTypeFilter Bundle. Писал функцию коллега — плохо понимаю, что откуда вытекает.
Просто еще выяснилось, что сейчас пока и не удаляется даже ничего...

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 17:03 25-01-2021 | Исправлено: farag, 17:09 25-01-2021
iNNOKENTIY21



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

Цитата:
 UninstallButton

та это  только при удалении, а при создании контролов, окна фильтра не вижу
 
К тому же $Packages | gm # нет свойства Name
 
Get-AppxPackage -PackageTypeFilter Bundle | gm
 
В общем надо добавить фильтр и после раскрытия id, дабы  поле name появилось, я до такого додумался:

Код:
   $Packages = [Windows.Management.Deployment.PackageManager,Windows.Web,ContentType=WindowsRuntime]::new().FindPackages()
    $NonSystemAppxPackages = Get-AppxPackage -PackageTypeFilter Bundle
 
    #region Events Handlers
    # Window Loaded Event
    $Window.Add_Loaded({
        $OFS = "|"
        $Packages |
            Select-Object DisplayName -ExpandProperty Id |
            ? {($_.Name -in $NonSystemAppxPackages.Name) -and ($_.Name -cnotmatch $ExcludedAppxPackages) -and $_.DisplayName} |
            ForEach-Object -Process { Add-AppxControl -AppxName $_.DisplayName }
        $OFS = " "
    })

 
Добавлено:
Кстати, а почему в: $_.Name -cnotmatch $ExcludedAppxPackages используется -cnotmatch, а не -notin: $_.Name -notin $ExcludedAppxPackages?
А то я скопипастил не думая
 
Добавлено:
Про  $OFS = "|" и $OFS = " " я то же не догадался

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 18:06 25-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
А зачем также на проверку пихать, чтобы был и

Код:
 
-and $_.DisplayName
 

?

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 18:44 25-01-2021
iNNOKENTIY21



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

Цитата:
А зачем также на проверку пихать, чтобы был и  
$_.DisplayName  

дабы пустых DisplayName не было, заменяет блок if из первого поста на эту насущную тему.
Мне так больше нравится
 
Добавлено:
farag
Не на все 100% разобрался чё к чему, но отрефакторил малеха скрипт, надо проверять: Подробнее...
Изменил
- функцию Add-AppxControl, дабы принимала объект а не строку (нужны поля Name и DisplayName) и работала в конвеере
- вызов функции Add-AppxControl, в связи с изменениями выше.
- последний блок if, в связи с изменениями выше.
- в функцию UninstallButton добавил параметры -WhatIf, для отладки

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 18:51 25-01-2021 | Исправлено: iNNOKENTIY21, 20:16 25-01-2021
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Удаляет, но почему-то после удаления приложений запустил заново, и теперь не удаляет ничего вообще. В коде не менял пока ничего. Из неудаленных остаются все неотмеченные и все, что связано с Xbox. Что за напасть?..
 
А, и еще: вне зависимости, что отмечено, удаляется какой-то конкретный список все равно.

Код:
 
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.Wallet_2.4.18324.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.People_2020.324.807.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.WindowsCamera_2020.504.60.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.MSPaint_2020.2009.30067.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.MicrosoftOfficeHub_18.2008.12711.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.WindowsAlarms_2021.2009.5.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.549981C3F5F10_2.2011.11613.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.Getstarted_9.13.33161.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.MicrosoftSolitaireCollection_4.7.10142.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "A025C540.Yandex.Music_4.36.7642.0_neutral_~_vfvw9svesycw6".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.Microsoft3DViewer_2020.2010.15012.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.ZuneMusic_2019.20112.10111.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.WindowsFeedbackHub_2020.717.3.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "microsoft.windowscommunicationsapps_16005.13426.20316.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.ZuneVideo_2019.20112.10111.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.SkypeApp_15.67.99.0_neutral_~_kzf8qxf38zg5c".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.YourPhone_2020.1218.601.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.Office.OneNote_16001.13328.20478.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.MixedReality.Portal_2000.20111.1381.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.GetHelp_10.2010.33252.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.WindowsMaps_2021.2011.6.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.WindowsSoundRecorder_2021.2011.20.0_neutral_~_8wekyb3d8bbwe".
WhatIf: Выполнение операции "Удалить пакет" над целевым объектом "Microsoft.BingWeather_4.12.3003.0_neutral_~_8wekyb3d8bbwe".
 

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 21:19 25-01-2021 | Исправлено: farag, 21:24 25-01-2021
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
Ну да. Недопонятки, я только про отображение в окне, как просили
Надо ещё функцию Get-CheckboxClicked изменить немного, в части определения $AppxName, там оно берёт из текста чек бокса, а оно теперь не name, а displayName.
костылик
скрипт

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 23:15 25-01-2021
Открыть новую тему     Написать ответ в эту тему

Страницы: 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