繁体   English   中英

如何在远程会话中执行字符串形式的PowerShell,而不是ScriptBlock?

[英]How can I execute a block of PowerShell in a remoting session that is a string, and not a ScriptBlock?

我正在尝试在远程PowerShell会话中自定义提示。 一切正常:

$session = New-PSSession MyRemoteServer
Invoke-Command -Session $session -ScriptBlock {
    New-PSDrive -Name MyApp -PSProvider FileSystem -Root D:\Applications\MyApp | Out-Null
    CD MyApp:\
    function prompt { "test" }
}
Enter-PSSession -Session $session

它创建一个会话,为方便起见设置PSDrive,然后将提示自定义为“测试”。

但是,我不想我的提示说“测试”,我想执行一些为服务器名称加上颜色的代码 但是,我不想在脚本块(上面的a)中对其进行硬编码,因为我想在许多类似的函数中重用它以连接到不同类型的服务器。

因此,我已经在本地定义了该函数,并且可以使用“ Get-Content function:\\ RemotePrompt”获取内容。 但是,我正在努力弄清楚如何将其发送到另一个会话。 Invoke-Expression似乎不占用会话,并且Invoke-Command似乎总是希望使用脚本块。

我真正想要做的是类似Invoke-Command -ScriptBlock { function prompt $MyRemoteCode }但变量已“解析”。

这可能/容易吗?

在Powershell V3变量前加上$ using:会自动识别为本地变量,并发送到远程计算机,以便您可以使用
PS>$test="local var"
PS>icm -cn server1 -ScriptBlock{write-host $using:test}
local var

您可以在此处查看V3的所有新功能: http : //blogs.msdn.com/b/powershell/archive/2012/06/14/new-v3-language-features.aspx

您可以使用scriptblock .net类:

[scriptblock]::Create( $s)

其中$ s是string类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM