问题标签 [pshost]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
738 浏览

c# - C#中的Powershell Sqlcmd弹出窗口

我有一个 PSHost 对象执行 Powershell 脚本 myscript.ps1 并且 .ps1 脚本正在执行 sqlcmd.exe 以完成它需要完成的工作。有没有办法让它不弹出空的 sqlcmd dos 提示(就像它看起来那样)?

0 投票
3 回答
6547 浏览

c# - 如何从 c# powershell 脚本执行中提取 $lastexitcode

我在这里使用代码项目上的 powershell 异步执行代码在 C# 中执行了一个 scipt:

http://www.codeproject.com/KB/threads/AsyncPowerShell.aspx?display=PrintAll&fid=407636&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2130851#xx2130851xx

我需要返回 $lastexitcode,Jean-Paul 描述了如何使用自定义 pshost 类返回它。我在 pshost 中找不到返回退出代码的任何方法或属性。

这个引擎我需要确保脚本正确执行。

任何帮助,将不胜感激。

问候鲍勃。

它的 $lastexitcode 和 $? 我需要带回来的变量。

你好,终于回答了。
我发现了 $host 变量。它实现了对主机的回调,特别是自定义 PSHost 对象,使您能够返回 $lastexitcode。这是 $host 解释的链接。

http://mshforfun.blogspot.com/2006/08/do-you-know-there-is-host-variable.html

与 powershell 文档一样,它似乎晦涩难懂,文档记录不充分。使用第 4 点,调用 $host.SetShouldExit(1) 将 1 返回到 pshost 的 SetShouldExit 方法,如此处所述。

http://msdn.microsoft.com/en-us/library/system.management.automation.host.pshost.setshouldexit(VS.85).aspx

它实际上取决于定义您自己的退出代码定义。我猜是 0 和 1 后缀。

问候鲍勃。

0 投票
3 回答
8657 浏览

powershell - 如何在 powershell 中使用运行空间建立和进入远程会话

我正在尝试在 C# 代码中从我的机器 A 与远程主机 B 建立会话。我正在为此使用运行空间 API。下面提供了代码片段

此代码预计将进入与机器 TS-TEST-09 的会话并调用该机器上现有的脚本 helper.ps1(该部分在当前代码中被注释掉,因为我无法进入与远程主机的会话)。

现在的问题是我无法使用 -Session 参数进入会话 $s(在 scripttext3 突出显示)但是我可以使用 -Computername 参数进入它。

在 scripttext3 中使用 -Session 参数时出现的错误是:

在调用System.Management.Automation.Internal.Host.InteralHost.GetIHostSupportsInteractiveSession()

在调用System.Management.Automation。Internal.Host.InteralHost.PushRunspace(运行空间运行空间)

在 Microsoft.Powershel.Commands.EnterPSSessionCommand.ProcessRecord()

在 System.Management.Automation.Cmdlet.DoProcessRecord()

在 System.Management.Automation.CommandProcessor.ProcessRecord()

内部异常堆栈跟踪结束


这是否意味着我必须编写一个自定义 PSHost 并使用此参数添加对 Enter-PSSession cmdlet 的支持?

有没有其他方法可以使这个命令起作用?

任何帮助都感激不尽。

谢谢,

马尼什

0 投票
1 回答
2095 浏览

c# - 从 C# 以编程方式调用 CmdLet 时如何捕获 Powershell CmdLet 的对象输出

背景

  • 带有 SDK 的 PowerShell 3
  • 带有框架 4.5 的 C#

执行

我已经使用 PSHostUserInterface 实现了我自己的PSHost登录。在PSHostUserInterface 中,我覆盖了所有Write...方法并收集到一个为输出提供服务的变量。

问题

在我的应用程序中,我调用使用WriteObject作为其输出的 Cmdlet。在PSHostUserInterface.Write...方法中,除了这些WriteObject的输出之外,我得到了所有内容。例如,我在常规 PowerShell 中看到了这一点:

这是命令的示例字符串输出

这里我们有来自 Cmdlet.WriteObject 函数的对象

这是命令的另一个字符串输出

这是我在应用程序的自定义 PSHost 中得到的:

这是命令的示例字符串输出

这是命令的另一个字符串输出

问题

如何在 C# 中获取 Cmdlet 的所有输出?

非常感谢

0 投票
1 回答
558 浏览

c# - C# 中的自定义 PSHost、Get-Credential cmdlet

我正在尝试实现一个自定义 PSHost 类,以便为 Power Shell 脚本制作 GUI。我已将此处的代码作为基础并开始将其改编为 GUI 项目 https://msdn.microsoft.com/en-us/library/ee706557%28v=vs.85%29.aspx

一切都很好,直到我尝试运行 Get-Credential cmdlet 并收到该方法未实现的错误(ooouuuu)...初始代码是这两种方法:

所以经过一些研究,我实现了这样的对话:

这工作正常,但有一个障碍,当运行 Get-Credential cmdlet 时,它会提示输入 Credential 参数的值,无论点击返回后的任何输入,都会弹出对话框并且一切都按预期工作。在 ISE 中执行相同操作,直接弹出对话框,没有任何提示。我认为这是由于方法的参数,但通过定义默认值使它们成为可选并没有什么不同。这可能是由于 cmdlet 在 PS 环境中是如何定义的,所以我的问题是:我怎样才能使它运行 cmdlet 将直接跳转到对话框?是否可以为要绑定的 Credential 参数定义默认值?我猜这就是 ISE 解决这个问题的方式,还是我错过了什么?

0 投票
0 回答
285 浏览

c# - PSHost PromptForChoice 格式 ChoiceDescription

在我的PSCmdlet课堂上,我要求用户使用PromptForChoice. 提示用户选择他想要使用的连接字符串。我无法给出ChoiceDescriptions正确的格式。

给我这个

连接字符串

选择您要使用的连接字符串

[0] 0数据源=.\SQLEXPRESS;集成安全=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户实例=true

[1] 1有效的连接字符串;

[2] 2Data Source=111.111.1.1;初始目录=Test;User id=User;Password=Password;MultipleActiveResultSets=true

[?] 帮助(默认为“0”):

如您所见,这些数字也在连接字符串文本中,这不是我想要的。

这就是我想要实现的目标:

[0] 数据源=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;用户实例=true

等等等等

因此,我需要将用户选择为int. 我怎样才能得到我想要达到的结果?

代码:

0 投票
1 回答
80 浏览

c# - 使用复杂命令渲染 Powershell 输出

我正在尝试通过 C# 应用程序执行 PS1 文件并根据严重性捕获/分割输出。错误、调试、信息等。这是一个 Windows 窗体应用程序。这是运行方法,我在单击按钮时调用它:

在我的 AddInfo 方法中,我正在检查对 UI 层的线程访问

我的PS1文件内容如下:

我看到的是“Test-Before”,就是这样。在 Get-WebBinding 命令之后,所有输出流似乎都没有收到任何内容。我尝试添加 Out-Default、Out-String 甚至指向 Out-File。似乎没有任何效果。

此处未显示的是其他流的其他 DataAdded 方法,包括错误、调试、详细、进度和警告。很想停止在这个上踢自己。:)

0 投票
1 回答
22 浏览

c# - 管理自动化主机矩形:bottom不能大于等于top

我收到一个错误,说底部不能大于或等于顶部。

我正在使用Rectangle此处记录的构造函数:https ://docs.microsoft.com/en-us/dotnet/api/system.management.automation.host.rectangle.-ctor?view=powershellsdk-1.1.0#System_Management_Automation_Host_Rectangle__ctor_System_Int32_System_Int32_System_Int32_System_Int32 _

这是我的相关代码部分;

我在构造函数之前看到了调试行,但从来没有看到“矩形集”消息。

这是输出;

我可以看到顶部大于底部,但我不断收到错误;"bottom" cannot be greater than or equal to "top"

这是一个错误,还是文档错误,还是我遗漏了什么。