首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在带有多个引号的Windows Docker容器中执行WMI查询?

如何在带有多个引号的Windows Docker容器中执行WMI查询?
EN

Stack Overflow用户
提问于 2020-10-12 16:41:56
回答 1查看 303关注 0票数 1

我很难在docker容器中执行WMI查询。在我的主机上,我可以执行下面的查询,没有任何问题。

代码语言:javascript
运行
复制
Get-WmiObject -Namespace "root\cimv2" -query "select HotfixID from Win32_QuickFixEngineering where HotFixID = `"KB4571756`"" 

但是,当我尝试在docker容器中执行相同的查询时,我经常收到错误,例如:

代码语言:javascript
运行
复制
docker exec my_container powershell "Get-WmiObject -Namespace `"root\cimv2`" -query `"select HotfixID from Win32_QuickFixEngineering where HotFixID = `"KB4571756`"`""

请注意,我尝试转义命令中的每个引号。上述命令的错误为:

代码语言:javascript
运行
复制
The string is missing the terminator: ".
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordEx
   ception
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

我尝试使用不同的引用,比如"',但都没有成功。我知道我可以用docker交互模式执行相同的查询,没有问题,但是这个查询需要以这样一种方式集成,我可以用Stdin执行它们,并从我编写的另一段代码中读取Stdout的输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-12 18:09:02

有两种可能的方式:

A)在命令中对字符串使用单引号

代码语言:javascript
运行
复制
docker exec my_container powershell "Get-WmiObject -Namespace 'root\cimv2' -Query 'select HotfixID from Win32_QuickFixEngineering where HotFixID = ''KB4571756'''"

B)使用EncodedCommand

代码语言:javascript
运行
复制
$command = { Get-WmiObject -Namespace "root\cimv2" -Query "select HotfixID from Win32_QuickFixEngineering where HotFixID = 'KB4571756'" }
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command.ToString())
$encodedCommand = [Convert]::ToBase64String($bytes)

docker exec powershell -EncodedCommand $encodedCommand
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64314424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档