【问题标题】:How to assign value to a variable in Batch file by running powershell script for it?如何通过为其运行powershell脚本为批处理文件中的变量赋值?
【发布时间】:2021-01-20 17:52:57
【问题描述】:

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

validator.bat

    @echo OFF
    set/p "pass=>"
    echo %pass%

变量 pass 将使用 powerhell 脚本赋值。

checker.ps1

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

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

【问题讨论】:

  • 环境变量是每个会话。因此,如果您使用 set 在 cmd.exe 中创建/更改 EnvVar ...它只会被该会话和该会话的子会话看到。你能在一个会话中完成所有这些吗?
  • 是的,我可以一次完成。我需要通过将其写入 bat 文件来运行 powershell 的完整代码,但这不允许我输入数据。那我将如何获得价值?
  • 如果你在 powershell 中做所有事情......那么你将不需要解决将 BAT/CMD 与 PoSh 混合的问题。如果你做不到,那么save to a file 的想法可能是你唯一的希望。
  • 我想在 powershell 中做所有事情,但我知道某些任务的 bat 文件代码,我不知道如何转换为 powershell。还有一些我在powershell中知道的功能,我不知道如何在Bat中使用。????
  • 感谢您的“为什么”! [grin] 如果您将事情翻译成一个 powershell 脚本,您可能会更好......但是如果您很着急,那么请执行 DougMaurer 的答案中所示的操作.

标签: powershell batch-file variables powershell-2.0 powershell-3.0


【解决方案1】:

validator.bat

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

checker.ps1

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

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

【讨论】:

  • 您可以使用ConvertFrom-SecureString 将安全字符串转换为460 个字符的普通字符串。这可以存储在脚本中(代替'password')并使用ConvertTo-SecureString 转换为安全字符串。但是,根据this answer的说法,要比较它们,你必须走一条稍微曲折的路线。
  • 是的,我已经完成了获取安全密码、散列和比较的那部分工作。
  • 非常感谢您解决了我的问题?
  • 这里是关于如何比较安全字符串的答案。 stackoverflow.com/questions/38901752/…
猜你喜欢
  • 2017-04-02
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2013-07-30
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多