Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从powershell加密时如何分离.bat行_Powershell_Batch File_Cmd - Fatal编程技术网

从powershell加密时如何分离.bat行

从powershell加密时如何分离.bat行,powershell,batch-file,cmd,Powershell,Batch File,Cmd,我有一个10KB的powershell脚本,我正在尝试将其转换为.bat。脚本的格式是 1.声明常量2。一组for-each子项循环,包括发送电子邮件和移动文件。我制作的其他bat文件也可以工作 有6个非嵌套循环。 当每个循环的bat与声明隔离运行时,一切正常。当我组合3时,一组工作,另一组发送电子邮件而不移动文件。当所有这些都结合在一起时,什么都不起作用,命令提示窗口甚至不会弹出 我读到一个bat文件的行长度限制是127字节,我认为这就是我的问题的原因。我是否需要在powershell中执行某

我有一个10KB的powershell脚本,我正在尝试将其转换为.bat。脚本的格式是 1.声明常量2。一组for-each子项循环,包括发送电子邮件和移动文件。我制作的其他bat文件也可以工作

有6个非嵌套循环。 当每个循环的bat与声明隔离运行时,一切正常。当我组合3时,一组工作,另一组发送电子邮件而不移动文件。当所有这些都结合在一起时,什么都不起作用,命令提示窗口甚至不会弹出

我读到一个bat文件的行长度限制是127字节,我认为这就是我的问题的原因。我是否需要在powershell中执行某些操作来分隔行,以便bat文件不会尝试将其作为一行读取


为了转换,我使用了这里的脚本

您最初是为bat文件编写脚本还是编写代码的

如果没有,你能从备份中取出那个文件吗

我知道我们曾经对我们的KiX脚本进行编码,所以你应该拥有神奇的解码环。就个人而言,我会非常小心地对脚本进行编码,除非它们包含登录凭据。除此之外,我会把它们作为原始文本


谢谢

您可以使用从批处理文件调用原始PowerShell脚本

powershell.exe-ExecutionPolicy RemoteSigned-文件myscript.ps1

这样,您可以通过双击批处理文件来使用脚本

ExecutionPolicy参数可用于允许脚本运行,而无需更改计算机级ExecutionPolicy:

设置当前会话的默认执行策略并将其保存 在$env:PSExecutionPolicyPreference环境变量中。这 参数不会更改所使用的Windows PowerShell执行策略 在注册表中设置

这样,就不需要将PowerShell脚本转换为批处理,这可能根本不可能

您可以使用powershell.exe/?从命令提示中查找所有选项

请注意,PowerShell默认将ExecutionPolicy设置为Windows Server 2012 R2中的受限RemoteSigned。更改计算机范围内的计算机范围策略需要本地管理员权限

在powershell.exe上使用-ExecutionPolicy参数仅为本地作用域设置ExecutionPolicy

请参阅有关使用ExecutionPolicy的更多详细信息

获取有关\u执行\u策略的帮助

或者看看这里

您可以在中找到PowerShell.exe可执行文件

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe


请参阅:

这不是您问题的全部答案,但我特别想说明您的127字节断言。对于16位DOS可能是这样,但cmd.exe没有这样的限制

测试用例: 输出: longline是300字节


您会注意到,该页面上的“应用于”部分都是DOS版本,而不是CMD。我相信CMD下没有127字节的限制。这不太可能是问题的根源。尝试在您知道过程即将到达的位置打开echo,然后在问题部分之后的另一点添加暂停语句。这将限制显示的诊断数量,并可能帮助您跟踪问题。标题中的“加密”实际上是什么意思?你不是说转换了吗?不幸的是,计算机有很高的安全策略,我无法运行保存的PS脚本;我只能在ISE中选择代码并运行选择。@ClintEastwood对我来说这似乎是一个相当短视的安全策略。PowerShell脚本有什么害处,.bat文件或可执行文件不能做到?并不是因为它们专门禁用了ps脚本。在您更改权限之前,现成的计算机不会禁用运行ps脚本吗?我无法更改默认权限,因为我不是管理员。这很有帮助,我可以运行一些类似这样的脚本,但当bat调用此脚本时,此脚本不起作用。在所有答案中,这是最好的,因为它告诉我下一个问题的措辞,回家后我会这样做。我开始使用一个powershell脚本,它工作得非常好,但我需要它成为人们可以点击的东西,因为计算机上有高安全设置,我无法通过点击来运行保存的ps脚本。我使用了一个我在网上找到的蝙蝠制造者如果你的环境的安全设置阻止你完成工作,那么这些设置是错误的,因为没有更好的词。PowerShell与BAT文件一样,不存在任何安全风险。使用脚本签名来验证脚本是否未被篡改,可以更安全。向唱诗班宣讲
@echo off
setlocal

set "longline=############################################################################################################################################################################################################################################################################################################"

call :length %longline% len

echo longline is %len% bytes

:: end main script
goto :EOF

:length <string> <var_to_set>
setlocal enabledelayedexpansion
set "str=%~1"
for /l %%I in (1,1,1000) do (
    if "!str!"=="!str:~-%%I!" (
        endlocal && set "%~2=%%I"
        goto :EOF
    )
)