使用 [switch] 时,我很难完全理解& 调用操作符和 Start-Process 之间的区别用于访问外部.CMD脚本的参数。
在我的情况下,我在脚本的一部分中使用可选的switch参数,以允许在使用switch参数时运行外部CMD脚本。但是,我最初想使用&amp; 调用运算符来调用CMD脚本,并遇到错误(见下文)。当使用&amp; 时,它似乎使用值类型 System.Object [] ,并且似乎想要将其转换为 [switch] < / em>参数类型。
如果我使用 Start-Process 而不是&amp; 更改我运行外部脚本的方式,一切正常。
这里使用两种不同的调用外部脚本的方法实际上发生了什么?我不完全清楚 [switch] 值类型是什么以及它如何与 System.Object [] 交互&amp; 运营商似乎正在使用。
正如您所看到的,我的代码正常运行,但我希望在&amp; 和 Start-Process 类型之间做一些澄清,以及它们在访问时如何进行交互使用 [switch] 参数。
我无法在网上找到与 [switch] 与&amp; 电话有关的特定情况的任何信息。任何建议的阅读也非常感谢!
提前感谢您的帮助。
Param(
[Parameter(ParameterSetName="set2", mandatory=$false)]
[switch]$Package,
[Parameter(ParameterSetName="set2", mandatory=$true)]
[string]$PackagePath
)
$Package = If ( $(Try {
Test-Path -LiteralPath $PackagePath.trim() }
Catch { $false } )) { & $PackagePath }
Else {
$wshell = New-Object -ComObject Wscript.Shell;
$wshell.Popup("The path '$PackagePath' does not exist.") }
> > .\testing.ps1 -Package -PackagePath C:\The\Path\ToScript.cmd
Cannot convert the "System.Object[]" value of type "System.Object[]" to type
"System.Management.Automation.SwitchParameter".
At C:\testing.ps1:8 char:92
+ ... $false } )) { & $PackagePath }
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : ConvertToFinalInvalidCastException
Param(
[Parameter(ParameterSetName="set2", mandatory=$false)]
[switch]$Package,
[Parameter(ParameterSetName="set2", mandatory=$true)]
[string]$PackagePath
)
$Package = If ( $(Try {
Test-Path -LiteralPath $PackagePath.trim() }
Catch { $false } )) { Start-Process $PackagePath }
Else {
$wshell = New-Object -ComObject Wscript.Shell;
$wshell.Popup("The path '$PackagePath' does not exist.") }
> > .\testing.ps1 -Package -PackagePath C:\The\Path\ToScript.cmd
cmdlet testing.ps1 at command pipeline position 1
Supply values for the following parameters:
PackagePath: d:\build_packages\build_package.cmd
答案 0 :(得分:0)
首先在dmin = min(Matrix2(:));
dmax = max(Matrix2(:));
idx = find(Matrix1 >= dmin & Matrix1 <= dmax);
中指定的$Package
变量是“System.Management.Automation.SwitchParameter”类型。尝试使用以下脚本尝试将不同类型分配给Param
变量。
$Package