2

PowerShell でスクリプトを作成していますが、Get-WMIObject コマンドレットなどでパラメーター「-Credential」が宣言されるのと同じ方法で、パラメーター「X」を「宣言」する方法があるかどうか疑問に思っていました。

もっと具体的に言ってみましょう。ほとんどすべてのコマンドレットの Credential パラメーターは、PSCredential オブジェクトです。ただし、引数は PSCredential オブジェクトまたはユーザー名を持つ文字列オブジェクトのいずれかです。

[CmdletBinding()]
param ([Parameter(Mandatory = $false)]
       [System.Management.Automation.PSCredential]
       $Credential)

文字列を渡すときに問題が発生します。もちろん、パラメーターの引数変換は実行できません。タイプ "System.String" をタイプ PSCrendential に変換できません。

4

4 に答える 4

5

これを試してください:

param(
    [System.Management.Automation.Credential()]
    $Credential=[System.Management.Automation.PSCredential]::Empty
)

パラメータ引数の変換については、次の素晴らしいスクリプトを確認してください。

http://poshcode.org/3024

于 2012-04-07T07:14:06.447 に答える
1

もう少し情報:)

PowerShell には、これらの引数変換の 1 つが資格情報で使用するために含まれているため、PSCredential パラメーターを持つスクリプトを記述するときは常に、次のように CredentialAttribute で装飾する必要があります。

param([Parameter(Mandatory = $false)]
      [System.Management.Automation.PSCredential]
      [System.Management.Automation.Credential()]$Credential =  [System.Management.Automation.PSCredential]::Empty)

属性の名前の「属性」の部分を省略しているため (つまり、[System.Management.Automation.CredentialAttribute()]を指定する必要がないため)、少し混乱しています。資格情報の種類を 2 回指定しています。もちろん、実際には、これは PowerShell での括弧の別の使用法です。属性を指定するには、型と同様に角括弧を使用しますが、括弧を使用します (属性がパラメーターを必要としない場合でも)。

http://huddledmasses.org/more-custom-attributes-for-powershell-parameters/

于 2012-04-10T20:34:40.020 に答える
0

これが私がやった方法です。次のようにパラメーターを宣言します。

[パラメータ(位置=2)] [オブジェクト]$Credential

次に、スクリプトの冒頭で:

begin {
        Write-Verbose -Message "Starting  $($myinvocation.mycommand)"
        write-verbose -Message "Using volume $($volume.toUpper())"
        #convert credential to a PSCredential if a string was passed.
        if ( $credential -is [system.management.automation.psCredential]) {
            Write-Verbose "Using PSCredential for $($credential.username)"
        }
        ElseIf ($Credential) {
            Write-Verbose "Getting PSCredential for $credential"
            $Credential=Get-Credential $credential
        }
    } #Begin
于 2012-04-10T13:28:27.287 に答える
0

[T] 型を持つ関数パラメーターを宣言すると、関数を呼び出すときに [X] 型の任意のオブジェクトを指定できます。[T] には [X] 型を取る単一パラメーターのコンストラクターがあります。

つまり、[文字列] から [T] を構築できる場合、[T] または [文字列] のいずれかで関数を呼び出すことができます。

于 2012-04-05T21:53:37.363 に答える