搜索此问题的答案会发现很多有关 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
}
谢谢大家。
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 及更高版本。
您可以看到,在 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
。
这是新的 Windows 11 终端中的一个错误。 在旧版 Windows 10 中不会出现这种情况。如果您的终端版本与 Powershell 5.1 不完全兼容,您可以通过切换回旧版 Powershell 控制台来解决该问题。
描述了这样做的过程。
您可以从“查看”菜单或使用
显示或隐藏终端Ctrl + '
然后您可以交互输入凭据。