【问题标题】:Get-Content error: "Cannot bind argument to parameter 'Path' because it is null."获取内容错误:“无法将参数绑定到参数‘路径’,因为它为空。”
【发布时间】:2020-11-10 22:54:43
【问题描述】:

我发现这个函数可以用来获取文件的完整路径:

Function Get-Filename($initialDirectory="")

{

    [System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”) | Out-Null
 
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $initialdirectory
    # $OpenFileDialog.filter = "TXT (*.txt)| *.txt"
    $OpenFileDialog.ShowHelp = $true
    $OpenFileDialog.ShowDialog() | out-null
    $OpenFileDialog.filename
  
    return $filnavn 
}

$InputFil = Get-FileName

$InputFil

$OurFilesData = Get-Content $InputFil -Encoding UTF8

我收到此错误消息:

Get-Content : Cannot bind argument to parameter 'Path' because it is null.
At line:27 char:29
+ $OurFilesData = Get-Content $InputFil -Encoding UTF8
+                             ~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-Content], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetContentCommand

我知道/尝试过的:

  • 我在自己的机器上本地运行代码
  • $InputFil 返回正确的完整路径和文件名(例如:C:\Temp\E-Drevet_KANALNAVNE.CSV)
  • 如果它手动设置 $InputFil 变量 ($InputFil = "C:\Temp\E-Drevet_KANALNAVNE.CSV") 我不会收到同样的错误
  • Power Shell 版本 5.1.19041.546

当输入似乎与我手动设置 $InputFil 变量时相同时,为什么会出现此错误?

【问题讨论】:

  • 你试过Get-Content -Path $InputFil吗?
  • 您帖子中的错误似乎与标题不符,您可以仔细检查并澄清一下吗?
  • 删除return $filnavn

标签: powershell


【解决方案1】:

因为$InputFil 中的元素之一$null,所以抛出错误。

我们来看看函数中的最后两条语句:

    $OpenFileDialog.filename
  
    return $filnavn 

PowerShell 输出 everything,而不仅仅是 return 语句后面的任何表达式 - 所以在这里,PowerShell 首先输出 $OpenFileDialog.filename 的字符串值,然后它随后输出 $filnavn - 但 @ 987654327@ 它从未分配给它,因此它解析为$null

结果是$InputFil现在持有一个数组,基本上是$InputFil = @("C:\actual\file\path.ext",$null)

将您的函数定义更改为:

function Get-Filename($initialDirectory="")
{

    [System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”) | Out-Null
 
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $initialdirectory
    # $OpenFileDialog.filter = "TXT (*.txt)| *.txt"
    $OpenFileDialog.ShowHelp = $true

    if($OpenFileDialog.ShowDialog() -eq 'OK'){
      return $OpenFileDialog.filename
    }
}

【讨论】:

  • 像冠军一样工作。太感谢了。我为你投了赞成票,但由于我是新人,所以它不可见(?!?)
  • @RobertGrøndahlWinther 太好了,不客气! FWIW,您至少需要 15 个代表才能投票,不要出汗 :)
  • 通过代理为您服务。祝你有美好的一天。 :)
猜你喜欢
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
相关资源
最近更新 更多