从powershell脚本执行powershell.exe(在ISE中运行但不在脚本中运行)

时间:2010-11-03 18:22:02

标签: powershell powershell-v1.0

我是这些令人敬畏的Power shell世界的新手。我的脚本有问题,并且真的很了解你的帮助。

我有一个脚本“cmd4.ps1”需要运行另一个需要接收3个字符串参数的脚本“Transfer.ps1”,它需要像其他进程一样运行,并且与“cmd4.ps1”不同。

cmd4.ps1:

$Script="-File """+$LocalDir+"\Remote\Transfer.ps1"" http://"+$ServerIP+"/Upload/"+$FileName+" "+$ServerIP+" "+$LocalIP

Start-Process powershell.exe -ArgumentList $Script 

在执行后,$Script会产生类似于

的值
-File "c:\temp re\Remote\Transfer.ps1" http://10.1.1.1/Upload/file.txt 10.1.1.1 10.1.1.10

包含使用-File参数运行Powershell.exe脚本的语法,以及Transfer.ps1需要的三个参数("http://10.1.1.1/Upload/file.txt", 10.1.1.1, 10.1.1.10)。

当我在PowerShell ISE中编写这些指令时,我可以看到每个值都正确并且PowerShell.exe以正确的值执行,一切正常!但是如果我将这些指令放在“cmd4.ps1”脚本中它不会工作,我的意思是有些东西与参数不对,因为我可以看到它启动PowerShell但它永远不会结束。

2 个答案:

答案 0 :(得分:1)

-ArgumentList期待一个字符串参数数组而不是单个字符串。试试这个:

$ScriptArgs = @(
    '-File'
    "$LocalDir\Remote\Transfer.ps1"
    "http://$ServerIP/Upload/$FileName $ServerIP $LocalIP"
)

Start-Process powershell.exe -ArgumentList $ScriptArgs

请注意,您可以简化args的字符串构造,如上所示。

答案 1 :(得分:0)

为什么不把它放在cmd4.ps1中?

& "c:\temp re\Remote\Transfer.ps1" "http://10.1.1.1/Upload/file.txt" "10.1.1.1" "10.1.1.10"