Колупаюсь с повершелом #2

Jun 18, 2013 18:42

Элементарная задача - подсунуть коротенький повершеловский скрипт из Колупаюсь с повершелом. Казалось бы, ничто не предвещало беды. Но разве все когда-нибудь случается просто так, особенно на новом поле деятельности?
Гугль был немногословен, но все же выдал вот такую ссылку, в которой простым английским языком черным по белому напечатано как и что, от и до. Однако, не тут то было. Добавленная в шедулер задача всем хороша: в журнале сообщала о старте и завершении без ошибок, возвращала "ок", только ничего не делала.
Стал разбираться. Начал с ПШ, и запустил скрипт в нем - всё тип-топ, значит дело точно не в скрипте. Затем из самой командной строки запустил тривиальный "powershell.exe -help". Просмотренный вывод команды сообщил, что на бумаге всё я делаю правильно, и все должно работать. Собираю команду копи-пастом сюда же в cmd, стартую и получаю вот что:

D:\>powershell.exe -Noninteractive -Noprofile -Command "&{d:\sklad.ps1}"
В строке отсутствует завершающий символ: ".
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

"У, бля" - говорят суровые челябинские лесорубы говорю я и перечитываю хелп еще раз, проверяю что все соответствует написанному, проверяю синтаксис подробно до пробела и типа кавычки - всё верно. Дальше начинается стадия моего позора, добавляются и убираются кавычки, ключи, операторы вызова. Результат нулевой. Перечитываю хелп, команды и вывод еще раз, что-то внутри меня щелкает и я удаляю крайнюю кавычку и ключ "-NoProfile" нажимаю ENTER и долго и продолжительно охуеваю:

...
ПРИМЕРЫ:
PowerShell -PSConsoleFile SqlSnapIn.Psc1
PowerShell -version 2.0 -NoLogo -InputFormat text -OutputFormat XML
PowerShell -Command {Get-EventLog -LogName security}
PowerShell -Command "& {Get-EventLog -LogName security}"

# Использование параметра -EncodedCommand:
$command = 'dir "c:\program files" '
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand

D:\>powershell.exe -Noninteractive -Command "& {d:\sklad.ps1}

D:\>

[НЕНАВИСТЬ!!!!!]КАК?! Как, блядь, это понимать вообще? Почему оно заработало? Восемью строками ранее говорится одно, а потом наглядно демонстрируется совершенно другое! Как понимать эту магию? Вот же написано: "PowerShell -Command "& {Get-EventLog -LogName security}" Почему красная кавычка лишняя, бля? Откуда, блядь, она там взялась и куда, блядь, она потом делась????

Я щас посмотрел на часы. Получается, что на эту гребаную кавычку, на эти гребаные маны, на всё это я потратил 3 часа своей жизни. Зачем? Я опечален.
Какие выводы можно сделать:
во-первых, не спеши лезть за советом в гугл, юный падаван. Там скорее всего будет чепуха.
во-вторых, если в мане написана кавычка, не верь глазам своим, ее там нет.
в-третьих, читай отчеты об ошибках, всё остальное - тлен и суета.

решено, когда админы плачут, windows, powershell, осторожно_матюки, трудовыебудни

Previous post Next post
Up