Powershell передает именованные параметры из файла

У меня проблема, которая беспокоит мой разум.

Я хочу автоматически запускать скрипты powershell с именованными аргументами, но в другом скрипте powershell (который будет действовать как скрипт-скрипт).

Например:

Эти параметры имеют один из сценариев

param(
[int]$version,
[string]$user,
[string]$pass,
[string]$domain,

)

Сценарий powershell script deamon теперь загружает файл и аргументы, подобные этому

$argumentsFromScript = [System.IO.File]::ReadAllText("C:\params.txt") $job = Start-Job { & "ps1file" $arguments}

Параметр params.txt содержит данные, подобные этому

-versionInfo 2012 -user admin -pass admin -domain Workgrup

Но когда я пытаюсь выполнить этот код, очевидно, что вся переменная $ argumentsFromScript будет рассматриваться как параметр 1 (версия), и я получаю сообщение об ошибке "-versionInfo 2012 -user admin -pass admin -domain Workgrup" не может быть преобразован в Int32...

Вы, ребята, знаете, как я могу выполнить эту задачу? Deamon Powershell ничего не знает о параметрах. Ему просто нужно выполнить скрипты с заданными именованными параметрами. Параметр params.txt является всего лишь примером. Любой другой файл (csv, ps1, xml и т.д.) Будет в порядке, я просто хочу автоматически получить именованные параметры, переданные скрипту.

Заранее благодарю за любую помощь или совет.

2 ответа

Попробуй это:

@'
param ([string]$logname,[int]$newest)
get-eventlog -LogName $logname -Newest $newest
'@ | sc c:\testfiles\testscript.ps1

 '-logname:application -newest:10' | sc c:\testfiles\params.txt

$script = 'c:\testfiles\testscript.ps1'
$arguments = 'c:\testfiles\params.txt'

$sb = [scriptblock]::Create("$script $(get-content $argumentlist)")

Start-Job -ScriptBlock $sb


Думаю, вы этого хотите:

$ps1 = (Resolve-Path .\YourScript.ps1).ProviderPath
$parms = (Resolve-Path .\YourNamedParameters.txt).ProviderPath

$job = sajb -ScriptBlock {
 param($ps1,$parms) 
 iex "$ps1 $parms"
} -ArgumentList @(
 $ps1,
 [string](gc $parms)
)

# if you wanna see the outcome
rcjb $job -Wait

licensed under cc by-sa 3.0 with attribution.