![](/img/trans.png)
[英]How can I add color to the machine name in the prompt of a PowerShell Remoting session?
[英]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.