2016-11-17 8 views
0

Так что я хотел бы знать, как сделать PowerShell скриптом может создать PowerShell Script BCreat Другой независимый Powershell скрипт через первый Powershell скрипт

Основная цель состоит в том, чтобы иметь Script B быть независимым от Сценарий A (для целей безопасности). У меня есть ключи, которые я получаю от Сценарий A и хэш их.

Я хочу также скрипт создать Сценарий B как Сценарий B будет делать действия, а также будет принята другими отдельными сред.

Так как я могу:

A: Сделать новый сценарий через первый?

B: Have, $ hash1 (хэш ключом1), перейти к Script B, так что, когда Сценарий B работает в отдельной среде виртуальной машины или ПК, не требует Script A использовать $ hash1

Благодарности

+0

Итак, из чего я могу собрать цель - создать скрипт А, создающий скрипт В, который опирается на хэш, но тогда каким-то образом скрипт В работает без присутствия хэша? Это не будет работоспособным, либо хеш там, и может быть использован для аутентификации скриптом (а также всем, у кого есть доступ к скрипту), или хеш не существует, и скрипт не сможет аутентифицироваться , с другой стороны, если вы просто хотите, чтобы Script A сгенерировал скрипт B с каким-то уникальным хэшем, вы можете сделать это с помощью «Out-File», но любой, у кого есть доступ к Script B, будет иметь доступ к вашему ключу (даже если хешировано). –

+2

Может быть приятно узнать, почему вы хотите сделать это, если у вас есть проблема XY на ваших руках. Возможно, зная реальную мотивацию для этого, вы получите лучший ответ. – Matt

+0

@Matt во всей действительности моя цель состояла в том, чтобы создать скрипт, который запрашивает ключ через диалог, хеширует его и создает повторно используемый exe-файл через скрипт ps1, который активирует окна, программное обеспечение и т. Д. ... Я уже сделал скрипт сделать последнее вручную ... но не способ упростить процесс до уровня бабушки, просто дважды щелкая файл, вводя новый ключ и создавая новый exe на его основе. – AdilZ

ответ

1

A: Powershell скрипт сохраняется в виде текста. Вы (= script A) можете печатать текст в файл (например, scriptB.ps), и этот файл может быть выполнен.

B: Вы можете использовать оператор «return» в сценарии A. И если вам не нужен этот хеш, вам придется писать свой код для запуска даже без этого входного параметра или использовать параметр по умолчанию. И как? С утверждениями if возможно.

1

Я создал инструмент, похожий на то, что вы описываете, за исключением того, что он более ограничен по объему, но, возможно, более общий. Я фактически создал его, чтобы не создавать сценарии 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) 
     } 
    } 
} 
Смежные вопросы