2012-04-19 73 views
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)的都會收到整個$ _變量。

-Patrick

回答

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 /二千零十二分之十八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

+0

謝謝,這是我的第一本能,但是當我這樣做時,所有帶有列標題的變量都包含有效變量名稱功能正常,而具有無效名稱的引用中的引用不會。當我運行上面的例子時,$ Id需要2905,而$ IdRaw = $$ _。「Id(RAW)」的值成爲所有管道輸入的散列表。我在做別的事嗎? – 2012-04-20 13:21:05

+0

我從來沒有像使用引用屬性名稱的問題(我已經做了一堆)。你可以編輯你的文章,包括幾行文件? – 2012-04-20 14:38:39

+0

如果需要,我可以添加更多代碼以開始處理和結束方法。 – 2012-04-20 15:14:13