我有一个困扰我的问题。
我想自动执行带有命名参数的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等)都没问题,我只想自动获取传递给脚本的命名参数。
提前感谢您提供任何帮助或建议..
答案 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