Ne peut pas argument de processus de transformation
Inspiré par cette post, j'ai créé le script ci-dessous DOSCommands.ps1
Function Invoke-DOSCommands {
Param(
[Parameter(Position=0,Mandatory=$true)]
[String]$cmd,
[String]$tmpname = $(([string](Get-Random -Minimum 10000 -Maximum 99999999)) + ".cmd"),
[switch]$tmpdir = $true)
if ($tmpdir) {
$cmdpath = $(Join-Path -Path $env:TEMP -ChildPath $tmpname);
}
else {
$cmdpath = ".\" + $tmpname
}
Write-Debug "tmpfile: " + $cmdpath
Write-Debug "cmd: " + $cmd
echo $cmd | Out-File -FilePath $cmdpath -Encoding ascii;
& cmd.exe /c $cmdpath | Out-Null
}
Invoke-DOSCommands "Echo ""Hello World""", -tmpdir $false
Cependant, en cours d'exécution, il retourne cette erreur:
Invoke-DOSCommands : Cannot process argument transformation on parameter 'cmd'. Cannot convert value to type S ystem.String.
At DOSCommands.ps1:20 char:19
+ Invoke-DOSCommands <<<< "Echo ""Hello World""", -tmpdir $false
+ CategoryInfo : InvalidData: (:) [Invoke-DOSCommands], ParameterBindin...mationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Invoke-DOSCommands
J'ai cherché pour cette erreur, mais ne peut pas le comprendre. Il me semble qu'il ne peut pas convertir le type de chaîne correctement! S'il vous plaît aider!
Vous avez une virgule après la chaîne que vous souhaitez passer comme paramètre
si vous utilisez PS V3, vous pouvez utiliser l'échappement sting
$Cmd
.si vous utilisez PS V3, vous pouvez utiliser l'échappement sting
--%
OriginalL'auteur Vijay | 2014-02-03
Vous devez vous connecter pour publier un commentaire.
Votre meilleur pari est d'utiliser
--%
dans PowerShell V3 ou supérieur. Voir ce post de blog j'ai écrit sur l'utilisation de--%
. Dans V1/V2, la situation est tout simplement mauvais que vous pouvez voir dans cette Connectez bug sur la question. La commune de la solution de contournement dans V1/V2 est d'utiliser des Start-Processus ou .NET du Processus.Commencer. À partir de ceux de la liste des solutions de contournement, j'aime bien celui-ci:Qui est effectivement ce que
--%
fait à l'analyse de tous les paramètres qui la suit c'est à dire qu'il analyse dans un abrutir mode similaire à cmd.exe analyse de paramètre, y compris le développement env vars référencé avec%envVarName%
.Si vous utilisez le Début surcharge qui prend un
StartProcessInfo
objet, vous pouvez définir laWorkingDirectory
dans ce StartProcessInfo objet.La Documentation Processus.démarrer et Processus.StartInfo. Je suppose que c'est ce que tu veux dire.
Oui, il y a un WorkingDirectory bien sur StartInfo. Vous créez une instance de cela et de passer en tant que paramètre de Processus.Start().
OriginalL'auteur Keith Hill
Bien en fonction de la réponse par Keith j'ai modifié ma fonction comme suit:
OriginalL'auteur Vijay