2012-04-19 70 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