问题标签 [runspace]

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 投票
1 回答
1133 浏览

c# - New-PSSession 和 Runspacepool 说明

我需要使用 C# 中的 powershell 类运行 Exchange online cmdlet。

要运行交换在线 cmdlet,我需要建立一个远程 powershell 会话。

我的疑问是:1)如果 runspacepool 大小为 2,我是否应该在该 runspacepool 的两个运行空间中创建该远程 powershell 会话?如果是,我如何/是否有办法遍历运行空间以在两个运行空间中运行 New-PSSession 命令。

2)如果会话在一个运行空间中过期,有没有办法从运行空间池中获取特定的运行空间,并单独创建运行空间的新会话?

0 投票
2 回答
290 浏览

c# - 是否可以在 powershell 运行空间中获取当前定义的函数列表?

我知道我可以使用以下方法获取最初定义的命令:

或在 PowerShell 本身中:

但这仅代表创建运行空间之前的状态。

如果我导入一个模块(即使通过手动创建会话状态对象并sesh.ImportPSModule()在打开运行空间之前使用),这些函数或 cmdlet 都不会显示在列表中。

.AddScript()如果我用或其他东西定义一个新函数,也是一样的。

有没有办法从运行空间外部获取运行空间的当前状态而不仅仅是初始状态?

我考虑Get-Command过从运行空间内部调用并返回对象,但由于某种原因,这对我来说似乎是错误的。我觉得我在这里遗漏了一些简单的东西,应该有一种方法可以查看当前状态以及其中定义的内容。

0 投票
0 回答
164 浏览

c# - Win7 上未触发 Runspace.Debugger.DebuggerStop 事件

我正在使用此示例https://code.msdn.microsoft.com/windowsapps/Windows-PowerShell-f5c03f2d为 powershell 3+ 创建我自己的调试器。该示例在 Win 8.1(带有 Powershell 4)上按预期工作,而不是在带有 Powershell 版本 3 的 Win 7 上工作。当断点被击中时,不会触发 Runspace.Debugger.DebuggerStop 事件处理程序,但根据 MSDN 文档,它应该从 Powershell 开始工作2.我也试过更新PS到4版再5版,还是一样。有什么问题?

添加信息:

重现它的步骤:

  1. 下载该 C# 示例,在 Visual Studio 中打开它
  2. 下载 Windows Powershell SDK 并安装
  3. 构建该项目并在 Win7 上运行它

-> 新的控制台应用程序出现。此应用程序使用示例 powershell 代码生成 .ps1 文件,将断点设置为第 10 行,并为事件 BreakpointUpdated 和 DebuggerStop 添加事件处理程序。它运行那个 .ps1 文件并且应该通过调用 DebuggerStop 事件处理程序跳转到调试模式。但它没有发生。

Win 8.1 上的工作应用程序: - 断点被命中并调用自定义 DebuggerStop 事件 在此处输入图像描述

7x64 上的应用程序损坏 - 未命中断点 在此处输入图像描述

0 投票
1 回答
55 浏览

pipeline - 我创建了运行“Power Shell 脚本”脚本的函数

我创建了运行“Power Shell 脚本”脚本的函数。我使用 Pipeline 和 Runspace ro 运行脚本(例如:power shell get-service)并运行 1.000.000 次脚本“get-service”我看到: - 当运行 1 个脚本(1 个管道和 1 个运行空间)时,应用程序的内存大约是300MB,运行完成时,ram 大约是 70MB - ## Heading ##当运行 2,3,4 脚本(带有 2,3,4 管道和 2,3,..)然后应用程序的 ram 非常高,它是内存泄漏,ram 大约 1GB,.. 和 >2gb。我从这个位置看到问题:当事件 pipelineExecutor_OnDataReady 进程时,调用此函数时 ram 已启动:ConvertToDataTable()

0 投票
2 回答
4531 浏览

wpf - 在 Powershell 中使用带有运行空间的 Dispatcher Invoke

我正在尝试学习如何使用运行空间将值传递给 GUI。我一直在调整 Boe Prox 编写的脚本,试图了解 Dispatcher.Invoke 如何与运行空间一起工作,但遇到了一个非常奇怪的问题

Update-Window -Title ("Services on {0}" -f $Env:Computername)如果我在没有you cannot call a method on a null-valued expression.InvokeMethodOnNull 错误的情况下使用脚本的最后一行,并且不会附加文本。但是,如果我Update-Window -Title ("Services on {0}" -f $Env:Computername)在 Dispatcher.invoke 行的正上方添加,我仍然会收到错误,但文本框包含附加的文本。

发生这种情况的原因是什么?我已经尝试了很多方法来使用 Dispatcher.Invoke 向文本框添加内容,但总是以cannot call a method method on null错误告终,但没有任何成功,但现在添加一些引用 UI 的行并调用 Dispatcher.Invoke 似乎可以使它工作。

0 投票
1 回答
324 浏览

winforms - 在单独的运行空间中管道 ListView 项目

我有一个用 PowerShell 编写的表单(因为它使用 PS 在数百台服务器上运行命令),但这一点让我难倒了一段时间:

它位于一个单独的运行空间中,该运行空间将 Invoke-Command 运行到特定服务器并将输出通过管道传输到此代码块。

现在,如果我在主运行空间(创建表单的位置)中运行 Where 语句,它工作得非常好。但是,在单独的运行空间中,它会锁定表单。显示警告 1,不显示警告 2。

管道到 Foreach 语句有同样的问题,但我可以使用:

谁能解释一下?我没有对 ListView 或其项目做任何花哨的事情,似乎 ListView 不喜欢将其项目通过管道传输到另一个运行空间中。

0 投票
1 回答
423 浏览

powershell - 从另一个 PowerShell 运行空间管理对象和变量

我目前正在使用 Powershell 中的 System.Timers.Timer 对象。

我遇到的问题是,当您注册“Elapsed”事件时

脚本块将在不同的 Powershell 运行空间/线程中运行这里的问题是,我想修改脚本块中的计时器对象并基本上创建一个较短间隔的循环,直到它达到 x 秒并且脚本停止

我找到了定义运行空间的选项,但我不确定是否可以通过自定义运行空间使用计时器对象。另外我认为使用运行空间对于这项任务来说有点过头了。

还有另一种(更简单)的方法可以让它工作吗?如果没有,是否可以通过自定义运行空间来操作计时器对象?(如果我必须使用运行空间,我可能会以不同的方式执行此操作,但很高兴知道未来)

0 投票
0 回答
397 浏览

user-interface - 为什么我的 powershell GUI 滞后?

我正在尝试学习如何使用 powershell 运行空间实时更新 GUI。我在这里有一个简单的小代码,它启动了一个从 1 到 50 的循环并将它们输出到 GUI 上的文本框。GUI 没有锁定,但它非常滞后。如果我尝试在空白文本框中输入文本,状态框会停止更新或更新缓慢。我是否需要以某种方式更改我的代码以加快此过程?

0 投票
1 回答
679 浏览

c# - 如何在 C# 中迭代​​ PSObject?

从我的 C# 代码中,我正在调用一个 PowerShell 文件。此 PowerShell 文件调用如下 API:

从我的 C# 代码中,我将返回的结果存储在一个变量中,如下所示:

我在这里收到一个错误,说foreach不能对 System.Management.Automation.PSObject 类型的变量进行操作。

打印 'tickets' 会返回:

@{Id=581; CID=3;状态=活动}

@{Id=545; CID=6;状态=活动}

我需要能够遍历票中的每张票。

0 投票
0 回答
1076 浏览

c# - 在 C# 中模拟不适用于运行空间(powershell)

我在 C# 中模拟用户时遇到问题:

我模拟了数千个示例中使用的已知功能:

模仿后我跑

并获得正确的(模拟的)用户。

所以模仿通常是有效的。

但是,如果我在模拟后打开运行空间(powershell),则会使用模拟前的旧用户。

这是我使用的一些代码:

这是日志的内容:

Windows 身份:“impersonatedUser”<- 正确

来自 Powershell 的 WhoAmI:“NotImpersonatedUser”<- 不正确

我真的不知道我做错了什么。请帮忙,我已经浪费了这么多小时了......

这是我正在使用的模拟类的一部分: