Powershell-命令可在界面中使用,但不能在脚本中使用

时间:2019-01-22 12:47:13

标签: powershell

脚本新手。 我有一个非常基本的脚本,可以在ISE中正常运行,但是当我在文件中运行该脚本时却无法运行。 脚本:

#
# WPM Convert to Ascii.ps1
# Process to remove accented characters from a text file as they cause issues when importing to U4BW via GL07
# SP Jan 2019
#
# Parameters
#
$usefile    =$dir+"\"+'SPTEMP.txt'
$outfile    =$dir+"\"+'SPOUT.txt'

#
# Convert characters
#
Get-Content $usefile -replace 'a', 'A' |Set-Content $outfile 

仅将一个文件中的字符转换为另一个文件。 从U4BW(Agresso)命令调用的是:-

powershell.exe -ExecutionPolicy Unrestricted -File "c:\scripts\WPM Convert to Ascii.ps1" -infile "[File name]" -dir "[Directory]"

我已经调试了所有发送的参数(infile和dir),它们很好。尝试事先关闭文件(输出文件)。

我知道这可能是一个基本问题,但我看不到。 任何帮助表示感谢! 史蒂夫

2 个答案:

答案 0 :(得分:1)

您需要对脚本进行以下更改。

在脚本顶部进行声明,以便实际上在脚本中可以识别出调用中的-dir参数:

param($dir)

此外,您的replace命令看起来错误,-Replace不是Get-Content的有效参数。你可能是这个意思吗?

(Get-Content $usefile) -replace 'a', 'A' | Set-Content $outfile

最终脚本(其他一些小的改进):

# WPM Convert to Ascii.ps1
# Process to remove accented characters from a text file as they cause issues when importing to U4BW via GL07
# SP Jan 2019

# Passed parameters
param (
    # The base directory path
    $dir
)

# Derived parameters
$usefile = Join-Path $dir "SPTEMP.txt"
$outfile = Join-Path $dir "SPOUT.txt"

# Replace characters
(Get-Content $usefile) -replace 'a', 'A' | Set-Content $outfile 

然后这样称呼它:

powershell.exe -ExecutionPolicy Unrestricted -File "c:\scripts\WPM Convert to Ascii.ps1" -dir "[Directory]"

答案 1 :(得分:0)

我同意上面所说的,“替换”不是获取内容的参数。

# WPM Convert to Ascii.ps1
# Process to remove accented characters from a text file as they cause issues when importing to U4BW via GL07
# SP Jan 2019
#

Param
(
    [Parameter(Mandatory=$true)]
    [string]$usefile,

    [Parameter(Mandatory=$true)]
    [string]$outfile,

    [Parameter(Mandatory=$false)]
    $dir = $(Get-Location)
)


#
# Convert characters
#
(Get-Content $usefile) -replace 'a', 'A' |Set-Content $dir/$outfile