如何执行变量中的powershell代码

KLZ*_*LZY 3 powershell

假设我将以下 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 代码,就像它在文件中一样?

The*_*heo 5

您可以将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)

输出:

(我在这里)变量已满