通过第一个Powershell脚本创建另一个独立的Powershell脚本

时间:2016-11-17 16:01:51

标签: powershell

所以我想知道如何制作powershell 脚本A 可以创建powershell 脚本B

主要目标是让脚本B 独立于脚本A (出于安全目的)。我使用脚本A 获取密钥并对其进行哈希处理。

我还希望脚本A创建脚本B ,因为脚本B 将执行操作,并且还将被带到其他单独的环境中。

那我怎么能:

A:通过第一个创建新脚本?

B:有,$ hash1(key1的哈希值),传递给脚本B ,这样当脚本B 运行时单独的VM或PC环境,它不需要脚本A 使用$ hash1

谢谢

2 个答案:

答案 0 :(得分:1)

答:Powershell脚本保存为文本。您(=脚本A)可以将文本打印到文件中(例如scriptB.ps),并且可以执行此文件。

B:您可以在脚本A中使用“return statement”。如果您不需要此哈希,那么即使没有此输入参数或使用默认参数,您也必须编写代码才能运行。如何?用if语句可能。

答案 1 :(得分:1)

我创建了一个类似于你所描述的工具,除了它的范围更有限,但可能更通用。我实际上创建它不是为了生成PowerShell脚本而是为了生成SQL脚本。我可以使用它来生成PS脚本,但形式非常有限,如下所示:

& someFunctionorApp -arg11 -arg12 -arg13 ...
& someFunctionorApp -arg21 -arg22 -arg23 ...

并且重复了大概一百次。 args都来自某些数据源或其他数据源,为了示例,我只是插入了通用名称。这个生成的脚本可能会通过一个聪明的脚本编写器在循环中执行的操作来实现,但也就是这样。

对于我的工具,驱动程序是存储在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) 
         }
   }
}