假设我将以下 powershell 代码存储在文件中:
## file1.ps1
$myvar = "i am here"
if ($myvar -ne $null) {
"($myvar) variable is Full"
} else {
"($myvar) variable is Empty"
}
Run Code Online (Sandbox Code Playgroud)
然后这段代码被存储在一个变量中:
$code_in_var = cat file1.ps1
Run Code Online (Sandbox Code Playgroud)
如何通过管道执行变量中的代码?
我已经尝试过以下方法:
PS C:\Mrm> $code_in_var = cat file1.ps1
PS C:\Mrm>
PS C:\Mrm> cat file1.ps1 | powershell -
PS C:\Mrm>
PS C:\Mrm> cat file1.ps1 | Invoke-expression
Invoke-expression ; At line:1 char:23
+ if ($myvar -ne $null) {
+ ~
Missing closing '}' in statement bllock or type definition
At line:1 char:17
PS C:\Mrm>
PS C:\Mrm> $code_in_var | powershell - ***(this does not return anything)***
PS C:\Mrm>
PS C:\Mrm>
PS C:\Mrm> $code_in_var | Invoke-expression
**same error**
Run Code Online (Sandbox Code Playgroud)
但是,如果我直接运行这个脚本:
PS C:\Mrm> .\file1.ps1
(i am here) variable is Full
Run Code Online (Sandbox Code Playgroud)
它按预期工作。
我的问题是,如何运行存储在变量中的完整 powershell 代码,就像它在文件中一样?
您可以将ScriptBlock存储在变量中并使用&调用运算符,如下所示:
$scriptBlock = {
$myvar = "i am here"
if ($myvar -ne $null) {
"($myvar) variable is Full"
} else {
"($myvar) variable is Empty"
}
}
& $scriptBlock
Run Code Online (Sandbox Code Playgroud)
输出:
(我在这里)变量已满
| 归档时间: |
|
| 查看次数: |
3904 次 |
| 最近记录: |