未出现凭证选择弹出窗口

问题描述 投票:0回答:3

搜索此问题的答案会发现很多有关 GitHub 凭证的信息,但没有发现任何有关此特定问题的信息。 我开始使用 PowerShell (PoSH) Cmdlet“Get-Credential”,因为我的公司使用双因素身份验证 (2FA),因此用户名/密码无法从我的桌面(用户帐户)远程到服务器(管理员帐户)。 另外,我刚刚开始使用 VS Code。 问题是,在使用 Get-Credential 在 PoSH ISE 中运行简单的 PoSH 代码片段时,我会看到一个弹出窗口,让我选择所需的证书,然后输入 Pin 码。当我在 VS Code 中运行相同的代码片段时,弹出窗口永远不会出现。 有谁明白这是为什么,我可以解决它吗?

这是供参考的片段。

$serverList = Get-Content "C:\temp\Servers.txt"
$cred = Get-Credential


ForEach ($Server in $serverList){

$OS = Invoke-Command -Credential $cred -ComputerName $Server -ScriptBlock {
    (get-itemproperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ProductName).ProductName
        
        }
    Write-Host $Server, $OS   
       
       }

谢谢大家。

powershell visual-studio-code
3个回答
0
投票

TL;DR:这种行为是设计使然的。 VS Code 是微软跨平台开发经验努力的成果。 PowerShell版本默认是跨平台的PowerShell Core。它专注于终端体验和脚本。因此,您无法在 VS Code 上触发 Windows 本机凭据提示。

当您使用 $PSVERSIONTABLE 检查版本时,您会看到如下内容:

=====> PowerShell Integrated Console v2021.12.0 <=====

PS C:\Users\Foo> $PSVersionTable


Name                           Value
----                           -----
PSVersion                      7.2.1
PSEdition                      Core
GitCommitId                    7.2.1
OS                             Microsoft Windows 10.0.18363
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}       
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion   

默认情况下,这不是

powershell.exe
,这意味着它不是 Windows 本机以及与 ISE 或控制台一起使用的 Powershell 5.x 或更低版本。它是使用
pwsh.exe
的 VS Code 主机,跨平台版本为 6.0 及更高版本。

您可以查看文档: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-credential?view=powershell-7.2

您可以看到,在 6.x 及更高版本中,它始终专注于脚本和终端。坏消息是 VS Code 也是围绕跨平台方法构建的。因此,即使您将终端中的配置文件更改为使用 Windows Powershell(如下所示),您也可以使用 PowerShell 5.1,但无法查看该提示:

"PowerShell Core": {
    "path": "C:\\Program Files\\PowerShell\\7\\pwsh.exe"
 },
 "Windows PowerShell (x64)": {
    "path": "${env:windir}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
}

总之,使用 VS Code 无法得到该提示。除了在集成终端中输入

powershell.exe
并粘贴代码之外,基本上不使用VS Code。它不会帮助你。我会坚持使用 ISE 来满足此要求,请注意它已贬值。

编辑 1:添加了 TL;DR。

编辑2:我创建了一个cmdlet,它仅弹出默认凭据对话框并返回一个

PSCredential
对象。

编辑 3:我发布了一个名为 Get-WinCredential 的包,它允许您使用旧版和现代的凭据对话框。这对我来说是一次很好的锻炼。

就像其他评论所有者一样,我利用了

P/Invoke


0
投票

这是新的 Windows 11 终端中的一个错误。 在旧版 Windows 10 中不会出现这种情况。如果您的终端版本与 Powershell 5.1 不完全兼容,您可以通过切换回旧版 Powershell 控制台来解决该问题。

https://support.microsoft.com/en-us/windows/command-prompt-and-windows-powershell-for-windows-11-6453ce98-da91-476f-8651-5c14d5777c20

描述了这样做的过程。


-1
投票

您可以从“查看”菜单或使用

显示或隐藏终端
Ctrl + '

然后您可以交互输入凭据。

© www.soinside.com 2019 - 2024. All rights reserved.