共用方式為


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。

範例

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

# 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 -new DocumentEncryption.inf DocumentEncryption.cer

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

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

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

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

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

PS C:\> cd 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