J'essaie d'ajouter la date à un nom de fichier dans mon script Powershell mais je continue à recevoir l'erreur suivante (mon code est en dessous de l'erreur). Toute aide / direction serait grandement appréciée. Merci.
$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"
Voici mon code 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
3 Réponses :
vous utilisez set-content pour modifier le contenu d'un fichier, pas le nom du fichier:
Merci Leon. Savez-vous comment modifier le nom du fichier?
Renommer l'élément: docs.microsoft.com/en-us/powershell/module/…
Le premier paramètre positionnel de la cmdlet Set-Content est le paramètre -Path .
En raison de la façon dont vous définissez les chemins pour les fichiers, il y aura certainement des problèmes avec cela.
Si je comprends bien, ce sont des chemins UNC, alors essayez plutôt ceci:
# 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
Comme vous pouvez le voir, j'utilise beaucoup l'applet de commande Join-Path pour m'assurer que mes chemins de fichiers sont correctement concaténés.
Merci Théo. Appréciez votre temps et votre aide. Je vais l'essayer.
Merci Théo. Cela l'a compris !!
Pourquoi n'utilisez-vous pas l'opérateur de format et Join-Path?
Modifier même avec un seul format
$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))
Merci pour votre temps et aide aussi. Cela a fonctionné pour moi aussi.
Pourquoi doublez-vous tous les contre-obliques? S'agit-il de chemins UNC?
Oui, ce sont des chemins UNC vers un serveur spécifique sur le réseau. Désolé pour mon ignorance. Merci.