У меня есть сценарий powershell, который может быть вызван определенными пользователями. Скрипт работает с некоторыми повышенными разрешениями, поэтому мне нужно убедиться, что они не могут использовать его для обхода предполагаемого поведения. Одним из параметров сценария является строка, которая выступает в качестве аргументов для другого командлета.Вызов командлета с настраиваемыми аргументами
Таким образом, пользователь может поставить строку «-День 4 -Год 1989 месяц- 3»
то в моем сценарии, я хочу работать: Get-Date -День 4 -Год 1989 месяц- 3
Теперь я знаю, что я мог бы сделать это с помощью Invoke-Expression, но что бы оставить меня уязвимым для инъекции Powershell (т.е. пользователь может перейти в «-дня 4, сделай плохой материал»)
в качестве альтернативы, Я мог бы написать обертку для Get-Date, но это похоже на большую работу, поскольку командлет, который я на самом деле вызываю (это не Get-Date), имеет много разных параметров, и кажется, что много работы для переноса торговый центр. Нет аргументов, которые они могли бы назвать командлетом, который может нанести вред (поскольку это командлет Get-xxx).
Кто-нибудь знает способ вызова определенного командлета со строкой в качестве аргументов?
(http://blogs.technet.com/b/heyscriptingguy/archive [Может быть, функция прокси?] /2011/03/01/proxy-functions-spice-up-your-powershell-core-cmdlets.aspx) Все еще не уверен, что вы пытаетесь сделать. Можете ли вы предоставить образец/фрагмент вашего сценария? –
Ближе всего я могу думать о том, что это встроенный аргумент splatting. http://technet.microsoft.com/en-us/magazine/gg675931.aspx – JohnL
JohnL, это близко к тому, что я хочу. Мне нужно было бы преобразовать строку ''-Day 4-Year 1989 -Month 3'' в' $ p = @ {' day '=' 4 ';' year '=' 1989 ';' month '=' 3 '} '. Это не так сложно сделать, но мне интересно, есть ли способ сделать это автоматически. Если ничего лучше не появится, я думаю, я могу это использовать. – Horatiu