Windows Credential Manager ช่วยให้บันทึกข้อมูลประจำตัว (ชื่อผู้ใช้และรหัสผ่าน) เพื่อเข้าถึงทรัพยากรเครือข่าย เว็บไซต์ และแอปพลิเคชัน ด้วย Credential Manager คุณสามารถเชื่อมต่อกับทรัพยากรระยะไกลโดยอัตโนมัติโดยไม่ต้องป้อนรหัสผ่าน แอปพลิเคชันต่างๆ ก็สามารถเข้าถึง Credential Manager และใช้รหัสผ่านที่บันทึกไว้ได้
محتويات:
- การใช้ Credential Manager เพื่อจัดเก็บรหัสผ่านใน Windows
- การเข้าถึง Windows Credential Manager จาก PowerShell
การใช้ Credential Manager เพื่อจัดเก็บรหัสผ่านใน Windows
Credential Manager ปรากฏครั้งแรกใน Windows 7 และถูกจัดวางเป็นที่เก็บรหัสผ่านที่ปลอดภัยค่อนข้างสูง
Credential Manager ใน Windows 10 สามารถจัดเก็บประเภทบัญชีต่อไปนี้ได้:
- Windows Credentials – ข้อมูลประจำตัวสำหรับล็อกอิน Windows หรือเข้าถึงคอมพิวเตอร์ระยะไกล รหัสผ่านที่บันทึกสำหรับการเชื่อมต่อ RDP รหัสผ่านสำหรับเว็บไซต์ที่รองรับการรับรองความถูกต้องแบบ Windows แบบรวม และอื่นๆ; Credential Manager ไม่จัดเก็บข้อมูลประจำตัวสำหรับการล็อกอิน Windows แบบอัตโนมัติหรือ Cached Credentials ของโดเมน
- Certificate-Based Credentials – สำหรับการรับรองความถูกต้องด้วยสมาร์ทการ์ด
- Generic Credentials – ใช้โดยแอปพลิเคชันของบุคคลที่สามที่เข้ากันได้กับ Credential Manager
- Web Credentials – รหัสผ่านที่บันทึกใน Edge และ IE แอปพลิเคชันของ Microsoft (MS Office, Teams, Outlook, Skype ฯลฯ)
ตัวอย่างเช่น หากคุณเปิดใช้งานตัวเลือก “Save Password” เมื่อเข้าถึงโฟลเดอร์เครือข่ายที่แชร์ รหัสผ่านที่คุณป้อนจะถูกบันทึกใน Credential Manager

เช่นเดียวกัน รหัสผ่านสำหรับการเชื่อมต่อกับโฮสต์ RDP/RDS แบบระยะไกลจะถูกบันทึกในไคลเอ็นต์ Remote Desktop Connection (mstsc.exe)

Credential Manager ยังเก็บรหัสผ่านของผู้ใช้หากบันทึกโดยใช้คำสั่ง runas /savecred
คุณสามารถเข้าถึง Credential Manager ใน Windows 10 ได้จาก Control Panel แบบคลาสสิก (Control Panel\User Accounts\Credential Manager)
ตามที่เห็น มีรหัสผ่านสองรายการใน Credential Manager ที่เราบันทึกไว้ก่อนหน้านี้

รหัสผ่านที่บันทึกสำหรับการเชื่อมต่อ RDP จะระบุในรูปแบบ TERMSRV\hostname
ที่นี่คุณสามารถเพิ่ม ข้อมูลประจำตัวที่บันทึกไว้ แก้ไข (คุณไม่สามารถดูรหัสผ่านที่บันทึกไว้ในอินเทอร์เฟซกราฟิกได้) หรือลบรายการใดๆ ได้
นอกจากนี้ คุณยังสามารถใช้อินเทอร์เฟซแบบคลาสสิกของ Stored User Names and Passwords เพื่อจัดการรหัสผ่านที่บันทึกไว้ ในการเรียกใช้ ให้รันคำสั่งด้านล่าง:
rundll32.exe keymgr.dll,KRShowKeyMgr

ที่นี่คุณก็สามารถจัดการข้อมูลประจำตัวที่บันทึกไว้ได้เช่นกัน และยังมีคุณสมบัติสำรองและกู้คืนสำหรับ Credential Manager (คุณสามารถใช้เพื่อย้ายฐานข้อมูล Credential Manager ไปยังคอมพิวเตอร์อื่น)
เครื่องมือ vaultcmd ใช้สำหรับจัดการ Credential Manager จาก Command Prompt ตัวอย่างเช่น เพื่อแสดงรายการ Windows Credentials ที่บันทึกไว้ ให้รันคำสั่งนี้:
vaultcmd /listcreds:"Windows Credentials"

Credential schema: Windows Domain Password Credential Resource: Domain:target=mun-dc01 Identity: RESDOM\j.brion Hidden: No Roaming: No Property (schema element id,value): (100,3) Property (schema element id,value): (101,SspiPfAc)
คำสั่งต่อไปนี้จะลบรหัสผ่าน RDP ที่บันทึกไว้ทั้งหมดออกจาก Credential Manager:
For /F "tokens=1,2 delims= " %G in ('cmdkey /list ^| findstr "target=TERMSRV"') do cmdkey /delete %H
รหัสผ่านที่บันทึกไว้ทั้งหมดจัดเก็บอยู่ใน Windows Vault Windows Vault เป็นที่เก็บที่ได้รับการปกป้องเพื่อเก็บความลับ รหัสผ่าน และข้อมูลที่ละเอียดอ่อนของผู้ใช้ ใน Windows Vault ข้อมูลมีโครงสร้างและดูเหมือนชุดของรายการที่เป็นของ Vault scheme ชุดของคีย์เข้ารหัสสำหรับรายการ Windows Vault จัดเก็บอยู่ในไฟล์ Policy.vpol
สำหรับผู้ใช้โดเมน ตั้งอยู่ที่ %userprofile%\AppData\Roaming\Microsoft\Vault
สำหรับผู้ใช้ท้องถิ่น พบได้ที่ %userprofile%\AppData\Local\Microsoft\Vault

บริการ VaultSvc ต้องทำงานอยู่ขณะใช้ Credential Manager:
Get-Service VaultSvc
หากบริการถูกปิดใช้งาน คุณจะเห็นข้อผิดพลาดต่อไปนี้เมื่อพยายามเข้าถึง Credential Manager:
Credential Manager Error The Credential Manager Service is not running. You can start the service manually using the Services snap-in or restart your computer to start the service. Error code: 0x800706B5 Error Message: The interface is unknown.
หากคุณต้องการป้องกันไม่ให้ผู้ใช้บันทึกรหัสผ่านเครือข่ายใน Credential Manager ให้เปิดใช้งานตัวเลือก GPO Network access: Do not allow storage of passwords and credentials for network authentication ภายใต้ Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options

จากนั้น หากผู้ใช้พยายามบันทึกรหัสผ่านลงใน Windows Vault จะเห็นข้อผิดพลาดดังนี้:
Credential Manager Error Unable to save credentials. To save credentials in this vault, check your computer configuration. Error code: 0x80070520 Error Message: A specified logon session does not exist. It may already have been terminated.
การเข้าถึง Windows Credential Manager จาก PowerShell
Windows ไม่มีคอมมานด์เลตในตัวสำหรับเข้าถึง PasswordVault store จาก PowerShell แต่คุณสามารถใช้โมดูล CredentialManager จาก PowerShell Gallery ได้
ติดตั้งโมดูล:
Install-Module CredentialManager
คุณสามารถแสดงรายการคอมมานด์เลตในโมดูล CredentialManager ได้:
Get-Command -module CredentialManager

โมดูลนี้มีเพียง 4 คอมมานด์เลต:
Get-StoredCredential– เพื่อดึงข้อมูลประจำตัวจาก Windows VaultGet-StrongPassword– เพื่อสร้างรหัสผ่านสุ่มNew-StoredCredential– เพื่อเพิ่มข้อมูลประจำตัวRemove-StoredCredential– เพื่อลบข้อมูลประจำตัว
เพื่อเพิ่มข้อมูลประจำตัวใหม่ลงใน Windows Credential Manager ให้รันคำสั่งนี้:
New-StoredCredential -Target 'woshub' -Type Generic -UserName 'maxbak@woshub.com' -Password 'Pass321-b' -Persist 'LocalMachine'

เพื่อตรวจสอบว่ามีข้อมูลประจำตัวของผู้ใช้ที่บันทึกไว้ใน Credential Manager หรือไม่:
Get-StoredCredential -Target woshub
คุณสามารถใช้รหัสผ่านที่บันทึกไว้ใน Credential Manager ในสคริปต์ PowerShell ของคุณได้ ตัวอย่างเช่น ผมสามารถดึงชื่อและรหัสผ่านที่บันทึกไว้จาก Windows Vault เป็นออบเจ็กต์ PSCredential และเชื่อมต่อกับ Exchange Online จาก PowerShell:
$psCred = Get-StoredCredential -Target "woshub"
Connect-MSolService -Credential $psCred
อย่าลืมโมดูล PowerShell Secret Management ใหม่ที่คุณสามารถใช้เพื่อจัดเก็บรหัสผ่านใน Windows ได้อย่างปลอดภัย มันรองรับ password vaults หลายตัว: KeePass, LastPass, HashiCorp Vault, Azure Key Vault, Bitwarden
เพื่อลบข้อมูลประจำตัวออกจาก Windows Vault ให้รันคำสั่งนี้:
Remove-StoredCredential -Target woshub
คุณไม่สามารถแสดงรหัสผ่านเป็นข้อความธรรมดาโดยใช้เครื่องมือ CLI ในตัวได้ แต่คุณสามารถใช้ยูทิลิตี้แบบ Mimikatz เพื่อดึงรหัสผ่านที่บันทึกไว้จาก credman เป็นข้อความธรรมดา (ดูตัวอย่างที่นี่)