Powershell:使用“find”命令调用表达式

Powershell:使用“find”命令调用表达式

我需要通过其绝对路径调用 DISM.exe,该路径会根据系统体系结构而变化。因此,我将 dism.exe 的文件路径存储在一个变量中,然后继续通过 执行 wntire 命令invoke-expression,如下所示:

$dism = "C:\Windows\sysnative\dism.exe"
invoke-expression "$dism /online /enable-feature /featurename:$index"

这工作正常。但是,我还必须将 DISM 的输出导入 find 命令,因此我尝试这样做:

invoke-expression "$dism /online /get-featureinfo /featurename:$index | find `"State :`""

这给了我错误“FIND:参数格式不正确”我尝试将 find 的参数字符串放入其自己的变量中->没有任何结果。

如何在调用invoke-expression函数时传递带引号的字符串?

编辑:通常我会使用任何 DISM 命令的 cmdlet 版本(在这种情况下我可以使用get-WindowsOptionalFeature)。但是,此脚本是通过 SCCM 软件中心推出的应用程序的一部分。我不能在这里使用 cmdlet 版本的原因如下:SoftwareCenter 是一个 32 位应用程序,因此 powershell 脚本也在 32 位模式下运行。我必须修改 32 位和 64 位图像。我通过从隐藏的 sysnative 文件夹启动 Powershell 来解决这个问题(解释见这里)。
但是,由于我无法提前知道我修改的图像是 32 位还是 64 位,因此我必须在脚本开头检查,然后将 Powershell 的相应程序路径存储在变量中。
现在,我知道我可以使用invoke-expression(参见上面的代码)调用存储在变量中的带参数的命令。我不知道如何使用 cmdlet 执行此操作,因为这不允许我使用自定义程序路径。这就是为什么我不得不使用旧的 dism.exe 命令。我现在有一个解决整个情况的解决方法,即使用一个“启动器”脚本提前检测位数,然后使用相应版本的 Powershell 启动我的实际脚本。

最初的问题是“如何将包含引用参数的参数传递给-command invoke-expresion,仍然存在...提前谢谢您!

答案1

我相信你在 find 表达式中遗漏了“

尝试这个

| find "`"State :`""

相关内容