2013-04-22 174 views
0

在继续之前,我对Powershell的体验仅为2天。cmd call to powershell“您必须在' - '运算符的右侧提供值表达式

我想从命令行中添加四个参数来调用PowerShell脚本。 powershell脚本只是清理一个CSV文件,并在每个清理阶段制作一份文件的副本。

的变量在脚本abcd涉及到新的文件名(包括完整的地址)。

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" 

错误消息我得到的是:

你必须提供在右手侧的值表达式“ - ”操作。

回答

2

我相当确定问题不在于您的脚本,而在于您如何调用它。这对我的作品(不包括所插入为清晰起见,新行):

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'" 
1

您正在使用双引号,这使其成为可扩展字符串(解析器将在字符串中查找Powershell运算符,并尝试在解析过程中调用这些运算符)。 - 是一个Powershell操作符,所以它认为你正在做某种减法操作。

切换到单引号告诉它,你希望字符串解释字符串。

0

不听起来像这样的回答解决了这个问题,具体而言,只是在情况下,它可以帮助别人的某一天:

我运行在安装了PowerShell v2(Windows 7的默认版本)的Windows 7计算机上为PowerShell v5编写的脚本时出现此错误消息。这是一个非常复杂的界限,它的编写方式与老版本的PowerShell并没有很好的结合。

运行这段代码在PowerShell中:$PSVersionTable.PSVersion.Major如果返回2(或者甚至3?),你可以尝试通过安装this Windows更新升级的PowerShell版本。

相关问题