1

パイプラインから入力を受け取るPowerShellの高度な関数を作成しています。具体的には、import-csvからパイプインします。問題は、私が使用しているcsvファイルの列ヘッダーがpsに対して無効な構文を使用していることです。これが私のコードのようなものです

function my-function{
    [CmdletBinding()]
    params
    (
        [Parameter(Mandatory=$false,ValueFromPipeline=$true,          
                    ValueFromPipelineByPropertyName=$true)]
        [string]$Id = $_.ID,


        [(Parameter(Mandatory=$false,ValueFromPipeline=$true,
                      ValueFromPipelineByPropertyName=$true)]
        [string]$IdRaw =  $_."ID(RAW)",
    )

    BEGIN{
         #Sets up a db connection
    }
    PROCESS{
         #Builds an insert query with csv members
    }
    END{
         #closes db connection
    }
}

ID,ID(RAW),Date Time,Date Time(RAW),Type,Type(RAW)
29874,29874,4/18/2012 23:58,41018.20753, Servername, ServernameRaw

csv入力でこれを実行すると、$ Idの値は2905になりますが、$IdRaw変数は$_ハッシュテーブル全体の文字列表現を取ります。有効な名前{URL、ID、ステータス}のパラメータを作成するだけですべて機能します。スペースまたは(RAW)を含むものは、$_変数全体を受け取ります。

-パトリック

4

1 に答える 1

3
#Edit to include updated code
$x=import-csv c:\temp\testinput.csv

function my-function{
 [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$false,ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)][string]$Id,
        [Parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
        [alias("ID(RAW)")][string]$IdRaw 
    )

    begin{
         #Sets up a db connection
         Write-Debug "Starting"
    }
    process {
         #Builds an insert query with csv members
         write-debug "IDRaw=$IDRaw"
    }
    end {
         #closes db connection
                 Write-Debug "Ending"

    }
}

$x | my-function
サンプルファイルの内容

ID、ID(RAW)、日時、日時(RAW)、タイプ、タイプ(RAW)29874,29877,4 / 18/2012 23:58,41018.20753、Servername1、ServernameRaw1 29875,29878,4 / 19/2012 23 :58,41018.20753、Servername2、ServernameRaw2 29876,29879,4 / 20/2012 23:58,41018.20753、Servername3、ServernameRaw3

于 2012-04-20T01:42:43.177 に答える