我有一个函数,它接受十六进制Mongo作为输入,将其转换为Base64,然后对MD5数据库发出find。
下面代码段中的字符串$Base64MD5包含:lxCzLiriwm0tPHW+r0wawQ==,它作为有效的Base64检出。
添加到mongo命令字符串并执行时:
$Hashhit = mongo --host $connectionString --eval @'
db.Media.findOne
(
{ 'Batches.Hashes.Hash': BinData(0, '$Base64MD5') }
)
'@我得到了:
<MongoDBValidate> MongoDB shell version v4.0.15 connecting to: mongodb://localhost:27018/
local?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("acec5f08-d0b4-438c
-9782-bce72b585a22") } MongoDB server version: 4.0.4 2020-02-03T08:58:27.235+0000 E QUERY
[js] Error: invalid base64 : @(shell eval):3:26这有点令人困惑。我们非常欢迎您的任何建议。
发布于 2020-02-04 00:49:20
您在mongo命令行中使用了带单引号的here-string,这意味着它没有插入$Base64MD5变量-它实际上是将字符串$Base64MD5作为第二个参数嵌入到BinData中。
将此示例与此处的单引号-字符串(@' ... '@)进行比较:
PS> $aaa = "myfile.txt"
PS> x$ = notepad @'
>> $aaa
>> '@这将启动记事本并显示错误Cannot find the $aaa.txt file.
对比双引号(@" ... "@)
PS> $aaa = "myfile.txt"
PS> x$ = notepad @"
>> $aaa
>> "@这将显示错误Cannot find the myfile.txt file.。
尝试将您的here-string分隔符更改为双引号-即:
$Hashhit = mongo --host $connectionString --eval @"
db.Media.findOne
(
{ 'Batches.Hashes.Hash': BinData(0, '$Base64MD5') }
)
"@看看这是否有效..。
https://stackoverflow.com/questions/60036224
复制相似问题