2017-04-16 97 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