โมดูล SecretManagement ของ Microsoft ช่วยจัดเก็บและใช้ Password/Secrets ใน PowerShell Scripts ได้ปลอดภัย ประกอบด้วย SecretStore Vault (Built-in) และรองรับ Vault ภายนอก (KeePass, LastPass, HashiCorp, Azure Key Vault, Bitwarden, Windows Credential Manager)
1. ติดตั้งโมดูล
Install-Module -Name Microsoft.PowerShell.SecretManagement
Install-Module -Name Microsoft.PowerShell.SecretStore
Set-ExecutionPolicy -Scope Process Unrestricted # ถ้าบล็อก
2. สร้าง SecretStore Vault
Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
Get-SecretStoreConfiguration # ตั้ง Master Password
Default: Scope=CurrentUser, Auth=Password, Timeout=900s, Interaction=Prompt
Vault เก็บที่: %LOCALAPPDATA%\Microsoft\PowerShell\secretmanagement
3. จัดการ Credentials
# บันทึก Password (SecureString)
Set-Secret -Vault MyDomainPassdb -Name user1
# บันทึก API Key (Plain Text)
Set-Secret -Vault MyDomainPassdb -Name MY_GITHUB_TOKEN -Secret 'GitHub_AUTH_API_Token'
# บันทึก PSCredential (User+Pass) พร้อม Metadata
Set-Secret -Vault MyDomainPassdb -Name adm_maxbak -Secret (Get-Credential) -Metadata @{description = "AD Enterprise Admin"}
# ดูรายการ
Get-SecretInfo | ft Name, Metadata
# อ่านค่า (PS 7.x)
Get-Secret -Vault MyDomainPassdb -Name user1 | ConvertFrom-SecureString –AsPlainText
4. ใช้ใน Scripts
# PowerShell Remoting
Enter-PSSession -ComputerName mun-dc01 -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_maxbak)
# Exchange/M365
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://exch/powershell -Authentication Kerberos -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_ex)
# Azure AD
Connect-AzureAD -Credential (Get-Secret -Vault MyDomainPassdb -Name azadm)
# เก็บใน Variable
$Cred = Get-Secret -Vault MyDomainPassdb user1
5. ผสานกับ KeePass
Install-Module -Name SecretManagement.KeePass
Register-SecretVault -Name "KeePassDB" -ModuleName "SecretManagement.Keepass" -VaultParameters @{
Path = "C:\Users\maxbak\Documents\personal_creds.kdbx"
UseMasterPassword = $true
}
Test-SecretVault -Name KeePassDB
Get-SecretInfo -Vault KeePassDB
Set-Secret -Vault KeePassDB -Name "ILO_adm" -Secret (Get-Credential woshub\ILO_adm)