Wscript.Shell Exec 中的单词 "encode" 确实会阻止 运行 中的 powershell 脚本。我能做什么?
The word "encode" in a Wscript.Shell Exec does prevent powershell script from running. What can I do?
在疯狂思考为什么我的脚本无法处理客户提供的数据的一天后,我想通了,这是我命令中某处用双引号和单引号引起来的“编码”一词,这会阻止 Wscript.Shell 打开 powershell(命令在其中按预期工作)。德语的特点是通过添加“n”来附加“Marke”和“Code”等词,因此“Markencode”允许很多包含“encode”的词。 :/
我创建了一些最小的 vba 示例来说明问题。有人知道解决办法吗?
Option Explicit
Const HK = """"
Sub ScanDrive()
Dim s As String, command As String
Dim oExec As Object
command = "echo 'encode'"
Debug.Print (command)
Set oExec = CreateObject("Wscript.Shell").Exec("powershell.exe -command " & HK & command & HK)
Do While oExec.Status = 0
Application.Wait (Now + TimeValue("0:00:01"))
Loop
Debug.Print (oExec.ExitCode)
s = oExec.StdOut.ReadAll
Debug.Print (s)
End Sub
输出为(VBA 版本 7.1.1108 in Excel):
echo 'encode'
-536870873
很遗憾,我找不到该退出代码的任何内容。顺便说一句...输入 'decode' 而不是 'encode' 效果很好。
由于这似乎不是一般性问题,我通过将字符串拆分为“en”和“code”然后让 powershell 将其放回一起来解决这个问题。
'...
pos = InStr(fileName, "encode")
If pos > 0 Then
Dim l, r As String
l = Left(fileName, pos + 1) & "'"
r = "'" & Right(fileName, Len(fileName) - (pos + 1))
'Split filename after "en" and before "code"
fileName = "-join(" & l & " , " & r & " )"
Debug.Print "Had to split the filename: " & fileName
End If
'...
也许这对某人有帮助:)
在疯狂思考为什么我的脚本无法处理客户提供的数据的一天后,我想通了,这是我命令中某处用双引号和单引号引起来的“编码”一词,这会阻止 Wscript.Shell 打开 powershell(命令在其中按预期工作)。德语的特点是通过添加“n”来附加“Marke”和“Code”等词,因此“Markencode”允许很多包含“encode”的词。 :/
我创建了一些最小的 vba 示例来说明问题。有人知道解决办法吗?
Option Explicit
Const HK = """"
Sub ScanDrive()
Dim s As String, command As String
Dim oExec As Object
command = "echo 'encode'"
Debug.Print (command)
Set oExec = CreateObject("Wscript.Shell").Exec("powershell.exe -command " & HK & command & HK)
Do While oExec.Status = 0
Application.Wait (Now + TimeValue("0:00:01"))
Loop
Debug.Print (oExec.ExitCode)
s = oExec.StdOut.ReadAll
Debug.Print (s)
End Sub
输出为(VBA 版本 7.1.1108 in Excel):
echo 'encode'
-536870873
很遗憾,我找不到该退出代码的任何内容。顺便说一句...输入 'decode' 而不是 'encode' 效果很好。
由于这似乎不是一般性问题,我通过将字符串拆分为“en”和“code”然后让 powershell 将其放回一起来解决这个问题。
'...
pos = InStr(fileName, "encode")
If pos > 0 Then
Dim l, r As String
l = Left(fileName, pos + 1) & "'"
r = "'" & Right(fileName, Len(fileName) - (pos + 1))
'Split filename after "en" and before "code"
fileName = "-join(" & l & " , " & r & " )"
Debug.Print "Had to split the filename: " & fileName
End If
'...
也许这对某人有帮助:)