Почему не эхом да | работа в моем сценарии?
Может ли кто-нибудь объяснить мне, почему я могу написать "ECHO Y|" в командной строке Powershell, но не, если я реализую это в сценарии?
Эти переменные взяты из файла.csv. Когда я использовал командную строку, я не использовал переменные.
ECHO Y|cacls $_."Serverdisc" /G ADMINISTRATORS:F
cacls $_."Serverdisc" /G $_."Username":C /T /E
cacls $_."Serverdisc" /G SYSTEM:F /T /E
3 ответа
Я добавлю к комментариям Adil H. и скажу, что использование cacls не рекомендуется. Вместо этого вы должны использовать icacls. В icacls есть параметр /Q (Тихий), который подавляет все подтверждающие сообщения, и вам не придется использовать ECHO Y|
в вашем коде.
(при условии, что у вас есть оставшаяся часть скрипта по порядку (см. пост Адил Х.)) Ваш блок скриптов изменится на этот:
icacls $_."Serverdisc" /Q /Grant ADMINISTRATORS:F
icacls $_."Serverdisc" /Q /Grant $_."Username":C /T
icacls $_."Serverdisc" /Q /Grant SYSTEM:F /T
Я предполагаю, что вы пытаетесь передать "Y(s)" любым возможным запросам? CMD shell и PowerShell - это две разные оболочки. То, что вы пытаетесь сделать, это использовать синтаксис оболочки CMD для Powershell и, следовательно, столкнуться с проблемами
$_ используется, когда вы выполняете итерацию по массиву, поступающему из конвейера, поэтому здесь должно быть что-то иное, чем вы здесь не поделились. Я приведу вам пример.
Предположим, у меня есть 2 файла в c:\temp\:
c:\temp\a.txt
c:\temp\b.txt
и я хочу дать им разрешения, а не получать подсказки.
"c:\temp\a.txt","c:\temp\b.txt" | foreach-object {
ECHO Y|cacls $_ /G ADMINISTRATORS:F
echo Y|cacls $_ /G SYSTEM:F /T /E
}
Это эквивалентно следующему
ECHO Y|cacls c:\temp\a.txt /G ADMINISTRATORS:F
echo Y|cacls c:\temp\a.txt /G SYSTEM:F /T /E
ECHO Y|cacls c:\temp\b.txt /G ADMINISTRATORS:F
echo Y|cacls c:\temp\b.txt /G SYSTEM:F /T /E
$_ заменяется на foreach-object тем, что выходит из конвейера, который в значительной степени имитирует команду оболочки CMD, которая будет работать.
Вероятно, это связано с тем, что функция конвейера powershell отличается от командной строки cmd.
Если вы используете cmd /c echo Y| cacls ....
это будет работать.