问题标签 [powershell-sdk]

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 投票
3 回答
8661 浏览

c# - 自定义 PowerShell 主机并将 PSObject 转换回基本类型

托管 PowerShell 运行时是否可以通过PSObject某种方式将其转换回其原始类型?

例如:

我有一个 cmdlet,它在管道中调用WriteObject和推送 ClassXzy 的集合。当我PowerShell.Invoke从事物的主机端调用时,我检索具有属性的PSObjects集合。BaseObject铸造BaseObject失败ClassXyz

有没有办法将每个属性值映射到其对应的原始对象?
我假设 PowerShell 以某种方式执行此操作,因为您可以将PSObjects 传递给 cmdlet 并将它们转换为 Parameter 类型。但是怎么做?

我花了很长时间用 Reflector 研究 PS 组件,但还没有真正确定这种魔法是如何发生的。

有任何想法吗?

编辑:我忘记了一个非常重要的细节。PSObject我正在测试的是一个远程对象,因此该类型BaseObject被命名为Deserialized.ClassXyz. 这就是为什么我看到这种奇怪的行为。

0 投票
1 回答
133 浏览

powershell - 每次加载管理单元时如何运行初始化代码?

我有一个 PowerShell 管理单元,我想在每次加载管理单元时运行一些初始化代码(挂钩一些 AppDomain 事件)(即每个启动的 powershell.exe 进程一次)。如何实现?

0 投票
1 回答
381 浏览

wpf - WPF 线程和自定义 Powershell 主机 - 由于用户中断命令,命令执行停止

我有一个带有 powershell 自定义主机的 WPF 应用程序,该主机运行存储在嵌入式资源中的脚本。加载后,用户单击执行按钮并调用脚本,但我看到以下错误:

命令执行停止,因为用户中断了命令

用户(即我)没有做任何事情来中断脚本,所以我猜这是某种线程问题。

该应用程序还接受一个命令行参数,告诉脚本立即执行。当我第一次添加此功能时,脚本运行完美,但直到完成后我才看到 WPF ui,所以我在主窗口视图模型的启动中添加了以下内容:

BackgroundWorker 在 UI 线程上运行 Completed 代码。这只是我经常使用的一个小技巧,而且大部分情况下都可以。

所以,我知道一个很长的问题,但是有没有人知道我做错了什么?

作为一个侧面或相关问题,当进程运行时,我也有通过数据绑定更新 ui 的问题。例如,我在状态栏中有一个在 IDLE 和 BUSY 之间切换的状态指示器,但这似乎永远不会改变,直到为时已晚。绑定工作正常,但就像我需要调用旧的 VB DoEvents() 一样。

干杯

0 投票
2 回答
1476 浏览

powershell - 可以嵌入到程序中的带有智能感知的 Powershell 编辑器?

我有一个 C# 应用程序,并希望允许人们在我的应用程序中编写 powershell 代码。

有谁知道符合要求的具有智能感知功能的 powershell 编辑器?

0 投票
2 回答
486 浏览

powershell - 如何在 psprovider 中支持 powershell tab 扩展?

我正在为一些内部分层数据实现 Powershell PSProvider。一切正常,我可以使用通常的 cd/dir 命令在树中导航,唯一不起作用的是制表符完成。

我可以看到的是,当按下 Tab 时,Powershell 在路径中调用带有星号的函数 GetChildName()(如果我键入“dir c”并按 Tab,GetChildName() 函数将使用字符串“c*”调用几次)。我试图从以“c”开头的文件夹中返回所有子名称,但 Powershell 始终只在前面显示第一个子名称。我找不到有关此行为的任何文档,我缺少什么?

0 投票
1 回答
753 浏览

powershell - 在 PowerShell 提供程序中,您何时刷新与缓存数据?

我正在用 C# 编写一个 PowerShell 提供程序。提供者通过类似驱动器的接口公开应用程序域对象。例如:

这些数据最终来自数据库。

关于何时应该去数据库获取数据以及何时应该缓存它,我一直找不到任何很好的指导。我发现 PowerShell 多次调用 ItemExists 和 GetChildNames 等方法;经常重复相同的命令。例如,仅仅因为他们点击 Tab 进行自动完成而访问数据库 5 或 6 次是不切实际的。

但同时,作为命令提示符下的用户,如果我键入Get-ChildItem( dir) 并查看列表,然后在 PowerShell 之外执行一些操作,以便我知道数据已刷新,获取另一个目录列表应该会看到对数据库。

我觉得如果我知道描述我的问题的正确术语(用 PowerShell 用语),我将能够通过谷歌搜索答案或找到现有的重复问题,但我被卡住了。

0 投票
1 回答
708 浏览

c# - 无法从程序文件文件夹中运行 ps1 脚本

我可以从我的桌面完美地运行这个脚本:

但是,当我更改程序文件的路径时,它什么也不做……有什么想法吗?

与权限有关,脚本不需要管理员权限即可运行,当我从程序文件夹手动运行 ps1 脚本时就可以了。

我什至尝试了 %AppData% 文件夹并得到相同的结果,ps1 文件没有运行。

0 投票
1 回答
242 浏览

c# - Powershell 忽略通过 SessionStateProxy.SetVariable 传递的参数

我有以下 Powershell 脚本。

然后我尝试使用以下 C# 将参数传递给该脚本。

运行上述代码片段后,输出变量中的值“不工作”。它应该是“这是一个测试”。为什么忽略该参数?

谢谢

0 投票
4 回答
1120 浏览

powershell - 如何在 ScriptBlock 中传递 $_ ($PSItem)

我基本上是在使用运行空间构建自己的并行 foreach 管道函数。

我的问题是:我这样调用我的函数:

如何将$_参数正确传递到 ScriptBlock?它在 ScriptBlock 包含作为第一行时起作用

但是您可能已经注意到,powershell 内置的 ForEach-Object 和 Where-Object 不需要传递给它们的每个 ScriptBlock 中进行这样的参数声明。

提前感谢您的回答 fjf2002

编辑:

目标是:我希望函数用户感到舒适MyNewForeachFunction——他们不应该param($_)在他们的脚本块中写一行。

在里面MyNewForeachFunction,目前通过调用 ScriptBlock

编辑2:

关键是,例如内置函数的ForEach-Object实现如何实现$_不需要在其 ScriptBlock 参数中声明为参数的功能,我也可以使用该功能吗?

(如果答案是,ForEach-Object是一个内置函数并且使用了一些我无法使用的魔法,那么在我看来,这将取消整个语言 PowerShell 的资格)

编辑3:

感谢 mklement0,我终于可以构建我的通用 foreach 循环。这是代码:

部分来自 MathiasR.Jessen 的代码,为什么 PowerShell 工作流比用于 XML 文件分析的非工作流脚本慢得多

0 投票
1 回答
1748 浏览

c# - 如何在 C# 中获取 PSObject.Properties 的 ScriptProperty 值?

我正在尝试使用“GET-PSDrive”命令通过 PowerShell 6.0 获取服务器的驱动器信息。直接在 PowerShell 中运行命令,我在输出表中看到了“Used”和“Free”的值,但是虽然使用 Microsoft.Powershell.Sdk 在代码中运行相同的命令,但“Used”和“Free”字段不是可用的。

我看到 PSObject.Properties 数组下列出了这两个项目,但尝试访问我收到异常的值:

“在此线程中没有可用于运行脚本的运行空间。您可以在 System.Management.Automation.Runspaces.Runspace 类型的 DefaultRunspace 属性中提供一个。您尝试调用的脚本块是:##”

以下是我正在使用的 POC 代码:

我期望获得该属性的值,但每次评估该值时,我都会收到一条错误消息,指出没有可用的运行空间。检查属性我确实看到它是一个 ScriptProperty,那么你如何获取生成的值呢?