Почему не эхом да | работа в моем сценарии?

Может ли кто-нибудь объяснить мне, почему я могу написать "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 ....это будет работать.

Другие вопросы по тегам