在电源外壳中找不到位置参数错误



我正在尝试将日期附加到Powershell脚本中的文件名,但不断收到以下错误(我的代码低于错误)。 任何帮助/指导将不胜感激。 谢谢。

Set-Content : A positional parameter cannot be found that accepts 
argument '$null'.
At P:CoverageVerifierCombineTextFiles.ps1:8 char:50
+ ... thTrailer | Set-Content "${path}\" + ${$dateStr} + "_CoverageVerifi ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-Content], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetContentCommand

这是我的Powershell代码:

$path = "\xx\apps\CoverageVerifier\"
$pathHeader = "\xx\apps\CoverageVerifier\Header.txt"
$pathData = "\xx\apps\CoverageVerifier\Data.txt"
$pathTrailer = "\xx\apps\CoverageVerifier\Trailer.txt"
$date = Get-Date
$dateStr = $date.ToString("yyyyMMdd")
#Write-Output $dateStr
Get-Content $pathHeader,$pathData,$pathTrailer | Set-Content "${path}\cvgver." + ${dateStr} + ".0101"

Set-Content cmdlet 的第一个位置参数是 -Path 参数。由于您定义文件路径的方式,它肯定会有问题。

据我了解,这些是 UNC 路径,因此请尝试以下操作:

# for LOCAL paths
# Set the driveletter to the actual drive you are using. For demo I'm using 'X:'
# $path        = 'X:appsCoverageVerifier'
# for UNC paths
# change 'servername' to your actual servers name
$path        = '\servernameappsCoverageVerifier'
$pathHeader  = Join-Path -Path $path -ChildPath 'Header.txt'
$pathData    = Join-Path -Path $path -ChildPath 'Data.txt'
$pathTrailer = Join-Path -Path $path -ChildPath 'Trailer.txt'
$dateStr     = (Get-Date).ToString("yyyyMMdd")
$outFile     = Join-Path -Path $path -ChildPath ($dateStr + "_TestVerifier.txt")
Get-Content $pathHeader, $pathData, $pathTrailer | Set-Content $outFile

如您所见,我经常使用 Join-Path cmdlet 来确保我的文件路径正确连接。

为什么不使用格式运算符和连接路径?
即使只有一种格式也可以编辑

$path =        "\xxappsCoverageVerifier"
$pathHeader =  Join-Path $path "Header.txt"
$pathData =    Join-Path $path "Data.txt"
$pathTrailer = Join-Path $path "Trailer.txt"
Get-Content $pathHeader,$pathData,$pathTrailer | 
  Set-Content (Join-Path $path ("{0:yyyyMMdd}_TestVerifier.txt" -f (Get-Date))

您可以使用 set-content 来修改文件的内容,而不是文件名:

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-content?view=powershell-6

最新更新