我发现了这个函数,我用它来获取文件的完整路径:
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
}
}