共用方式為


憑證提供者

提供者名稱

憑證

磁碟機

Cert:

功能

ShouldProcess

簡短描述

提供 PowerShell 中 X.509 證書存儲和憑證的存取權。

詳細描述

PowerShell 憑證 提供者可讓您在 PowerShell 中取得、新增、變更、清除和刪除憑證和證書存儲。

憑證磁碟驅動器是階層式命名空間,其中包含您計算機上的證書存儲和憑證。

憑證提供者支援下列 Cmdlet,本文涵蓋這些 Cmdlet。

此提供者所公開的類型

憑證磁碟驅動器會公開下列類型。

  • 儲存位置 (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 的別名,cdSet-Location 的別名。 和 pwdGet-Location 的別名。

顯示憑證:磁碟驅動器的內容

此命令會 Get-ChildItem 使用 Cmdlet,在 CurrentUser 證書儲存位置中顯示證書存儲。

如果您不在磁碟驅動器中 Cert: ,請使用絕對路徑。

PS Cert:\CurrentUser\> Get-ChildItem

在憑證:磁碟驅動器內顯示憑證屬性

此範例會取得具有的 Get-Item 憑證,並將它儲存在變數中。 此範例會顯示使用 (DnsNameListEnhancedKeyUsageListSendAsTrustedIssuer) 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-ChildItemCodeSigningCertRecurse 參數,來取得電腦上具有程式代碼簽署授權單位的所有憑證。

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

尋找過期的憑證

此命令會使用 Cmdlet 的 Get-ChildItemExpiringInDays 參數來取得將在接下來 30 天內到期的憑證。

Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30

尋找伺服器 SSL 憑證

此命令會使用 Cmdlet 的 Get-ChildItemSSLServerAuthentication 參數來取得 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-ChildItemSSLServerAuthentication 參數來取得 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 僅支援 DeleteKeyPathWhatIfConfirm 參數。 會忽略所有其他參數。

Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0

使用 DNS 名稱中的通配符刪除憑證

此命令會刪除 DNS 名稱包含 "Fabrikam" 的所有憑證。 它會使用 Cmdlet 的 Get-ChildItemDNSName 參數來取得憑證,並使用 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-ChildItemExpiringInDays 參數,其值為 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 存放區位置建立證書存儲。 它支援 NamePathWhatIfConfirm 參數。 會忽略所有其他參數。 此命令會傳回代表新證書存儲 的 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-ItemInvoke-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 命令,或使用 -PathGet-Help 參數來指定檔案系統磁碟驅動器。

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:

另請參閱

about_Providers

about_Signing

Get-AuthenticodeSignature

Set-AuthenticodeSignature

Get-PfxCertificate