共用方式為


Protect-CmsMessage

使用密碼編譯訊息語法格式來加密內容。

Syntax

Protect-CmsMessage
       [-To] <CmsMessageRecipient[]>
       [-Content] <PSObject>
       [[-OutFile] <String>]
       [<CommonParameters>]
Protect-CmsMessage
       [-To] <CmsMessageRecipient[]>
       [-Path] <String>
       [[-OutFile] <String>]
       [<CommonParameters>]
Protect-CmsMessage
       [-To] <CmsMessageRecipient[]>
       [-LiteralPath] <String>
       [[-OutFile] <String>]
       [<CommonParameters>]

Description

Cmdlet 會 Protect-CmsMessage 使用密碼編譯訊息語法 (CMS) 格式來加密內容。

CMS Cmdlet 支援使用 IETF 格式加密和解密內容,如 RFC5652所述。

CMS 加密標準會使用公開金錀密碼編譯,其中用於加密內容的金錀 (公開金錀) 和用於解密內容的金錀 (私密金鑰) 是分開的。 公開金鑰可以廣泛共用,並非機密資料。 如有任何內容以此公開金鑰加密,只有您的私密金鑰可以解密。 如需詳細資訊,請參閱公開金鑰加密

您必須先設定加密憑證,才能執行 Protect-CmsMessage Cmdlet。 若要在 PowerShell 中辨識,加密憑證需要唯一的擴充密鑰使用方式, (EKU) 識別符,才能識別為數據加密憑證 (,例如程式代碼簽署和加密郵件的標識碼) 。 如需適用於文件加密的憑證範例,請參閱本主題的範例 1。

PowerShell 7.1 已新增 Linux 和 macOS 的支援。

範例

範例 1︰建立憑證來加密內容

您必須先建立加密憑證,才能執行 Protect-CmsMessage Cmdlet。 使用下列文字,將 [主旨] 行中的名稱變更為您的名稱、電子郵件或其他標識符,並將憑證儲存在檔案 (,例如 DocumentEncryption.inf,如 本範例所示) 。

# Create .INF file for certreq
{[Version]
Signature = "$Windows NT$"

[Strings]
szOID_ENHANCED_KEY_USAGE = "2.5.29.37"
szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

[NewRequest]
Subject = "cn=youralias@emailaddress.com"
MachineKeySet = false
KeyLength = 2048
KeySpec = AT_KEYEXCHANGE
HashAlgorithm = Sha1
Exportable = true
RequestType = Cert
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE | CERT_DATA_ENCIPHERMENT_KEY_USAGE"
ValidityPeriod = "Years"
ValidityPeriodUnits = "1000"

[Extensions]
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"
} | Out-File -FilePath DocumentEncryption.inf

# After you have created your certificate file, run the following command to add
# the certificate file to the certificate store. Now you are ready to encrypt and
# decrypt content with the next two examples.
certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer

範例 2︰加密透過電子郵件傳送的訊息

$Protected = "Hello World" | Protect-CmsMessage -To "*youralias@emailaddress.com*"

在下列範例中,您會將訊息 「Hello World」加密至 Protect-CmsMessage Cmdlet,然後將加密的訊息儲存在變數中。 To 參數會使用憑證中主旨行的值。

範例 3︰檢視文件加密憑證

PS C:\> cd Cert:\CurrentUser\My
PS Cert:\CurrentUser\My> Get-ChildItem -DocumentEncryptionCert

若要在憑證提供者中檢視檔加密憑證,您可以新增 Get-ChildItemDocumentEncryptionCert 動態參數,只有在憑證提供者載入時才可使用。

參數

-Content

指定 PSObject ,其中包含您想要加密的內容。 例如,您可以加密事件訊息的內容,然後使用包含訊息的變數 ($Event,在此範例中) 做為 Content 參數的值: $event = Get-WinEvent -ProviderName "PowerShell" -MaxEvents 1。 您也可以使用 Get-Content Cmdlet 來取得檔案的內容,例如 Microsoft Word 檔,並將內容儲存在您用來做為 Content 參數值的變數中。

Type:PSObject
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

指定您想要加密的內容路徑。 與 Path 不同,LiteralPath 的值將完全依照其輸入值來使用。 沒有字元會被視為萬用字元。 如果路徑包含逸出字元,請將它括在單引號中。 單引號會告訴PowerShell不要將任何字元解譯為逸出序列。

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-OutFile

指定您要傳送加密內容的檔案路徑和檔案名稱。

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定您想要加密的內容路徑。

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-To

指定一或多個 CMS 郵件收件者,以下列任何格式識別:

  • 實際的憑證 (擷取自憑證提供者)。
  • 包含憑證的檔案路徑。
  • 包含憑證的目錄路徑。
  • 憑證的指紋 (用於在憑證存放區尋找)。
  • 憑證的主體名稱 (用於在憑證存放區尋找)。
Type:CmsMessageRecipient[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False