【发布时间】:2014-06-21 17:35:31
【问题描述】:
我有一个 telnet 脚本作为函数,如果直接调用它,它的表现很好。
如果我尝试循环调用它,它就会开始出现异常。
这段代码对我来说很好用:
$HostList = Import-CSV ".\list.csv" -Header IP,Script,SNMP -Delimiter (";")
ForEach ($item in $HostList)
{
Write-Host "Connecting to: $item" -NoNewline
$Script = Get-Content (".\Scripts\" + $item.Script + ".txt")
Get-Telnet -RemoteHost $item.IP -SNMPLoc $item.SNMP -Login $login -PassWord $password -Commands $Script
}
以下更改似乎破坏了脚本,因为我想让控制文件更加动态:
$login = Read-Host 'Please provide the login? '
$password = Read-Host -AsSecureString 'Please provide the password? '
Import-CSV ".\list.csv" -Delimiter (";") | Foreach-Object {
[String[]] $VarValues = ""
foreach ($item in $_.PSObject.Properties)
{
if ($item.Name.Contains("IP"))
{
$HostName = $item.Value
}
if ($item.Name.Contains("Script"))
{
$Script = Get-Content (".\Scripts\" + $item.Value + ".txt")
}
if (!$item.Name.Contains("IP") -and !$item.Name.Contains("Script"))
{
$VarValues += $item.Name + "#" + $item.Value
}
}
Get-Telnet -RemoteHost $HostName -Login $login -PassWord $password -Commands $Script -Vars $VarValues
}
如果我调用 Get-Telnet 函数是自己的,它仍然可以工作。
我不知道,控制文件 (.\list.csv) 中可能有多少列,有没有其他方法可以从文件中创建 $VarValues 列表?
【问题讨论】:
-
我推荐你使用
if、elseif和else;或者switch来处理您的情况。你的脚本有什么错误吗?还是只是默默地失败了?
标签: powershell csv foreach telnet