gpt4 book ai didi

powershell - 无法处理参数转换

转载 作者:行者123 更新时间:2023-12-04 19:07:13 25 4
gpt4 key购买 nike

受此启发 post , 我在下面创建了脚本 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

但是,在执行时它会返回此错误:
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

我已经搜索过此错误,但无法弄清楚。在我看来,它无法正确转换字符串类型!请帮忙!

最佳答案

最好的办法是使用 --%在 PowerShell V3 或更高版本中。看到这个 blog post我写了使用 --% .在 V1/V2 中,情况很糟糕,正如您在此 Connect bug on the issue 中看到的那样. V1/V2 中常见的解决方法是使用 Start-Process 或 .NET 的 Process.Start。从这些解决方法列表中,我有点喜欢这个:

[System.Diagnostics.Process]::Start("Cmd", "/c anything you want to put here with embedded quotes, and variables")

这实际上是什么 --%对它后面的所有参数进行解析,即它以类似于 cmd.exe 参数解析的简化模式解析它们,包括扩展引用 %envVarName% 的环境变量.

关于powershell - 无法处理参数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21524101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com