Powershell从文件传递命名参数

时间:2014-09-12 12:36:51

标签: file powershell parameters

我有一个困扰我的问题。

我想自动执行带有命名参数的powershell脚本,但是在另一个PowerShell脚本中(将充当脚本守护程序)。

例如:

其中一个被调用的脚本具有此参数

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

powershell脚本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 ...

你们有什么想法我能完成这项任务吗? Powershell deamon对参数一无所知。他只需要使用给定的命名参数执行脚本。 params.txt只是一个例子。任何其他文件(csv,ps1,xml等)都没问题,我只想自动获取传递给脚本的命名参数。

提前感谢您提供任何帮助或建议..

2 个答案:

答案 0 :(得分:1)

试试这个:

@'
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

答案 1 :(得分:0)

我想你想要这个:

$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