about_Certificate_Provider
提供者名稱
憑證
磁碟機
Cert:
Capabilities
ShouldProcess
簡短描述
提供 PowerShell 中 X.509 證書存儲和憑證的存取權。
詳細描述
此資訊僅適用於在 Windows 上執行的 PowerShell。
PowerShell 憑證 提供者可讓您在 PowerShell 中取得、新增、變更、清除和刪除憑證和證書存儲。
憑證磁碟驅動器是階層式命名空間,其中包含您計算機上的證書存儲和憑證。
憑證提供者支援下列 Cmdlet。
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- 新增專案
- Remove-Item
- Get-ItemProperty
- 設置-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
此提供者公開的類型
憑證磁碟驅動器會公開下列類型。
- Microsoft.PowerShell.Commands.X509StoreLocation,這是將目前使用者和所有用戶憑證分組的高階容器。 每個系統都有和
CurrentUser
LocalMachine
(所有使用者) 存放區位置。 - System.Security.Cryptography.X509Certificates.X509Store,這是儲存和管理憑證的實體存放區。
- System.Security.Cryptography.X509Certificates.X509Certificate2,每一個都代表計算機上的 X.509 憑證。 憑證會透過指紋來識別。
瀏覽憑證磁碟驅動器
憑證提供者會將憑證命名空間公開為 Cert:
PowerShell中的磁碟驅動器。 此命令會 Set-Location
使用 命令,將目前位置變更為 Root
存放區位置中的 LocalMachine
證書存儲。 使用反斜杠 (\
) 或正斜線 (/
) 表示磁碟驅動器的 Cert:
層級。
Set-Location Cert:
您也可以從任何其他 PowerShell 磁碟驅動器使用憑證提供者。 若要從其他位置參考別名,請使用 Cert:
路徑中的磁碟驅動器名稱。
PS Cert:\> Set-Location -Path LocalMachine\Root
若要返回檔案系統磁碟驅動器,請輸入磁碟驅動器名稱。 例如,鍵入:
Set-Location C:
注意
PowerShell 會使用別名,讓您熟悉使用提供者路徑的方式。 例如 和 之類的dir
命令現在是 Get-ChildItem 的別名,cd
是 Set-Location 的別名,而 pwd
是 Get-Location 的ls
別名。
顯示 Cert: 磁碟驅動器的內容
此命令會 Get-ChildItem
使用 Cmdlet,在證書儲存位置中 CurrentUser
顯示證書存儲。
如果您不在磁碟驅動器中 Cert:
,請使用絕對路徑。
PS Cert:\CurrentUser\> Get-ChildItem
在 Cert: 磁碟驅動器內顯示憑證屬性
這個範例會取得具有的 Get-Item
憑證,並將它儲存在變數中。
此範例示範使用 的新憑證腳本屬性 (DnsNameList、 EnhancedKeyUsageList、 SendAsTrustedIssuer) Select-Object
。
$c = Get-Item cert:\LocalMachine\My\52A149D0393CE8A8D4AF0B172ED667A9E3A1F44E
$c | Format-List DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer
DnsNameList : {SERVER01.contoso.com}
EnhancedKeyUsageList : {WiFi-Machine (1.3.6.1.4.1.311.42.2.6),
Client Authentication (1.3.6.1.5.5.7.3.2)}
SendAsTrustedIssuer : False
尋找所有 CodeSigning 憑證
此命令會使用 Cmdlet 的 Get-ChildItem
CodeSigningCert 和 Recurse 參數,取得電腦上具有程式碼簽署授權單位的所有憑證。
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
尋找過期的憑證
此命令會使用 Cmdlet 的 Get-ChildItem
ExpiringInDays 參數來取得在未來 30 天內到期的憑證。
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
尋找伺服器 SSL 憑證
此命令會使用 Cmdlet 的 Get-ChildItem
SSLServerAuthentication 參數來取得 和 WebHosting
存放區中的所有My
伺服器 SSL 憑證。
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
在遠端電腦上尋找過期的憑證
此命令會 Invoke-Command
使用 Cmdlet 在 Srv01 和 Srv02 計算機上執行 Get-ChildItem
命令。 ExpiringInDays 參數中的零值會0
取得 Srv01 和 Srv02 計算機上已過期的憑證。
$invokeCommandSplat = @{
ComputerName = 'Srv01', 'Srv02'
ScriptBlock = {
Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
}
}
Invoke-Command @invokeCommandSplat
結合篩選來尋找一組特定的憑證
此命令會取得存放區位置中 LocalMachine
具有下列屬性的所有憑證:
fabrikam
在其 DNS 名稱中Client Authentication
在其 EKU 中- SendAsTrustedIssuer 屬性的 值
$true
- 在未來 30 天內不會過期。
NotAfter 屬性會儲存憑證到期日。
[DateTime] $ValidThrough = (Get-Date) + (New-TimeSpan -Days 30)
$getChildItemSplat = @{
Path = 'cert:\*'
Recurse = $true
DnsName = "*fabrikam*"
Eku = "*Client Authentication*"
}
Get-ChildItem @getChildItemSplat |
Where-Object {$_.SendAsTrustedIssuer -and $_.NotAfter -gt $ValidThrough }
開啟憑證 MMC 嵌入式管理單元
Cmdlet Invoke-Item
會使用預設應用程式來開啟您指定的路徑。 對於憑證,默認應用程式是憑證 MMC 嵌入式管理單元。
此命令會開啟憑證 MMC 嵌入式管理單元,以管理指定的憑證。
Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B
複製憑證
憑證提供者不支援 複製憑證 。 當您嘗試複製憑證時,您會看到此錯誤。
$path = "Cert:\LocalMachine\Root\E2C0F6662D3C569705B4B31FE2CBF3434094B254"
PS Cert:\LocalMachine\> Copy-Item -Path $path -Destination .\CA\
Copy-Item : Provider operation stopped because the provider doesn't support
this operation.
At line:1 char:1
+ Copy-Item -Path $path -Destination .\CA\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (:) [Copy-Item],
PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,
Microsoft.PowerShell.Commands.CopyItemCommand
移動憑證
將所有 SSL 伺服器驗證憑證移至 WebHosting 存放區
此命令會 Move-Item
使用 Cmdlet 將憑證從 My
存放區移至存放 WebHosting
區。
Move-Item
無法移動憑證儲存,而且無法將憑證移至不同的存放區位置,例如將憑證從 LocalMachine
CurrentUser
移至 。 Cmdlet Move-Item
可以在存放區內移動憑證,但不會移動私鑰。
此命令會使用 Cmdlet 的 Get-ChildItem
SSLServerAuthentication 參數,在證書存儲中My
取得 SSL 伺服器驗證憑證。
傳回的憑證會透過管道傳送至 Move-Item
Cmdlet,以將憑證移至 WebHosting
存放區。
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination cert:\LocalMachine\WebHosting
刪除憑證和私鑰
Cmdlet Remove-Item
會刪除您指定的憑證。 DeleteKey 動態參數會刪除私鑰。
從 CA 存放區刪除憑證
此命令會從 CA 證書存儲中刪除憑證,但保留相關聯的私鑰保持不變。
在磁碟驅動器中Cert:
Remove-Item
,Cmdlet 僅支援DeleteKey、Path、WhatIf和 Confirm 參數。 所有其他參數都會被忽略。
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
使用 DNS 名稱中的通配符刪除憑證
此命令會刪除具有包含 Fabrikam
之 DNS 名稱的所有憑證。 它會使用 Cmdlet 的 Get-ChildItem
DNSName 參數來取得憑證和 Remove-Item
Cmdlet 來刪除它們。
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
從遠端電腦刪除私鑰
這一系列的命令會啟用委派,然後刪除遠端電腦上的憑證和相關聯的私鑰。 若要刪除遠端電腦上的私鑰,您必須使用委派的認證。
Enable-WSManCredSSP
使用 Cmdlet 在 S1 遠端電腦上的用戶端上啟用認證安全性服務提供者 (CredSSP) 驗證。
CredSSP 允許委派的驗證。
Enable-WSManCredSSP -Role Client -DelegateComputer S1
Connect-WSMan
使用 Cmdlet 將 S1 計算機連線到本機電腦上的 WinRM 服務。 當此命令完成時,S1 計算機會出現在 PowerShell 的本機 WSMan:
磁碟驅動器中。
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
現在,您可以使用 Set-Item
磁碟驅動器中的 WSMan:
Cmdlet 來啟用 WinRM 服務的 CredSSP 屬性。
Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true
使用 New-PSSession
Cmdlet 在 S1 計算機上啟動遠端工作階段,並指定 CredSSP 驗證。 將會話儲存在變數中 $s
。
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
最後,使用 Invoke-Command
Cmdlet 在 變數的$s
會話中執行Remove-Item
命令。 此命令 Remove-Item
會使用 DeleteKey 參數來移除私鑰以及指定的憑證。
Invoke-Command -Session $s {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
刪除過期的憑證
此命令會使用 Cmdlet 的 Get-ChildItem
ExpiringInDays 參數搭配 值0
,以取得已過期存放WebHosting
區中的憑證。
包含傳回憑證的 Remove-Item
變數會透過管線傳送至 Cmdlet,以刪除它們。 此命令會 使用DeleteKey 參數來刪除私鑰以及憑證。
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
建立憑證
Cmdlet New-Item
不會在憑證提供者中建立新的憑證。 使用 New-SelfSignedCertificate Cmdlet 建立憑證以供測試之用。
建立證書存儲
在 Cert:
磁碟驅動器中 New-Item
,Cmdlet 會在存放區位置中 LocalMachine
建立證書存儲。 它支援 Name、 Path、 WhatIf 和 Confirm 參數。 所有其他參數都會被忽略。 此命令會傳 回代表新證書存儲的 System.Security.Cryptography.X509Certificates.X509Store 。
此命令會在存放區位置中LocalMachine
建立名為 CustomStore
的新證書存儲。
New-Item -Path cert:\LocalMachine\CustomStore
在遠端電腦上建立新的證書存儲
此命令會在 Server01 電腦上的存放區位置中LocalMachine
建立名為 HostingStore
的新證書存儲。
此命令會 Invoke-Command
使用 Cmdlet 在 Server01 計算機上執行 New-Item
命令。 此命令會傳 回代表新證書存儲的 System.Security.Cryptography.X509Certificates.X509Store 。
Invoke-Command -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
建立 WS-Man 的客戶端憑證
此命令會建立可供 WS-Management 用戶端使用的 ClientCertificate 專案。 新的 ClientCertificate 會顯示在 ClientCertificate 目錄下,顯示為 ClientCertificate_1234567890
。 所有參數都是必要參數。 簽發 者 必須是簽發者憑證的指紋。
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
刪除證書存儲
從遠端電腦刪除證書存儲
此命令會 Invoke-Command
使用 Cmdlet 在 S1 和 S2 電腦上執行 Remove-Item
命令。 Remove-Item
此命令包含 Recurse 參數,它會先刪除存放區中的憑證,再刪除存放區。
Invoke-Command -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
動態參數
動態參數是PowerShell提供者所新增的 Cmdlet 參數,只有在啟用提供者的磁碟驅動器中使用 Cmdlet 時才能使用。 這些參數在所有憑證提供者的子目錄中都是有效的,但只在憑證上有效。
注意
對 EnhancedKeyUsageList 屬性執行篩選的參數也會傳回具有空白 EnhancedKeyUsageList 屬性值的專案。 具有空白 EnhancedKeyUsageList 的憑證可用於所有用途。
下列憑證提供者參數已在PowerShell 7.1中重新引入。
- DNSName
- DocumentEncryptionCert
- EKU
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
此參數會取得其 EnhancedKeyUsageList 屬性值中具有Code Signing
的憑證。
DeleteKey <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
此參數會在刪除憑證時刪除相關聯的私鑰。
重要
若要刪除與遠端電腦上存放區中 Cert:\CurrentUser
用戶憑證相關聯的私鑰,您必須使用委派的認證。 Cmdlet Invoke-Command
支援使用 CredSSP 參數的認證委派。 您應該先考慮任何安全性風險,再搭配 使用 Remove-Item
Invoke-Command
和 認證委派。
此參數已在PowerShell 7.1中重新引入
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
支援的 Cmdlet
此參數會取得憑證在憑證的 DNSNameList 屬性中具有指定功能變數名稱或名稱模式的憑證。 這個參數的值可以是 Unicode
或 ASCII
。 Punycode 值會轉換成 Unicode。 允許通配符 (*
) 。
此參數已在PowerShell 7.1中重新引入
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
此參數會取得其 EnhancedKeyUsageList 屬性值中具有Document Encryption
的憑證。
EKU <System.String>
支援的 Cmdlet
此參數會取得憑證,這些憑證具有憑證的 EnhancedKeyUsageList 屬性中具有指定的文字或文字模式。 允許通配符 (*
) 。 EnhancedKeyUsageList 屬性包含易記名稱和 EKU 的 OID 字段。
此參數已在PowerShell 7.1中重新引入
ExpiringInDays <System.Int32>
支援的 Cmdlet
此參數會取得在指定天數內或之前到期的憑證。 值為零 (0) 會取得已過期的憑證。
此參數已在PowerShell 7.1中重新引入
ItemType <System.String>
此參數可用來指定 所 New-Item
建立之項目的類型。 Cmdlet New-Item
只支援 值 Store
。 New-Item
Cmdlet 無法建立新的憑證。
支援的 Cmdlet
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
只取得 SSL Web 裝載的伺服器憑證。 此參數會取得其 EnhancedKeyUsageList 屬性值中具有Server Authentication
的憑證。
此參數已在PowerShell 7.1中重新引入
文本屬性
新的腳本屬性已新增至 x509Certificate2 物件,此物件代表憑證,可讓您輕鬆地搜尋及管理憑證。
- DnsNameList:若要填入 DnsNameList 屬性,憑證提供者會從 SubjectAlternativeName (SAN) 延伸模組中的 DNSName 專案複製內容。 如果 SAN 延伸模組是空的,屬性會填入憑證 [主體] 字段中的內容。
- EnhancedKeyUsageList:若要填入 EnhancedKeyUsageList 屬性,憑證提供者會在憑證中複製 EnhancedKeyUsage (EKU) 欄位的 OID 屬性,併為其建立易記名稱。
- SendAsTrustedIssuer:若要填入 SendAsTrustedIssuer 屬性,憑證提供者會 從憑證複製 SendAsTrustedIssuer 屬性。 如需詳細資訊,請參閱 管理受信任的簽發者以進行客戶端驗證。
這些新功能可讓您根據其 DNS 名稱和到期日來搜尋憑證,並根據增強密鑰使用方式 (EKU) 屬性的值來區分用戶端和伺服器驗證憑證。
使用管線
提供者 Cmdlet 接受管線輸入。 您可以使用管線來簡化工作,方法是將提供者數據從某個 Cmdlet 傳送至另一個提供者 Cmdlet。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。
取得說明
從 PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自定義說明主題,說明這些 Cmdlet 在檔案系統磁碟驅動器中的運作方式。
若要取得針對檔案系統磁碟驅動器自定義的說明主題,請在檔案系統磁碟驅動器中執行 Get-Help 命令,或使用 -Path
的 Get-Help
參數來指定檔案系統磁碟驅動器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: