我很难在docker容器中执行WMI查询。在我的主机上,我可以执行下面的查询,没有任何问题。
Get-WmiObject -Namespace "root\cimv2" -query "select HotfixID from Win32_QuickFixEngineering where HotFixID = `"KB4571756`""
但是,当我尝试在docker容器中执行相同的查询时,我经常收到错误,例如:
docker exec my_container powershell "Get-WmiObject -Namespace `"root\cimv2`" -query `"select HotfixID from Win32_QuickFixEngineering where HotFixID = `"KB4571756`"`""
请注意,我尝试转义命令中的每个引号。上述命令的错误为:
The string is missing the terminator: ".
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
我尝试使用不同的引用,比如"
或'
,但都没有成功。我知道我可以用docker交互模式执行相同的查询,没有问题,但是这个查询需要以这样一种方式集成,我可以用Stdin执行它们,并从我编写的另一段代码中读取Stdout的输出。
发布于 2020-10-12 18:09:02
有两种可能的方式:
A)在命令中对字符串使用单引号
docker exec my_container powershell "Get-WmiObject -Namespace 'root\cimv2' -Query 'select HotfixID from Win32_QuickFixEngineering where HotFixID = ''KB4571756'''"
B)使用EncodedCommand
$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
https://stackoverflow.com/questions/64314424
复制相似问题