Ошибка позиционного параметра в powershell - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь добавить дату к имени файла в моем скрипте Powershell, но продолжаю получать следующую ошибку (мой код ниже ошибки). Любая помощь / направление будет принята с благодарностью. Спасибо.

Set-Content : A positional parameter cannot be found that accepts 

argument '$null'.
At P:\CoverageVerifier\CombineTextFiles.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"

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Первый позиционный параметр командлета Set-Content - это параметр -Path. Из-за того, как вы определяете пути к файлам, с этим обязательно возникнут проблемы.

Как я понимаю, это UNC-пути, поэтому попробуйте это вместо:

# for LOCAL paths
# Set the driveletter to the actual drive you are using. For demo I'm using 'X:\'
# $path        = 'X:\apps\CoverageVerifier'
# for UNC paths
# change 'servername' to your actual servers name
$path        = '\\servername\apps\CoverageVerifier'

$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, чтобы убедиться, что пути к моим файлам объединены правильно.

0 голосов
/ 15 января 2019

Почему вы не используете оператор форматирования и Join-Path?
Редактировать даже с одним форматом

$path =        "\\xx\apps\CoverageVerifier"
$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))
0 голосов
/ 15 января 2019

вы используете set-content для изменения содержимого файла, а не имени файла:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...