批量文件中的Powershell。错误和命令无法执行

问题描述 投票:0回答:1

下面你可以找到我将使用的两个示例文本文件的内容。example1.txtobf_example1.txt. 后者包含的字符串是 example1.txt 但在文件的最后有一些混淆的字符串。

example1.txt:

adasdkasdaksdasdkjlasdjasndjasd.

obf_example1.txt:

ŠxpÃÒ²Ø-Gêÿ ój"f>ïí   H€À(ø4$/+#6Ni9Pvü¶ |CF CÀ¾ý~ª-°à9ÉOÿ V[o¦.E…-Š  ƒ9Ú\žê*D´ß()^“£¹ìÅjXÑÍ¥â(¨µ×d'«P|I*èSººº&)Ø|̉ òÔ®¥Ô$LÁ:9ŠLá{¶nZÒبNÙÀØŒ‹0õ´Sék›áÇÉîÆbËF§BЄƒöZKaÒR ²°ÅšDn?+¶()IªP›$ÇEv©¡k€[ßè¨×q-Ëk!µTóPA²—: A ?ÉEEEGÐJúÌ©ÒWµHB¡aäXû|ÓË BPÁwr„Ûi¥åܺÈQ÷ORàSb,Šv¢D ,Žb’(2 öb¢wtKzíĦ#ï¯u©²Ù  aîR隬ëÌTbà÷¥3ÄtSGì´R$)X   Šù
'¹¨D³ÞeOK3!{·‹¦cäиNÅô:Na1žAÇ1ø8 &Fuôë %¸T¯_òMå†C"ý¤F   ™º„Iµºí4Ü¡ˆc!ì•+3 ‰‹M K@JÁ«8¢bsL†!Ù“à­šn·öMå•Œ&ýèvÀ}¨?¦hùÊò(É@Žf~5‰‘qØçþƒ‰Å²ÓÖÊJU•âNWÁ«L¼Y”$G¢ßè&§ÖÉØŒS‘WàË„°SØW Ð¨´_è%‚Å¢ø.ãÃð”#X^þ*1þ‚q85¡lÒ‚Ò>‘¸ÿ £ôQôz#ø¤ÎõÚªï|Xö%;åÍËûGú+îUƒö³‰›p    U±Ò ðtÜGÜÿ  ð,åXÿ k8È I”ÿ “½¿Ð`¨u5=SÓqyFÈ É8ôã¨ð£è6’H@lÄI10‚Ö§ÑdµÖ?t¡]D†9Zj,¥EɺÜEq¤@,ìn—¢º‚´€bc·ú¨Lû£ÿ Ó×ÿÙ||adasdkasdaksdasdkjlasdjasndjasd.

当我运行以下powershell命令 example.txt 在一个批处理文件中,它工作了,我得到了example.txt的输出。

@echo off
for /f "delims=" %%a in ('powershell Get-Content .\example.txt') do set _output=%%a
echo %_output%

adasdkasdaksdasdkjlasdjasndjasd

到目前为止还不错

然而,当我运行上面的powershell命令时,我发现 obf_example1.txt但它不工作,我得到以下错误信息。

'¹¨D³ÃzeOK3!{·â?¹Â¦cäÃ?Â?¸Â?NÃ.ô:Na1žAÃ╬1ø8 
The command "FuôëÂ" is either misspelled or could not be found.
The command "ýèvÃ?}¨?¦hùÃSÂ?ò" is either misspelled or could not be found.

为什么?我想,不要紧。因为我只对最后一个感兴趣 n 两字 example1.txtobf_example1.txt 因此,我的想法是提取最后的 n 字符,并检查是否可以看到输出的 obf_example1.txt 然后。为了检查我的想法是否可行,我运行下面的命令来进行 example1.txt 以获得最后4个字符为例。

@echo off
for /f "delims=" %%a in ('powershell $a=Get-Content .\example.txt; $a.substring^(0,$a.length-4^)') do set _output=%%a
echo.%_output%

它没有显示任何东西,虽然。%_output% 似乎是空的。如何解决这个问题?修正版能不能适用于 obf_example1.txt 以便我在那里得到一个输出而不是上面的错误信息?

powershell batch-file batch-processing
1个回答
2
投票

你可以尝试读取最后4个字节,如果你真的从一个明显不是文本文件的文件中读取文本字符。(我的猜测是,它是隐藏在二进制文件中的文本,可能是一个图形文件).

@For /F Delims^=^ EOL^= %%G In (
 '%__AppDir__%WindowsPowerShell\v1.0\powershell.exe  -NoP^
 "$f=[IO.File]::OpenRead('C:\Users\Ferit\Desktop\obf_example1.txt');"^
 "$f.Seek(-4,[System.IO.SeekOrigin]::End)|Out-Null;$buffer=new-object Byte[] 4;"^
 "$f.Read($buffer,0,4)|Out-Null;$f.Close();"^
 "[System.Text.Encoding]::UTF8.GetString($buffer)"')Do @Set "_output=%%G"
@Set _output 2>NUL&&Pause

不要忘记修改文本文件路径。(在线 3)和三个实例 4 如果你想要更多或更少的字节。最后一行只是为了给你看输出。(你显然会用你自己的代码代替).


3
投票

显然,你要找的那段文字是在后面的 ||.

在PowerShell中,你可以通过使用

((Get-Content 'D:\Test\obf_example1.txt' -Raw) -split '\|\|')[-1]

返回

adasdkasdaksdasdkjlasdjasndjasd。

这不是你想要的吗?


1
投票

下面的方法可以让我得到 "清晰文本 "的部分,在 || (从你的例子)。

for /f "delims=" %%a in (.\obf_example1.txt) do set "_output=%%a"
set _output
echo testing last 10: %_output:~-10%
set "_output=%_output:*||=%"
set _output
echo %_output%

(可能对不同编码的文本文件无效)

(考虑Powershell - cmd 对行长有限制,容易被淹没)

© www.soinside.com 2019 - 2024. All rights reserved.