1

リモート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をセットアップしてから、プロンプトを「テスト」にカスタマイズします。

ただし、プロンプトに「テスト」と表示したくないので、サーバー名に色を付けるコードを実行したいと思います。ただし、さまざまな種類のサーバーに接続するための多くの同様の機能で再利用したいので、スクリプトブロック(上記)にハードコーディングしたくありません。

そのため、関数をローカルで定義し、「Get-Contentfunction:\RemotePrompt」を使用してコンテンツを取得できます。しかし、これを他のセッションに送信する方法を理解するのに苦労しています。Invoke-Expressionはセッションを取得していないようであり、Invoke-Commandは常にスクリプトブロックを予期しているようです。

私が本当にやりたいInvoke-Command -ScriptBlock { function prompt $MyRemoteCode }のは、変数が「解決」されているようなものです。

これは可能/簡単ですか?

4

2 に答える 2

3

$using: で始まる Powershell V3 変数を使用すると、ローカル変数として自動的に認識され、リモート マシンに送信されるため、
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

于 2012-12-04T12:51:50.513 に答える
2

scriptblock.net クラスを使用できます。

[scriptblock]::Create( $s)

$s はstring型です。

于 2012-12-04T09:53:30.740 に答える