如何从我的 powershell 脚本向 git 的凭据用户提示发送用户名和密码?

How do I send a username and password to git's credential user prompt from my powershell script?

我正在使用脚本来签出和更新分支列表。我能够 retrieve git credentials from the Windows Credential Manager 并且我需要使用它们来响应 git 凭据的提示。

如何从我的脚本向 git 用户提示符发送文本?我已尝试使用 ECHO 并将文本直接传送到 git 调用,但两种方法均无效(提示仍然出现,但未输入任何内容)。

[PSCredential]$cred = Get-StoredCredential gitCred
$cur_head = "$(git rev-parse --abbrev-ref HEAD)"
$cred.Username |  git pull origin ${cur_head} -q

ECHO $cred.Username |  git pull origin ${cur_head} -q

注意:我正在使用 windows 凭证管理器来存储我的 git 凭证,我不想将它们放在任何其他凭证管理器中

在我的几个脚本中,我使用了这个:

$env:GIT_USER="."
$env:GIT_PASS=$token
Invoke-Git config --global credential.helper "!f() { echo \`"username=`${GIT_USER}`npassword=`${GIT_PASS}\`"; }; f"

从 运行 powershell 会话的环境中传递任意 username/password。上面的代码传递了个人访问令牌,但您可以轻松地使用不同的值设置环境变量。

您还可以安装 Git Cretential Manager (Core),它会自动从 windows 凭据管理器中获取凭据。

对于那些对 Invoke-Git 的实施感兴趣的人:

function Invoke-Git {
<#
.Synopsis
Wrapper function that deals with PowerShells peculiar error output when Git uses the error stream.
.Example
Invoke-Git ThrowError
$LASTEXITCODE
#>
    [CmdletBinding()]
    param(
        [parameter(ValueFromRemainingArguments=$true)]
        [string[]]$Arguments
    )

    & {
        [CmdletBinding()]
        param(
            [parameter(ValueFromRemainingArguments=$true)]
            [string[]]$InnerArgs
        )
        if ($isDebug) { "git $InnerArgs" }
        git $InnerArgs
    } -ErrorAction SilentlyContinue -ErrorVariable fail @Arguments

    if ($fail) {
        $fail.Exception
    }

}