cmd call to powershell“您必须在' - '运算符的右侧提供值表达式
问题描述:
在继续之前,我对Powershell的体验仅为2天。cmd call to powershell“您必须在' - '运算符的右侧提供值表达式
我想从命令行中添加四个参数来调用PowerShell脚本。 powershell脚本只是清理一个CSV文件,并在每个清理阶段制作一份文件的副本。
的变量在脚本a
,b
,c
和d
涉及到新的文件名(包括完整的地址)。
PowerShell脚本
param(
[string]$a,
[string]$b,
[string]$c,
[string]$d
)
Get-Content $a | ForEach-Object { $_ -replace """""""""""","""""" } | Set-Content $b -Force
Get-Content $b | ForEach-Object { $_ -replace """""""","""" } | Set-Content $c -Force
Get-Content $c | ForEach-Object { $_ -replace """""","" } | Set-Content $d -Force
命令脚本
命令下面的脚本是什么,我想在cmd
运行(注:我已经采取了真正的地址)。
powershell.exe '\\somefileaddress\CleanData.ps1'
-a "\\someaddress\DrFA-C.csv"
-b "\\someaddress\DrFA-C_2.csv"
-c "\\someaddress\DrFA-C_3.csv"
-d "\\someaddress\DrFA-C_4.csv"
错误消息我得到的是:
你必须提供在右手侧的值表达式“ - ”操作。
答
我相当确定问题不在于您的脚本,而在于您如何调用它。这对我的作品(不包括所插入为清晰起见,新行):
powershell.exe -Command "& '\\somefileaddress\CleanData.ps1'
-a '\\someaddress\DrFA-C.csv'
-b '\\someaddress\DrFA-C_2.csv'
-c '\\someaddress\DrFA-C_3.csv'
-d '\\someaddress\DrFA-C_4.csv'"
答
您正在使用双引号,这使其成为可扩展字符串(解析器将在字符串中查找Powershell运算符,并尝试在解析过程中调用这些运算符)。 - 是一个Powershell操作符,所以它认为你正在做某种减法操作。
切换到单引号告诉它,你希望字符串解释字符串。
答
不听起来像这样的回答解决了这个问题,具体而言,只是在情况下,它可以帮助别人的某一天:
我运行在安装了PowerShell v2(Windows 7的默认版本)的Windows 7计算机上为PowerShell v5编写的脚本时出现此错误消息。这是一个非常复杂的界限,它的编写方式与老版本的PowerShell并没有很好的结合。
运行这段代码在PowerShell中:$PSVersionTable.PSVersion.Major
如果返回2
(或者甚至3
?),你可以尝试通过安装this Windows更新升级的PowerShell版本。