Модуль Powershell c#, изменение подсказки из командлета - PullRequest
0 голосов
/ 25 марта 2020

Если я запускаю function prompt {"PS: $(get-date)>"} в терминале, это меняет подсказку.

как я могу запустить эту команду из c# командлета, например, что я пытаюсь сделать так:

protected override void ProcessRecord()
{
    Host.UI.Write(ConsoleColor.Green, Host.UI.RawUI.BackgroundColor, "function prompt {\"PS: $(get-date)> \"}");
}

Но он просто печатает этот скрипт в новой строке.

(с использованием PS7.0)

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Похоже, что правильный вопрос «как запустить сценарий из c# командлета»

Эти две строки запускают сценарий, который изменяет подсказку для отображения текущего времени.

ScriptBlock block = SessionState.InvokeCommand.NewScriptBlock("function prompt {\"PS: $(get-date)> \"}");
SessionState.InvokeCommand.InvokeScript(SessionState, block);
0 голосов
/ 25 марта 2020

Сначала создайте файл .ps1 с именем prompt_change.ps1:

function prompt {"PS: $(Get-Date)>"}

Затем вы можете запустить его из консоли powershell, чтобы изменить приглашение PowerShell с C#:

$code = @'
using System;
namespace TestTest {
  public class Program {
    public static void Main( string[] args ) {
      var ps = PowerShell.Create();
      ps.AddScript(@"Full path of prompt_change.ps1 without double backslashes").Invoke();
    }
  }
}
'@
Add-Type -TypeDefinition $code -Language CSharp
Invoke-Expression "[TestTest.Program]::Main()"
...