簡體   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