我有脚本step1.ps1
&它包含代码:
echo "Starting with Step 3: Configuring the OS..."
echo "$args[0] and $args[1]"
step3.ps1 $args[0] $args[1]
我执行此脚本
powershell.exe install.ps1 <ip-address> <hostname>
现在执行step1.ps1
时,它会调用脚本step3.ps1
&amp;它包含代码:
echo "checking step3"
echo $args[0] and $args[1]
ac -Encoding UTF8 "$($env:windir)\system32\Drivers\etc\hosts" $args[0] $args[1]
echo "HANA DB Host file entry maintained"
它给了我一个错误:
powershell.exe : Add-Content : A positional parameter cannot be found that accepts argument '<hostname>'.
At line:1 char:1
+ powershell.exe install.ps1 <ip-address> ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Add-Content : A...
'vue2dvdbhs5'.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
At step3.ps1:3 char:1
+ Add-Content -Value $args[0] $args[1] -Path "$($env:windir)\system32\D ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Add-Content],
ParameterBindingException
+ FullyQualifiedErrorId :
PositionalParameterNotFound,Microsoft.PowerShell.Commands.AddContentCommand
答案 0 :(得分:1)
您的问题出在Add-Content
(ac
)来电。作为脚本中的最佳实践,我建议您避免使用别名并始终为您的参数命名:
#Alternative: "$($args[0]) $($args[1])"
#or ('{0} {1}' -f $args)
Add-Content -Value ($args[0] + ' ' + $args[1]) -Path "$Env:SystemRoot\System32\Drivers\etc\hosts" -Encoding UTF8
问题是解释器试图找到一个不存在的位置限制参数。它正在尝试使用-Value
填充$args[0]
,并为$args[1]
找到另一个参数。在这个例子中,我用parens对它们进行分组,并为hosts文件添加一个空格。
根据您的评论:
$IP = Test-Connection -ComputerName $Env:ComputerName -Count 1
Add-Content -Value "$($IP.Address) $($IP.IPV4Address)" -Path "$Env:SystemRoot\System32\Drivers\etc\hosts" -Encoding UTF8