關於PowerShell中建立受信任的指令碼

2021-04-17 04:22:04 字數 4174 閱讀 5715

自從研究powershell以來,經歷了很多,過程是很艱辛啊。尤其是當我去網路上搜尋關於powershell的資料的時候,我發現找到的很少,甚至是少得可憐。或者可以說是一篇文章,大家互相**,google幾頁以後,發現的資料基本如出一轍。沒辦法,只能自己研究。

由於要用到執行策略的更改,所以涉及到自己建立受信任指令碼。可是網上的資料講的不是很詳細,我按照上面的步驟基本沒有通過的,所以只能自己研究。

然後根據網上的資料,我們只需要在powershell的命令列裡執行makecert 就可以,但我試了很多次也沒有成功。在cmd命令列裡可以直接執行makecert.exe,但在ps環境裡就不能成功。後來才發現,網上沒有說清楚,我們需要把makecert.exe檔案拷貝到我們的系統資料夾下,否則我們在ps中使用makecert.exe的時候系統會提示找不到命令。

ok,只要在環境裡可以執行makecert.exe,我們就可以進行下一步的操作了。

命令:makecert -n "cn=myroot" -a sha1 –eku1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer –ss root -sr localmachine ,完成以後會彈出對話方塊,讓我們輸入私鑰密碼,輸入並確認。

輸入命令:makecert -pe -n "cn=mycertificate" -ss my –a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk –c root.cer,作用是開始建立證書。執行完成後,我們可以在 windows powershell 中執行以下**,以核實此安裝過程:gci cert:/currentuser/my -codesigning 。 這將在 cert: drive(windows 證書儲存位置)中顯示所有**簽名證書專案的列表。此外,所有這一切還將被記錄在 windows powershell 自身中。要查詢該文件,只需執行 help about_signing 然後向下翻閱幾個螢幕即可。

所有步驟都完成了,我們就可以進行指令碼的簽名了。$cert = @(gci cert:/currentuser/my-codesigning)[0]這句命令用來檢索首次安裝的**簽名證書(如果安裝了多個證書並希望使用第乙個以外的其他證書,只需將 "0" 改為相應的數字即可)。

set-authenticodesignature d:/myscript.ps1 $cert這個**則進行指令碼的簽名。現在我們開啟指令碼,我們可以看到簽名區塊被插入到底部。嘗試使用執行策略 allsigned (set-executionpolicy allsigned) 執行指令碼,它就能夠正常工作。現在我們可以嘗試修改指令碼並儲存它,但要確保沒有再次對它進行簽名。windows powershell 現在應該會拒絕執行修改後的版本,因為簽名已被破壞。

那麼我們建立受信任指令碼的操作就完成了。下面是makecert的一些引數

選項 說明

-nx509name

指定主題的證書名稱。此名稱必須符合 x.500 標準。最簡單的方法是在雙引號中指定此名稱,並加上字首cn=;例如,"cn=myname"。

-pe

將所生成的私鑰標記為可匯出。這樣可將私鑰包括在證書中。

-skkeyname

指定主題的金鑰容器位置,該位置包含私鑰。如果金鑰容器不存在,系統將建立乙個。

-srlocation

指定主題的證書儲存位置。location 可以是currentuser(預設值)或localmachine

-ssstore

指定主題的證書儲存名稱,輸出證書即儲存在那裡。

-#number

指定乙個介於 1 和 2,147,483,647 之間的序列號。預設值是由 makecert.exe 生成的唯一值。

-$authority

指定證書的簽名許可權,必須設定為commercial(對於商業軟體發行者使用的證書)或individual(對於個人軟體發行者使用的證書)。

-?

顯示此工具的命令語法和基本選項列表。

-!

顯示此工具的命令語法和擴充套件選項列表。

選項 說明-aalgorithm

指定簽名演算法。必須是md5(預設值)或sha1

-bmm/dd/yyyy

指定有效期的開始時間。預設為證書的建立日期。

-cycerttype

指定證書型別。有效值是end(對於最終實體)和authority(對於證書頒發機構)。

-dname

顯示主題的名稱。

-emm/dd/yyyy

指定有效期的結束時間。預設為 12/31/2039 11:59:59 gmt。

-ekuoid[,oid]

將用逗號分隔的增強型金鑰用法物件識別符號 (oid) 列表插入到證書中。

-hnumber

指定此證書下面的樹的最大高度。

-icfile

指定頒發者的證書檔案。

-ikkeyname

指定頒發者的金鑰容器名稱。

-ikykeytype

指定頒發者的金鑰型別,必須是signatureexchange或乙個表示提供程式型別的整數。預設情況下,可傳入1表示交換金鑰,傳入2表示簽名金鑰。

-inname

指定頒發者的證書公用名稱。

-ipprovider

指定頒發者的 cryptoapi 提供程式名稱。

-irlocation

指定頒發者的證書儲存位置。location 可以是currentuser(預設值)或localmachine

-isstore

指定頒發者的證書儲存名稱。

-ivpvkfile

指定頒發者的 .pvk 私鑰檔案。

-iypvkfile

指定頒發者的 cryptoapi 提供程式型別。

-llink

到策略資訊的鏈結(例如,乙個 url)。

-mnumber

以月為單位指定證書有效期的持續時間。

-nscp

包括 netscape 客戶端身份驗證擴充套件。

-r

建立自簽署證書。

-scfile

指定主題的證書檔案。

-skykeytype

指定主題的金鑰型別,必須是signatureexchange或乙個表示提供程式型別的整數。預設情況下,可傳入1表示交換金鑰,傳入2表示簽名金鑰。

-spprovider

指定主題的 cryptoapi 提供程式名稱。

-svpvkfile

指定主題的 .pvk 私鑰檔案。如果該檔案不存在,系統將建立乙個。

-sytype

指定主題的 cryptoapi 提供程式型別。

Powershell建立陣列

在powershell中建立陣列可以使用逗號。ps c powershell nums 2,0,1,2 ps c powershell nums20 12對於連續的數字陣列可以使用乙個更快捷的方法 ps c powershell nums 1.5 ps c powershell nums12 345...

powershell 關於命令幫助檔案中引數的解讀

下面以get eventlog命令進行舉例,這裡我就擷取關鍵部分 名稱 get eventlog 摘要 gets the events in an event log,or a list of the event logs,on the local or remote computers.語法 ge...

Powershell批量建立AD賬戶

它是乙個單獨的命令列,即匯入乙個 csv 檔案並使用其中的資訊建立數十甚至數百個新的 active directory 使用者 import csv c provision1.csv foreach object 它確實是個很長的命令,但功能卻強大得令人驚訝。首先是 import csv 本機外殼 ...