如何在PowerShell脚本中向C#的Main方法传递字符串数组参数
解决方案
你可以直接构造PowerShell数组传入C#的Main方法,不需要借助Invoke-Expression(即iex),直接调用静态方法的写法更安全可靠,替换你代码最后两行即可:
# 按顺序构造Main方法需要的两个字符串参数数组 $mainArgs = @($url, $sourceFilePath) # 直接调用静态Main方法传参 [FTPFileUpload.AsynchronousFtpUpLoader]::Main($mainArgs)
原理说明
PowerShell的基础数组类型可以直接和C#的string[]参数类型自动适配,只要参数顺序和C#方法要求的顺序一致,即可正常传递,不需要额外的类型转换。
注意事项
- 你贴出的C#代码末尾多了一个多余的闭合大括号
},需要删除后才能正常通过Add-Type编译。 - 请确认C#代码中
AsynchronousFtpUpLoader类确实位于FTPFileUpload命名空间下,如果没有声明命名空间,调用时直接写[AsynchronousFtpUpLoader]::Main($mainArgs)即可。 - 不推荐保留
iex调用方式,如果你确实需要使用该写法(路径存在特殊字符时容易出错),可以写成:$cmd = "[FTPFileUpload.AsynchronousFtpUpLoader]::Main(@('$($url.Replace("'", "''"))', '$($sourceFilePath.Replace("'", "''"))'))" iex $cmd
内容的提问来源于stack exchange,提问作者chaz stone
相关产品推荐
相关产品推荐

