是否可以通过批处理脚本在文件中存储和检索密码?

问题描述 投票:1回答:1
@ECHO OFF
DFC.EXE get /isfrozen

IF Errorlevel 1 GOTO Frozen
IF Errorlevel 0 GOTO Thawed

:Frozen
Echo Errorlevel 1 Computer is Frozen, Thawing Now
DFC.EXE fakepassword123 /BOOTTHAWED
Echo
Goto END

:Thawed
Echo Errorlevel 0 Computer is Not Frozen
Echo
Goto END

:END
Exit

我正在尝试运行一个非常简单的批处理文件,但是如果有人要编辑它,我不希望密码以纯文本格式存储。

现在,DFC.exe密码行是存储密码的位置。

是否有办法将此密码隐藏在另一个文件中并从那里调用?

windows powershell batch-file vbscript
1个回答
0
投票
您可以使用PowerShell将密码存储在磁盘上,这种方式(默认情况下)只能由创建该密码的计算机上当前正在执行的用户检索。如果您无法在PowerShell中编写整个脚本,则至少可以通过在脚本执行期间调用powershell.exe来执行此操作。

要创建凭据文件(这将提示您输入凭据,

在这种情况下,用户名无关紧要,但必须提供]]

powershell.exe -c "Get-Credential | Export-CliXml cred.xml"
Export-CliXml是一个特殊的cmdlet,可将PowerShell对象序列化到磁盘,并且有一些局限性(例如,不要尝试对COM对象进行操作并期望它能正常工作),通常可以用来读回该对象进入另一个会话,如下所示。并将其从脚本读入变量并在命令中使用它:

for /f %i in ('powershell.exe -c "( Import-CliXml cred.xml ).GetNetworkCredential().Password"') do set PASSWORD=%i DFC.EXE %PASSWORD% /BOOTTHAWED

我们需要获取网络证书,以便在该命令中获得可用的密码。如果您确实在其他命令中也需要用户名,则也可以通过类似的方式获取用户名:

for /f %i in ('powershell.exe -c "( Import-CliXml cred.xml ).UserName"') do set PASSWORD=%i

对于用户名,它没有加密,因此您无需返回网络凭据即可获得可用的用户名。


请注意,当更改帐户密码时,如果依赖默认的加密行为,则必须重新生成cred.xml
© www.soinside.com 2019 - 2024. All rights reserved.