Показать полную графическую версию : [решено] Удалить папку без подтверждения
Dragokas
21-09-2020, 22:31
Напишите, пожалуйста аналог
cmd /c rd /s /q
Указал все возможные ключи:
PS C:\Windows\system32> Remove-Item -Path "$env:Temp\Folder" -Force -Confirm -Recurse -ErrorAction SilentlyContinue
А он все равно требует подтверждение:
Подтверждение
Вы действительно хотите выполнить это действие?
Выполнение операции "Удаление каталога" над целевым объектом "C:\Users\Alex\AppData\Local\Temp\Folder".
[Y] Да - Y [A] Да для всех - A [N] Нет - N [L] Нет для всех - L [S] Приостановить - S [?] Справка (значением по умолчанию является "Y"):
Мозг отказывается понимать логику Майкрософт.
Мозг отказывается понимать логику Майкрософт. »
Confirm - это и есть вызов запроса на подтверждение. Здесь вам нужен только Recurse.
greg zakharov
22-09-2020, 17:31
Порой pwsh сходит с ума из-за различных атрибутов, например, ReadOnly. Поэтому перед тем, как грохнуть папку, лучше заведомо сбросить атрибуты файлов папки до Normal. Например:
(Get-ChildItem foo -Recurse).ForEach{$_.Attribute = 'Normal'} && Remove-Item foo -Recurse -Force
Хотя бывают и другие причины подобного поведения. Если пример выше работает, значит дело было именно в атрибутах.
Порой pwsh сходит с ума из-за различных атрибутов, например, ReadOnly. »
Вроде ж -Force как раз для этого, не? Или это уже просто ошибки в самой реализации pwsh?
greg zakharov
22-09-2020, 18:43
Вроде ж -Force как раз для этого, не? Или это уже просто ошибки в самой реализации pwsh?Да, -Force для этого случая, - ошибок реализации в pwsh достаточно.
greg zakharov, спасибо, ясно.
DJ Mogarych
22-09-2020, 21:29
-confirm:$false
Dragokas
23-09-2020, 00:57
Fors1k, так то оно так, только как видите, не работает.
greg zakharov, если я правильно понял, для игнорирования атрибутов предназначен ключик -Force
Спасибо, метод от DJ Mogarych сработал.
Только вот, как я должен был это понять по докам?
get-help Remove-Item -full
-Confirm <System.Management.Automation.SwitchParameter>
Prompts you for confirmation before running the cmdlet. For more information, see the following articles:
- about_Preference_Variables (../microsoft.powershell.core/about/about_preference_variables.md#confirmpreference)- about_Functions_CmdletBindingAttribute (../microsoft.powershell.core/about/about_functions_cmdletbindingattribute.md?#confirmimpact)
Требуется? false
Позиция? named
Значение по умолчанию False
Принимать входные данные конвейера?False
Принимать подстановочные знаки?false
Если я правильно понимаю
"Значение по умолчанию False"
означает, что там неявно уже подставляется False. Ошибка в доках?
И подскажите мне, пожалуйста, чем заменить магические точки ../microsoft.powershell.core чтобы попасть на сайт, указанный в доках?
(боже, как же любит Майкрософт усложнять)
ошибок реализации в pwsh достаточно. »
И не только. Особенно умиляет, что не работает мана, пока не введешь Update-Help. 21-й век ёпт.
Неужели не хватило места в их гигабайтовых обновлениях винды.
Fors1k, так то оно так, только как видите, не работает. »
Не работает что именно?
"-Confirm" = запросить подтверждение перед выполнением. Вы написали -Confirm, он вас спросил, все как и должно быть.
И подскажите мне, пожалуйста, чем заменить магические точки »
https://docs.microsoft.com/ru-ru/powershell/module
Вот нужный вам код:
Remove-Item "$env:Temp\Folder" -Recurse -Force
Только вот, как я должен был это понять по докам? »
Ну, с доками у микрософта часто возникают проблемы... стоит вспомнить документацию по CMD, например. Сколько нюансов, которые не имеют описания вовсе и обнаруживаются только эмпирическим путем. Вам-то это должно быть известно очень хорошо. :)
Что касается параметра -confirm:
У powershell, есть много нюансов, которые не описываются в help-ах конкретных командлетов, но они являются общими для поведения многих из них. И это, как раз, тот случай.
Поведение выдачи запроса на подтверждение определяется ещё и значением автопеременной $ConfirmPreference (https://docs.microsoft.com/ru-ru/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-5.1#confirmpreference), помимо, собственно, значения по умолчанию параметра -confirm
The $ConfirmPreference variable's valid values are High, Medium, or Low. Cmdlets and functions are assigned a risk of High, Medium, or Low. When the value of the $ConfirmPreference variable is less than or equal to the risk assigned to a cmdlet or function, PowerShell automatically prompts you for confirmation before running the cmdlet or function.
означает, что там неявно уже подставляется False. Ошибка в доках? »
Сам параметр -confirm, работает как и любой другой параметр со свойством switch, т.е. если он не указан, то значение будет по умолчанию, а если его указать, но без конкретного содержания через двоеточие (т.е. не так -confirm:$false), то значением будет $true:
function test{
param(
[switch]$switch = $false
)
if($switch){'True'}else{'False'}
}
PS_5.1> test
False
PS_5.1> test -switch
True
PS_5.1> test -switch:$false
False
PS_5.1>
- кроме того, во многих местах у powershell, зачастую присутствуют приоритеты, которые иногда могут вызвать удивление, но тем не менее их необходимо учитывать...
Особенно умиляет, что не работает мана, пока не введешь Update-Help. 21-й век ёпт.
Неужели не хватило места в их гигабайтовых обновлениях винды. »
Дело не в размерах обновлений, наверное...
Предустановленный powershell v5.1, содержит маны и сам он уже практически не изменяется, а версии поновее, подвержены изменениям и часто значительным, поэтому и маны необходимо периодически обновлять отдельно, видимо исходили из этого... но согласен, что с документацией у микрософта были, есть и скорее всего, будут проблемы... :)
Dragokas
23-09-2020, 12:40
Fors1k, согласен, каюсь, балда, без "-Confirm" отрабатывает без доп. запросов.
YuS_2, спасибо за пояснения.
greg zakharov
23-09-2020, 14:27
И не только. Особенно умиляет, что не работает мана, пока не введешь Update-Help. 21-й век ёпт.
Документация, пересказом которой занимается множество людей (в том числе авторы книжных недоразумений), в общем-то не нужна, так как посредством рефлексии можно узнать куда более о том или ином командлете или операторе.
стоит вспомнить документацию по CMD, например. Сколько нюансов, которые не имеют описания вовсе и обнаруживаются только эмпирическим путем.
Если только не смотреть на cmd сквозь призму WinDbg\cdb, но тогда больше времени угробится зря.
кроме того, во многих местах у powershell, зачастую присутствуют приоритеты, которые иногда могут вызвать удивление, но тем не менее их необходимо учитывать...
Строго говоря, приоритетом обладают только операторы, вы указываете лишь на контекст. Контекст можно вполне изменять.
Дело не в размерах обновлений, наверное...
Размер значения не имеет, более того, документация не так часто обновляется. Да и как сказано было выше, документация нужна главным образом людям не так часто использующим pwsh.
приоритетом обладают только операторы »
Я бы сказал "в основном", а "только" - жестковатые рамки...
Вышеприведенная автопеременная, как раз, оператором не является ведь, но она регулирует приоритет выдачи запроса на подтверждение действий, а также атрибут ConfirmImpact (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_cmdletbindingattribute?view=powershell-7#confirmimpact) командлетов и функций.
документация нужна главным образом людям не так часто использующим pwsh. »
Часто убеждался, что документация нужна всем, хоть и не всегда, ибо запомнить всё и насовсем, как правило, задача нетривиальная... :)
А то, что изменения документации не поспевают за изменениям в самом powershell, так это вечная болячка микрософта, наверное.
greg zakharov
23-09-2020, 16:18
YuS_2, ещё раз. Переменные не имеют приоритета, они имеют контекст; автоматические переменные могут управлять контекстом. Чуете разницу? Это не "жестковатые" рамки, а действительность. Сами посудите: если бы переменные имели приоритет, следовательно возникла "гонка" операторов и переменных, и тогда бы вместо осмысленного итога цепочки выражений можно было бы наблюдать фигу.
И, также, что касательно документации. Документация нужна тем, кто pwsh использует не повседневно и не столь продолжительное время.
автоматические переменные могут управлять контекстом. Чуете разницу?»
а я что сказал? :o
она регулирует приоритет выдачи запроса на подтверждение действий »
Думал, что то, что она управляет приоритетом посредством своих значений (то бишь контекстом) и так очевидно, поэтому не вдавался в подробности.
Вопрос был в том, что приоритет присутствует не только в операторах, ибо в данном случае никакой внешний оператор (понятно, что внутри модуля он просто обязан быть, но фактически, мы его не видим) не участвует в управлении и следовательно выразиться: "приоритетом обладают, в основном, операторы", было бы точнее...
если бы переменные имели приоритет, следовательно возникла "гонка" операторов и переменных »
Согласен. Ни к чему хорошему, это не привело бы...
Документация нужна тем, кто pwsh использует не повседневно и не столь продолжительное время. »
Здесь меня переубедить сложно, ибо есть опыт кое-какой. Документация нужна всем, это скорее истина, чем мое личное мнение. Ибо память человеческая - величина непостоянная, имеет свойство подводить в самый неподходящий момент. Если что-то вызывает сомнения, лучше обратиться к документации. А отсутствие сомнений не свойственно людям вообще, а уж в творческом процессе и подавно...
greg zakharov
23-09-2020, 17:21
а я что сказал?
Может быть так будет понятней?
контекст -ne приоритет
Иначе говоря, это - не синонимы, не взаимодополняющие понятия.
Может быть так будет понятней? »
ну, тогда требуется цитатка, где бы я сказал, что-то противоречащее этому:
Переменные не имеют приоритета »
т.е., если уточнять - где я говорил, что переменные имеют приоритет? ;)
Вижу, что требуется уточнение: я не говорил этого, а именно того, что переменные имеют приоритет. Всего лишь, говорил о том, что приоритет может быть не только у операторов. А это две большие разницы.
"регулировать приоритет" -ne "наличие приоритета у регулятора"
:)
А если ещё уточнить, то и у запуска некоторых командлетов, тоже есть приоритеты, без оператора, всего лишь указанием аргумента, например, Start-BitsTransfer... у политики выполнения скриптов есть приоритетность, которая регулируется без помощи операторов... и т.д.
ЗЫ И хватит уже выкать мне. Насколько я помню, мы давно переходили на ты, хоть и не здесь это было... :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.