憑證提供者
提供者名稱
憑證
磁碟機
Cert:
功能
ShouldProcess
簡短描述
提供 PowerShell 中 X.509 證書存儲和憑證的存取權。
詳細描述
PowerShell 憑證 提供者可讓您在 PowerShell 中取得、新增、變更、清除和刪除憑證和證書存儲。
憑證磁碟驅動器是階層式命名空間,其中包含您計算機上的證書存儲和憑證。
憑證提供者支援下列 Cmdlet,本文涵蓋這些 Cmdlet。
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
此提供者所公開的類型
憑證磁碟驅動器會公開下列類型。
儲存位置 (Microsoft.PowerShell.Commands.X509StoreLocation) ,這些是將目前使用者和所有用戶憑證分組的高階容器。 每個系統都有 CurrentUser 和 LocalMachine (所有使用者) 存放區位置。
憑證會儲存 (System.Security.Cryptography.X509Certificates.X509Store) ,這是儲存和管理憑證的實體存放區。
X.509 System.Security.Cryptography.X509Certificates.X509Certificate2 憑證,每一個憑證都代表計算機上的 X.509 憑證。 憑證是由其指紋來識別。
巡覽憑證磁碟驅動器
憑證提供者會將憑證命名空間公開為 Cert:
PowerShell中的磁碟驅動器。 此命令會 Set-Location
使用 命令,將目前位置變更為 LocalMachine 存放區位置中的跟證書存儲。 使用反斜杠 (\) 或正斜線 (/) 來表示磁碟驅動器的 Cert:
層級。
Set-Location Cert:
您也可以使用任何其他 PowerShell 磁碟驅動器的憑證提供者。 若要從其他位置參考別名,請使用 Cert:
路徑中的磁碟驅動器名稱。
PS Cert:\> Set-Location -Path LocalMachine\Root
若要返回檔案系統磁碟機,請輸入磁碟機名稱。 例如,輸入:
Set-Location C:
注意
PowerShell 會使用別名,讓您熟悉使用提供者路徑。 和 ls
之類的dir
命令現在是 Get-ChildItem 的別名,cd
是 Set-Location 的別名。
和 pwd
是 Get-Location 的別名。
顯示憑證:磁碟驅動器的內容
此命令會 Get-ChildItem
使用 Cmdlet,在 CurrentUser 證書儲存位置中顯示證書存儲。
如果您不在磁碟驅動器中 Cert:
,請使用絕對路徑。
PS Cert:\CurrentUser\> Get-ChildItem
在憑證:磁碟驅動器內顯示憑證屬性
此範例會取得具有的 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 參數來取得 My 和 WebHosting 存放區中的所有伺服器 SSL 憑證。
Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
-SSLServerAuthentication
在遠端電腦上尋找過期的憑證
此命令會 Invoke-Command
使用 Cmdlet 在 Srv01 和 Srv02 計算機上執行 Get-ChildItem
命令。 ExpiringInDays 參數中零 (0) 的值會取得 Srv01 和 Srv02 計算機上已過期的憑證。
Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
-Recurse -ExpiringInDays 0}
結合篩選條件以尋找一組特定的憑證
此指令會取得 LocalMachine 存放區位置中具有下列屬性的所有憑證:
- DNS 名稱中的 “fabrikam”
- 其 EKU 中的「客戶端驗證」
- SendAsTrustedIssuer 屬性的 值
$true
- 在接下來的 30 天內不會過期。
NotAfter 屬性會儲存憑證到期日。
[DateTime] $ValidThrough = (Get-Date) + (New-TimeSpan -Days 30)
Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
-EKU "*Client Authentication*" | 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 does not 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 名稱中的通配符刪除憑證
此命令會刪除 DNS 名稱包含 "Fabrikam" 的所有憑證。 它會使用 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
現在,您可以使用 WSMan: 磁碟驅動器中的 Set-Item 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 { Remove-Item `
-Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
-DeleteKey
}
刪除過期的憑證
此命令使用 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
在遠端電腦上 Create 新的證書存儲
此命令會在 Server01 電腦上的 LocalMachine 存放區位置中建立名為 "HostingStore" 的新憑證存放區。
此命令會 Invoke-Command
使用 Cmdlet 在 Server01 計算機上執行 New-Item
命令。 此命令會傳回代表新證書存儲 的 System.Security.Cryptography.X509Certificates.X509Store 。
Invoke-Command { New-Item -Path cert:\LocalMachine\CustomStore } `
-ComputerName Server01
建立 WS-Man 的客戶端憑證
此命令會建立可由 WS-Management 用戶端使用的 ClientCertificate 專案。 新的 ClientCertificate 會顯示在 ClientCertificate 目錄底下,顯示為 “ClientCertificate_1234567890”。 所有的參數都是必要項。 簽發者必須是簽發者憑證的指紋。
$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
-Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
-URI wmicimv2/* -Credential $cred
刪除憑證存放區
從遠端電腦刪除證書存儲
此命令會 Invoke-Command
使用 Cmdlet 在 S1 和 S2 電腦上執行 Remove-Item
命令。 此命令 Remove-Item
包含 Recurse 參數,它會先刪除存放區中的憑證,再刪除存放區。
Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
-ComputerName S1, S2
動態參數
動態參數是PowerShell提供者所新增的 Cmdlet 參數,只有在啟用提供者的磁碟驅動器中使用 Cmdlet 時才可使用。 這些參數在憑證提供者的所有子目錄中都是有效的,但僅適用於憑證。
注意
針對屬性執行篩選的參數 EnhancedKeyUsageList
也會傳回具有空白 EnhancedKeyUsageList
屬性值的專案。
具有空白 EnhancedKeyUsageList 的憑證可用於所有用途。
PowerShell 6.0 中已移除下列憑證提供者參數。
- DNS 名稱
- DocumentEncryptionCert
- EKU
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
此參數會取得其 EnhancedKeyUsageList 屬性值中具有「程式代碼簽署」的憑證。
DeleteKey <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
此參數會在刪除憑證時刪除相關聯的私鑰。
重要
若要刪除與遠端電腦上存放區中 Cert:\CurrentUser
用戶憑證相關聯的私鑰,您必須使用委派的認證。 Cmdlet Invoke-Command
支援使用 CredSSP 參數的認證委派。 您應該先考慮任何安全性風險,再搭配 Remove-Item
Invoke-Command
使用和 認證委派。
此參數是在 Windows PowerShell 3.0 引進。
ItemType <字串>
此參數可讓您指定 所 New-Item
建立的項目類型。
在 Certificate
磁碟驅動器中,允許下列值:
- 憑證提供者
- 憑證
- 儲存
- StoreLocation
支援的指令程式
文本屬性
新的腳本屬性已新增至 x509Certificate2 物件,代表憑證,以便輕鬆搜尋和管理憑證。
DnsNameList
:若要填入DnsNameList
屬性,憑證提供者會從 SubjectAlternativeName (SAN) 延伸模組中的 DNSName 專案複製內容。 如果 SAN 延伸模組是空的,就會將憑證的 [主體] 欄位內容填入到屬性中。EnhancedKeyUsageList
:若要填入EnhancedKeyUsageList
屬性,憑證提供者會在憑證中複製EnhancedKeyUsage (EKU) 字段的OID屬性,並為其建立易記名稱。SendAsTrustedIssuer
:若要填入SendAsTrustedIssuer
屬性,憑證提供者會從憑證複製SendAsTrustedIssuer
屬性。 如需詳細資訊,請參閱 客戶端驗證的受信任簽發者管理。
這些新功能可讓您根據憑證的 DNS 名稱和到期日來搜尋它們,並透過它們的增強金鑰使用方法 (EKU) 屬性值來區分用戶端和伺服器驗證憑證。
使用管線
提供者 Cmdlet 接受管線輸入。 您可以使用管線來簡化工作,方法是將提供者數據從一個 Cmdlet 傳送至另一個提供者 Cmdlet。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。
取得說明
從 Windows PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自訂說明主題,這些主題說明這些 Cmdlet 在檔案系統磁碟機中的行為方式。
若要取得檔案系統磁碟驅動器自定義的說明主題,請在檔案系統磁碟驅動器中執行 Get-Help 命令,或使用 -Path
的 Get-Help
參數來指定檔案系統磁碟驅動器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: