当前位置: 首页 > 知识库问答 >
问题:

当CSV字段不存在时,获取意外值的Powershell函数参数

公冶兴文
2023-03-14

我正在编写一个PowerShell函数,它可以接受管道输入。具体地说,我正在使用import-csv测试它。许多参数不是必需的,这意味着CSV有时不会有这些列。对于布尔值,这是正常工作的,但是对于字符串值,缺少的CSV字段会产生字符串字段中的row对象的副本。

下面是一个示例问题参数:

[Parameter(Mandatory=$False,
       ValueFromPipeline=$True,
       ValueFromPipelinebyPropertyName=$True,
       HelpMessage="TCP Port of the remote server")]
[Alias('Port', 'Remote Server Port')]
[string]$RemoteServerPort = "5500",

现在,如果缺少该字段,我希望值是指定的“5500”,但我得到的却是:

$RemoteServerPort = @{Name=KG; IP=10.1.1.1; Username=Admin; Password=}

我四处找了找,但坦白地说,我甚至不确定该找什么。

共有1个答案

寇景明
2023-03-14

这是因为您指定了valueFromPipeline=$true,这样,如果PoSh无法通过属性名绑定参数,则会将管道对象强制为string。您可以通过从该参数中删除valueFromPipeline=$true并引入另一个绑定到管道对象来解决这个问题,即如下所示

function MyTestFunc() {

    param(
        [Parameter(ValueFromPipeline=$True)]
        [object]$PipedObj,

        [Parameter(Mandatory=$False,
               ValueFromPipelinebyPropertyName=$True,
               HelpMessage="TCP Port of the remote server")]
        [Alias('Port', 'Remote Server Port')]
        [string]$RemoteServerPort = "5500"
    )

    Write-Host "Port: $RemoteServerPort / Obj: $PipedObj"
}


$o1 = [pscustomobject]@{"Server" = "123"; "Port" = "12345"}
$o2 = [pscustomobject]@{"Server" = "1234"; "OS" = "Win3.1"}

$o1 | MyTestFunc
$o2 | MyTestFunc

将导致

Port: 12345 / Obj: @{Server=123; Port=12345}
Port: 5500 / Obj: @{Server=1234; OS=Win3.1}

详细了解幕后实际发生的情况的一种方法是使用trace-command,如下所示

Trace-Command ParameterBinding {$o2 | MyTestFunc} -PSHost
 类似资料:
  • 下面看似简单的代码抛出以下错误 回溯(最近一次调用last):文件“search.py”,第48行,pageToken=page_token)。方法中的第716行执行()文件“C:\Users\Choi\AppData\Local\Programs\Python\Python37\lib\site packages\GoogleAppClient\discovery.py” raise TypeE

  • 我有一张大桌子,我根据它们的日期把它切成许多小桌子: 我已经对dfs['2019-06-23']特定表进行了一些修改,现在我想将其保存在我的计算机上。我尝试了两种方法: 他们都提出了这个错误: get_handle()得到了一个意外的关键字参数错误 我不知道为什么会出现这个错误,也没有找到任何原因。我用这种方式保存了很多文件,但以前从未用过。 我的目标是:在修改后将此数据帧保存为csv

  • 在我下面的代码中 我得到以下错误 TypeError Traceback(最近的调用最后)在---- TypeError:conv_layer()获得意外的关键字参数“shape” 但是当我移动class关键字并将代码用作简单的函数调用时 conv1=conv_层(x,形状=[5,5,3,32]) Erors完成了。有人能告诉我这里发生了什么吗?我的理解是,“形”这个关键词在这里一塌糊涂。

  • 当我试图使用dataframe to_csv函数中的一些参数时,它抛出了一个TypeError,例如'TypeError:to_csv()得到了一个意外的关键字参数'doublequote' 或 我的熊猫版本是0.19。2(使用检查)我正在使用 以下官方文件基于0.19。2.尽管我有类型错误,但声明这些参数可以用作可选参数。http://pandas.pydata.org/pandas-docs/

  • 这是错误: 我想使用像你在代码中看到的cookie,但我不能,有人能帮我吗?

  • 我尝试使用pandas DataFrame的pivot_table方法; 但是,我收到以下错误: 上述命令摘自Wes McKinney(pandas的创建者)的《Python用于数据分析》一书