Scripting

Powershell 參數

  • July 12, 2012

我的腳本中有一個 Param 塊

Param (
   [Parameter(Mandatory=$True)]
   [string]$FileLocation,

   [Parameter(Mandatory=$True)]
   [string]$password = Read-Host "Type the password you would like to set all the users to" -assecurestring
)

我可以在必填的參數欄位中使用 Read-Host CmdLet 嗎?如果不是,我該怎麼做才能確保接受正確類型的變數類型,以便將其傳遞給使用者創建過程?

指定正確的密碼類型就足夠了,嘗試:

Param (
   [Parameter(Mandatory=$True)]
   [string]$FileLocation,

   [Parameter(Mandatory=$True)]
   [Security.SecureString]$password
)

PowerShell 將“屏蔽”密碼(與 read-host -asSecureString 相同),結果類型將是其他 cmdlet 可能需要的類型。

**編輯:**在最近的評論之後:解決方案,它提供了提供純文字密碼或強制使用者輸入密碼的選項(但以 Read-Host -AsSecureString 相同的方式屏蔽它)並且在這兩種情況下都得到

$$ Security.SecureString $$到底。而且,作為獎勵,您會收到一些精美的密碼提示。;)

[CmdletBinding(
   DefaultParameterSetName = 'Secret'
)]
Param (
   [Parameter(Mandatory=$True)]
   [string]$FileLocation,

   [Parameter(
       Mandatory = $True,
       ParameterSetName = 'Secret'
   )]
   [Security.SecureString]${Type your secret password},
   [Parameter(
       Mandatory = $True,
       ParameterSetName = 'Plain'
   )]
   [string]$Password
)

if ($Password) {
   $SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
   $SecretPassword = ${Type your secret password}
}

Do-Stuff -With $SecretPassword

我在這裡使用了 Jaykul 的技巧來欺騙提示輸入安全密碼。;) 這將使這個參數很難在 CLI 模式下使用(-Type your secret password 不會像預期的那樣工作),所以它應該強制腳本的使用者忽略密碼(並獲得屏蔽提示)或指定它-password 參數,接受正常字元串並將其轉換為腳本邏輯內的安全字元串。

引用自:https://serverfault.com/questions/406933