Я создал инструмент, похожий на то, что вы описываете, за исключением того, что он более ограничен по объему, но, возможно, более общий. Я фактически создал его, чтобы не создавать сценарии powershell, а генерировать SQL-скрипты. Я мог бы использовать его для создания сценариев PS, но очень ограниченной форме, которая будет выглядеть следующим образом:
& someFunctionorApp -arg11 -arg12 -arg13 ...
& someFunctionorApp -arg21 -arg22 -arg23 ...
и повторяется, возможно, сто раз. Все аргументы исходят из какого-то источника данных или другого, и я просто подключил родовые имена для примера. Этот сгенерированный скрипт может сделать с помощью грубой силы то, что мог бы сделать умный скриптер внутри цикла, но так оно и есть.
Для моего инструмента драйвер - это данные, хранящиеся в файле CSV. Я могу получить CSV-файлы из баз данных, из электронных таблиц и простых PS-скриптов, которые захватывают информацию. Различные CSV-файлы имеют разные заголовки с разными именами полей и т. Д. Инструмент является общим. Другой вход для моего инструмента - это то, что я назвал шаблоном. Шаблон в этом контексте является всего лишь текстовым файлом с некоторыми встроенными переменными PS. Инструмент запускается через файл CSV, собирающий фактические значения для хранения вместо переменных PS.
Выход выходит на консоль, но его легко перенаправить в файл.
Просто для усмешки, я включил инструмент. Если инструмент вам не по душе, возможно, вы можете подобрать технику или два и приспособить их.
<# This function is a table driven template tool.
It's a refinement of an earlier attempt.
It generates output from a template and
a driver table. The template file contains plain
text and embedded variables. The driver table
(in a csv file) has one column for each variable,
and one row for each expansion to be generated.
5/13/2015
#>
function Expand-csv {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string] $driver,
[Parameter(Mandatory=$true)]
[string] $template
)
Process
{
$OFS = "`r`n"
$list = Import-Csv $driver
[string]$pattern = Get-Content $template
foreach ($item in $list) {
foreach ($key in $item.psobject.properties) {
Set-variable -name $key.name -value $key.value
}
$ExecutionContext.InvokeCommand.ExpandString($pattern)
}
}
}
Итак, из чего я могу собрать цель - создать скрипт А, создающий скрипт В, который опирается на хэш, но тогда каким-то образом скрипт В работает без присутствия хэша? Это не будет работоспособным, либо хеш там, и может быть использован для аутентификации скриптом (а также всем, у кого есть доступ к скрипту), или хеш не существует, и скрипт не сможет аутентифицироваться , с другой стороны, если вы просто хотите, чтобы Script A сгенерировал скрипт B с каким-то уникальным хэшем, вы можете сделать это с помощью «Out-File», но любой, у кого есть доступ к Script B, будет иметь доступ к вашему ключу (даже если хешировано). –
Может быть приятно узнать, почему вы хотите сделать это, если у вас есть проблема XY на ваших руках. Возможно, зная реальную мотивацию для этого, вы получите лучший ответ. – Matt
@Matt во всей действительности моя цель состояла в том, чтобы создать скрипт, который запрашивает ключ через диалог, хеширует его и создает повторно используемый exe-файл через скрипт ps1, который активирует окна, программное обеспечение и т. Д. ... Я уже сделал скрипт сделать последнее вручную ... но не способ упростить процесс до уровня бабушки, просто дважды щелкая файл, вводя новый ключ и создавая новый exe на его основе. – AdilZ