You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code中使用Get-StoredCredential函数遇模块认证问题求助

问题解答

1. VS Code是否支持通过.cred文件存储凭据?

VS Code本身不对这类文件做限制,核心取决于PowerShell环境的处理逻辑。你的Get-StoredCredential能在VS Code中正常列出凭据,说明文件读取、ConvertTo-SecureString转换等操作均能正常执行,VS Code并不阻止这类凭据存储方式。

2. 针对微软在线模块认证的解决方法

微软在线模块(如Exchange Online、Azure AD模块等)大多支持传入PSCredential对象,但需注意以下细节:

  • 确认模块的认证cmdlet是否接受-Credential参数(例如Connect-ExchangeOnline -Credential $cred)
  • 若使用基于MSAL的新版模块,默认可能采用交互式/设备码登录,需明确指定凭据登录的参数(部分模块需添加-UseOAuthAuthentication,或按需调整认证模式;不推荐强制禁用现代认证)
  • 验证凭据有效性:执行$cred = Get-StoredCredential -UserName "你的账号"后,可临时通过$cred.GetNetworkCredential().Password确认密码是否正确(仅用于测试,请勿在生产环境执行)
  • 官方推荐方案:使用PowerShell SecretManagement模块,这是标准化的凭据管理工具,支持多种存储提供商,安全性更高,且微软模块对其兼容性更好。

3. 问题出在模块、VS Code、PowerShell扩展还是三者皆有?

大概率与VS Code或PowerShell扩展无关:

  • 你的Get-StoredCredential能正常运行,说明PowerShell扩展提供的运行环境无问题
  • 问题核心是模块接收凭据的逻辑:要么是模块不支持当前传入的PSCredential格式(如部分现代模块不再接受明文凭据),要么是调用模块时遗漏了必要参数
  • 少数可能:OneDrive路径的文件访问权限问题(你的$keypath位于OneDrive目录),可尝试将凭据文件移至本地非同步目录测试

自定义凭据函数代码
$keypath = 'C:\Users\user1\OneDrive\Keys'

Function New-StoredCredential {
    
    if (!(Test-Path Variable:\KeyPath)) {
        Write-Warning "The `$KeyPath variable has not been set. Consider adding `$KeyPath to your PowerShell profile to avoid this prompt."
        $path = Read-Host -Prompt "Enter a path for stored credentials"
        Set-Variable -Name KeyPath -Scope Global -Value $path

        if (!(Test-Path $KeyPath)) {
        
            try {
                New-Item -ItemType Directory -Path $KeyPath -ErrorAction STOP | Out-Null
            }
            catch {
                throw $_.Exception.Message
            }           
        }
    }

    $Credential = Get-Credential -Message "Enter a user name and password"

    $Credential.Password | ConvertFrom-SecureString | Out-File "$($KeyPath)\$($Credential.Username).cred" -Force

}


Function Get-StoredCredential {
 

    param(
        [Parameter(Mandatory=$false, ParameterSetName="Get")]
        [string]$UserName,
        [Parameter(Mandatory=$false, ParameterSetName="List")]
        [switch]$List
        )

    if (!(Test-Path Variable:\KeyPath)) {
        Write-Warning "The `$KeyPath variable has not been set. Consider adding `$KeyPath to your PowerShell profile to avoid this prompt."
        $path = Read-Host -Prompt "Enter a path for stored credentials"
        Set-Variable -Name KeyPath -Scope Global -Value $path
    }


    if ($List) {

        try {
        $CredentialList = @(Get-ChildItem -Path $keypath -Filter *.cred -ErrorAction STOP)

        foreach ($Cred in $CredentialList) {
            Write-Host "Username: $($Cred.BaseName)"
            }
        }
        catch {
            Write-Warning $_.Exception.Message
        }

    }

    if ($UserName) {
        if (Test-Path "$($KeyPath)\$($Username).cred") {
        
            $PwdSecureString = Get-Content "$($KeyPath)\$($Username).cred" | ConvertTo-SecureString
            
            $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $PwdSecureString
        }
        else {
            throw "Unable to locate a credential for $($Username)"
        }

        return $Credential
    }
}

内容的提问来源于stack exchange,提问作者MattP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:07:30