首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从PowerShell访问C#主机

如何从PowerShell访问C#主机
EN

Stack Overflow用户
提问于 2015-02-25 16:23:58
回答 2查看 1.9K关注 0票数 2

在PowerShell配置文件中,可以标识PowerShell主机,以便为该主机的环境进行适当的设置。例如:

代码语言:javascript
复制
if ($host.Name -eq 'ConsoleHost')
{
    Import-Module PSReadline
    # differentiate verbose from warnings!
    $privData = (Get-Host).PrivateData
    $privData.VerboseForegroundColor = "cyan"
}
elseif ($host.Name -like '*ISE Host')
{
    Start-Steroids
    Import-Module PsIseProjectExplorer
}

我希望能够从C#上下文中进行等效的标识,主要是因为PowerShell ISE不支持Console.ReadLine,所以我想知道在当前PS主机环境中使用它是否安全。

我首先探索了如何从Get-Host (每个调用cmdlet中的cmdlet )中获取C# cmdlet的输出。在我找到Microsoft.PowerShell.Commands.Utility程序集(在C:\Program (x86)\Reference \Microsoft\WindowsPowerShell\3.0下)之后,我可以编译这个程序集,但是它产生了空.

代码语言:javascript
复制
var cmd = new Microsoft.PowerShell.Commands.GetHostCommand();
var myHost = cmd.Invoke();

...while,这将不会编译,因为InternalHost类是(讽刺的!)内部:

代码语言:javascript
复制
var cmd = new Microsoft.PowerShell.Commands.GetHostCommand();
var myHost = cmd.Invoke<System.Management.Automation.Internal.Host.InternalHost>();

接下来,我修改了cmdlet以继承PSCmdlet而不是Cmdlet (允许访问SessionState),这样就可以访问PS主机对象,如下所示:

代码语言:javascript
复制
var psVarObject = SessionState.PSVariable.GetValue("Host");

当然,这会返回一个纯Object,然后我需要将它转换到.哦,等等..。还在内部!.因此,这将不会编译:

代码语言:javascript
复制
string psHost = ((System.Management.Automation.Internal.Host.InternalHost)psVarObject).Name;

让我别无选择,只能在国外的集会上进行反思(恐怖!):

代码语言:javascript
复制
string psHost = (string)psVarObject.GetType().GetProperty("Name").GetValue(psVarObject, null);

这是可行的,但并不理想,因为反思任何第三方大会都是一件很脆弱的事情。

对于(a)识别主机或(b)备份一点,能够使用主机自己的读主机cmdlet从用户那里获得输入,有什么其他的想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-25 17:02:44

您只需从主机类中使用PSCmdlet属性即可。如果你想做Read-Host

代码语言:javascript
复制
Host.UI.ReadLine()
票数 3
EN

Stack Overflow用户

发布于 2015-04-22 16:36:01

当得到

代码语言:javascript
复制
var psVarObject = SessionState.PSVariable.GetValue("Host");

您可以将其转换为System.Management.Automation.Host.PSHost而不是InternalHost

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28724213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档