问题标签 [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.
c# - 自定义 PowerShell 主机并将 PSObject 转换回基本类型
托管 PowerShell 运行时是否可以通过PSObject
某种方式将其转换回其原始类型?
例如:
我有一个 cmdlet,它在管道中调用WriteObject
和推送 ClassXzy 的集合。当我PowerShell.Invoke
从事物的主机端调用时,我检索具有属性的PSObject
s集合。BaseObject
铸造BaseObject
失败ClassXyz
。
有没有办法将每个属性值映射到其对应的原始对象?
我假设 PowerShell 以某种方式执行此操作,因为您可以将PSObject
s 传递给 cmdlet 并将它们转换为 Parameter 类型。但是怎么做?
我花了很长时间用 Reflector 研究 PS 组件,但还没有真正确定这种魔法是如何发生的。
有任何想法吗?
编辑:我忘记了一个非常重要的细节。PSObject
我正在测试的是一个远程对象,因此该类型BaseObject
被命名为Deserialized.ClassXyz
. 这就是为什么我看到这种奇怪的行为。
powershell - 每次加载管理单元时如何运行初始化代码?
我有一个 PowerShell 管理单元,我想在每次加载管理单元时运行一些初始化代码(挂钩一些 AppDomain 事件)(即每个启动的 powershell.exe 进程一次)。如何实现?
wpf - WPF 线程和自定义 Powershell 主机 - 由于用户中断命令,命令执行停止
我有一个带有 powershell 自定义主机的 WPF 应用程序,该主机运行存储在嵌入式资源中的脚本。加载后,用户单击执行按钮并调用脚本,但我看到以下错误:
命令执行停止,因为用户中断了命令
用户(即我)没有做任何事情来中断脚本,所以我猜这是某种线程问题。
该应用程序还接受一个命令行参数,告诉脚本立即执行。当我第一次添加此功能时,脚本运行完美,但直到完成后我才看到 WPF ui,所以我在主窗口视图模型的启动中添加了以下内容:
BackgroundWorker 在 UI 线程上运行 Completed 代码。这只是我经常使用的一个小技巧,而且大部分情况下都可以。
所以,我知道一个很长的问题,但是有没有人知道我做错了什么?
作为一个侧面或相关问题,当进程运行时,我也有通过数据绑定更新 ui 的问题。例如,我在状态栏中有一个在 IDLE 和 BUSY 之间切换的状态指示器,但这似乎永远不会改变,直到为时已晚。绑定工作正常,但就像我需要调用旧的 VB DoEvents() 一样。
干杯
powershell - 可以嵌入到程序中的带有智能感知的 Powershell 编辑器?
我有一个 C# 应用程序,并希望允许人们在我的应用程序中编写 powershell 代码。
有谁知道符合要求的具有智能感知功能的 powershell 编辑器?
powershell - 如何在 psprovider 中支持 powershell tab 扩展?
我正在为一些内部分层数据实现 Powershell PSProvider。一切正常,我可以使用通常的 cd/dir 命令在树中导航,唯一不起作用的是制表符完成。
我可以看到的是,当按下 Tab 时,Powershell 在路径中调用带有星号的函数 GetChildName()(如果我键入“dir c”并按 Tab,GetChildName() 函数将使用字符串“c*”调用几次)。我试图从以“c”开头的文件夹中返回所有子名称,但 Powershell 始终只在前面显示第一个子名称。我找不到有关此行为的任何文档,我缺少什么?
powershell - 在 PowerShell 提供程序中,您何时刷新与缓存数据?
我正在用 C# 编写一个 PowerShell 提供程序。提供者通过类似驱动器的接口公开应用程序域对象。例如:
这些数据最终来自数据库。
关于何时应该去数据库获取数据以及何时应该缓存它,我一直找不到任何很好的指导。我发现 PowerShell 多次调用 ItemExists 和 GetChildNames 等方法;经常重复相同的命令。例如,仅仅因为他们点击 Tab 进行自动完成而访问数据库 5 或 6 次是不切实际的。
但同时,作为命令提示符下的用户,如果我键入Get-ChildItem
( dir
) 并查看列表,然后在 PowerShell 之外执行一些操作,以便我知道数据已刷新,获取另一个目录列表应该会看到对数据库。
我觉得如果我知道描述我的问题的正确术语(用 PowerShell 用语),我将能够通过谷歌搜索答案或找到现有的重复问题,但我被卡住了。
c# - 无法从程序文件文件夹中运行 ps1 脚本
我可以从我的桌面完美地运行这个脚本:
但是,当我更改程序文件的路径时,它什么也不做……有什么想法吗?
与权限有关,脚本不需要管理员权限即可运行,当我从程序文件夹手动运行 ps1 脚本时就可以了。
我什至尝试了 %AppData% 文件夹并得到相同的结果,ps1 文件没有运行。
c# - Powershell 忽略通过 SessionStateProxy.SetVariable 传递的参数
我有以下 Powershell 脚本。
然后我尝试使用以下 C# 将参数传递给该脚本。
运行上述代码片段后,输出变量中的值“不工作”。它应该是“这是一个测试”。为什么忽略该参数?
谢谢
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 文件分析的非工作流脚本慢得多
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,那么你如何获取生成的值呢?