我創建了一個類似於你所描述的工具,只是它在範圍上更受限制,但也許更通用。我實際上創建它不生成PowerShell腳本,但生成SQL腳本。我可以用它來生成PS腳本,但非常有限的形式,它應該是這樣的:
& someFunctionorApp -arg11 -arg12 -arg13 ...
& someFunctionorApp -arg21 -arg22 -arg23 ...
也許重複一百遍。這些參數都來自某個數據源或其他數據源,爲了舉例,我只是插入了通用名稱。這個生成的腳本可能通過蠻力強制聰明的腳本編寫者在循環中完成,但這樣做也行。
對於我的工具,驅動程序是存儲在CSV文件中的數據。我可以從數據庫,電子表格和捕獲信息的簡單PS腳本獲取CSV文件。不同的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)
}
}
}
因此,從我能收集的目標是讓腳本A生成腳本B,它依賴於散列,但然後以某種方式讓腳本B工作而不存在散列?這是行不通的,要麼散列在那裏,並且可以被腳本用於授權(以及通過擴展讀取腳本的任何人)或散列不存在,腳本將無法授權。另一方面,如果你只是希望腳本A用一些獨特的散列產生腳本B,你可以用'Out-File'來完成,但任何有權訪問腳本B的人都可以訪問你的密鑰(即使散列)。 –
可能很高興知道你爲什麼要這樣做,因爲你手上有XY問題。也許知道這個真正的動機會給你一個更好的答案。 – Matt
@Matt 在所有的實際情況中,我的目標是最終制作一個腳本,通過對話框請求一個鍵,通過ps1腳本對它進行散列並創建一個可重用的exe文件,以激活窗口,軟件等....我已經創建了一個腳本手動完成後者...但沒辦法簡化這個過程到祖母級別只需雙擊一個文件,輸入新的密鑰並基於它生成一個新的exe。 – AdilZ