2017-04-16 95 views
1

PowerShell脚本块我如果字符串,其中包含了PowerShell脚本块:以参数作为字符串

$scriptBlock = 'Param (
    [string]$param1, 
    [string]$param2, 
    [switch]$param3 
) 
Write-Output ('param1: {0}' -f $param1) 
Write-Output ('param2: {0}' -f $param2) 
Write-Output ('param3: {0}' -f $param3)' 

第二串里面我有一个脚本程序块的参数。

$arguments = '-param1 "param1Value" -param2 "param2Value" -param3' 

我的问题是我该如何使用aruments字符串调用脚本块?

+0

为什么你在一个字符串中有参数?你是如何获得他们的第一个地方? –

回答

1

$scriptblock字符串赋值在语法上是无效的,可以使用下面的字符串,以避免逃避' S:

$scriptBlock = @' 
Param (
    [string]$param1, 
    [string]$param2, 
    [switch]$param3 
) 
Write-Output ('param1: {0}' -f $param1) 
Write-Output ('param2: {0}' -f $param2) 
Write-Output ('param3: {0}' -f $param3) 
'@ 

你可以定义与$scriptblock字符串的内容的函数:

$functionName = "__command$(Get-Random)" 
New-Item -Path function:\ -Name $functionName -Value $scriptBlock 

然后使用Invoke-Expression调用它:

$result = Invoke-Expression "$functionName $arguments" 

并清理:

Remove-Item function:\$functionName 
+0

谢谢!奇迹般有效。 – k7s5a