获取内容错误:"Cannot bind argument to parameter 'Path' because it is 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
$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变量时相同时,为什么会出现此错误?

由于$InputFil中的元素之一是$null,因此抛出错误。

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

$OpenFileDialog.filename

return $filnavn 

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

结果是$InputFil现在拥有数组,基本上是$InputFil = @("C:actualfilepath.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
}
}

相关内容

最新更新