about_Certificate_Provider

提供者名稱

憑證

磁碟機

Cert:

Capabilities

ShouldProcess

簡短描述

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

詳細描述

此資訊僅適用於在 Windows 上執行的 PowerShell。

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

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

憑證提供者支援下列 Cmdlet。

此提供者公開的類型

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

  • Microsoft.PowerShell.Commands.X509StoreLocation,這是將目前使用者和所有用戶憑證分組的高階容器。 每個系統都有和 CurrentUserLocalMachine (所有使用者) 存放區位置。
  • 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-Locationls別名。

顯示 Cert: 磁碟驅動器的內容

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

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

PS Cert:\CurrentUser\> Get-ChildItem

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

這個範例會取得具有的 Get-Item 憑證,並將它儲存在變數中。 此範例示範使用 的新憑證腳本屬性 (DnsNameList、 EnhancedKeyUsageListSendAsTrustedIssuerSelect-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 CodeSigningCertRecurse 參數,取得電腦上具有程式碼簽署授權單位的所有憑證。

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 無法移動憑證儲存,而且無法將憑證移至不同的存放區位置,例如將憑證從 LocalMachineCurrentUser移至 。 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 僅支援DeleteKeyPathWhatIfConfirm 參數。 所有其他參數都會被忽略。

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 建立證書存儲。 它支援 NamePathWhatIfConfirm 參數。 所有其他參數都會被忽略。 此命令會傳 回代表新證書存儲的 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-ItemInvoke-Command 和 認證委派。

此參數已在PowerShell 7.1中重新引入

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

支援的 Cmdlet

此參數會取得憑證在憑證的 DNSNameList 屬性中具有指定功能變數名稱或名稱模式的憑證。 這個參數的值可以是 UnicodeASCII。 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 只支援 值 StoreNew-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 命令,或使用 -PathGet-Help 參數來指定檔案系統磁碟驅動器。

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

另請參閱