如何通过为批处理文件中的变量运行powershell脚本为其赋值?

如何通过为批处理文件中的变量运行powershell脚本为其赋值?,powershell,batch-file,variables,powershell-2.0,powershell-3.0,Powershell,Batch File,Variables,Powershell 2.0,Powershell 3.0,我有两个文件,一个是名为validator.bat的批处理文件,另一个是powershell脚本checker.ps1 验证程序.bat 要使用powerhell脚本为变量传递赋值 checker.ps1 我想将输出字符串“matched”/“different”分配给bat文件中的pass变量,但只使用powershell脚本或其代码。 我在谷歌和Youtube上搜索了很多,但我找不到解决问题的方法。 请帮帮我。validator.bat @echo OFF for /f %%a in ('p

我有两个文件,一个是名为validator.bat的批处理文件,另一个是powershell脚本checker.ps1

验证程序.bat

要使用powerhell脚本为变量传递赋值

checker.ps1

我想将输出字符串“matched”/“different”分配给bat文件中的pass变量,但只使用powershell脚本或其代码。 我在谷歌和Youtube上搜索了很多,但我找不到解决问题的方法。 请帮帮我。

validator.bat

@echo OFF
for /f %%a in ('powershell -file checker.ps1') do set "pass=%%~a"
echo %pass%
检查器.ps1

$pwd1 = Read-Host "Enter your password: "
$pwd2 = 'password'
if ($pwd1 -ceq $pwd2) {
    Write-Host "matched"
} else {
    Write-Host "differ"
}
注意,这不会在键入密码时屏蔽密码。您需要在读取主机上使用
-AsSecureString
,然后将其转换为常规字符串进行比较。可能有一种方法可以比较我不知道的安全字符串。

validator.bat

@echo OFF
for /f %%a in ('powershell -file checker.ps1') do set "pass=%%~a"
echo %pass%
检查器.ps1

$pwd1 = Read-Host "Enter your password: "
$pwd2 = 'password'
if ($pwd1 -ceq $pwd2) {
    Write-Host "matched"
} else {
    Write-Host "differ"
}

注意,这不会在键入密码时屏蔽密码。您需要在读取主机上使用
-AsSecureString
,然后将其转换为常规字符串进行比较。可能有一种方法可以比较我不知道的安全字符串。

每个会话都有环境变量。因此,如果您使用
set
…在cmd.exe中创建/更改一个EnvVar,它将只被该会话以及该会话的子会话看到。你能在一次会议上完成所有这些吗?是的,我能在一次会议上完成。我需要通过在bat文件中写入来运行powershell的完整代码,但这不允许我输入数据。那么我怎么才能得到值呢?如果你在powershell中做所有事情。。。那么你就不需要再处理将BAT/CMD与PoSh混合的问题了。如果您不能做到这一点,那么
保存到文件
可能是您唯一的希望。我想在powershell中完成所有工作,但我知道某些任务的bat文件代码,但我不知道如何将其转换为powershell。还有一些我在powershell中知道的功能,但我不知道如何在Bat中使用。谢谢你的“为什么”![咧嘴笑]如果你致力于将东西翻译成一个powershell脚本,你可能会过得更好。。。但是,如果你有急事,那么做一些事情,如DougMaurer的答案所示。环境变量是每一个会话。因此,如果您使用
set
…在cmd.exe中创建/更改一个EnvVar,它将只被该会话以及该会话的子会话看到。你能在一次会议上完成所有这些吗?是的,我能在一次会议上完成。我需要通过在bat文件中写入来运行powershell的完整代码,但这不允许我输入数据。那么我怎么才能得到值呢?如果你在powershell中做所有事情。。。那么你就不需要再处理将BAT/CMD与PoSh混合的问题了。如果您不能做到这一点,那么
保存到文件
可能是您唯一的希望。我想在powershell中完成所有工作,但我知道某些任务的bat文件代码,但我不知道如何将其转换为powershell。还有一些我在powershell中知道的功能,但我不知道如何在Bat中使用。谢谢你的“为什么”![咧嘴笑]如果你致力于将东西翻译成一个powershell脚本,你可能会过得更好。。。但是,如果您有急事,请执行DougMaurer的回答中所示的操作。您可以使用将安全字符串转换为460个字符的普通字符串。可以存储在脚本中(代替
'password'
)并使用ConvertTo SecureString转换为安全字符串。然而,据我所知,你必须通过一个稍微曲折的途径来比较它们。是的,我已经完成了获取安全密码、哈希和比较的部分。非常感谢你解决了我的问题,这里是关于如何比较安全字符串的答案。可以使用将安全字符串转换为460个字符的普通字符串。可以存储在脚本中(代替
'password'
)并使用ConvertTo SecureString转换为安全字符串。然而,据我所知,你必须通过一个稍微曲折的途径来比较它们。是的,我已经完成了获取安全密码、哈希和比较的部分。非常感谢你解决了我的问题,这里是关于如何比较安全字符串的答案。