2015-05-06 44 views
1

我已閱讀Read a Csv file with powershell and capture corresponding data並已能夠放在一起的一些代碼,但它並沒有給我我想要的,我試圖讓它讀取CSV,找到在列1中的服務器並在Internet Explorer中打開第2列中的IP地址。在powershell中讀取CSV並返回等效數據

function Open-RAC 
{ 
param 
    (
    [Parameter(Mandatory = $true)] 
    [string]$ComputerName 
) 

$ServerName = @() 
$IMM = @() 

Import-Csv C:\Scripts\ComputerList\IMMs.CSV | 
ForEach-Object { 
    $ServerName += $_.ServerName 
    $IMM += $_.IMM 
} 

$inputNumber = $ComputerName#Read-Host -Prompt "Short Server Name" 

if ($ServerName -contains $inputNumber) 
{ 
    Write-Host "DRAC Exist" 
    Write-Host "Servername : $inputNumber" 
    $Where = [array]::IndexOf($ServerName, $inputNumber) 
    Write-Host "Where : $Where" 
    Write-Host "DRAC IP Address: " $IMM[$Where] 
    $URL = $IMM[$Where] 
    Write-Host "$URL" 
    $IE = new-object -com internetexplorer.application 
    $IE.navigate2("http:\\$URL") 
    $IE.visible = $true 
} 
Else 
{ 
    Write-Host " That server does not have a DRAC or you mistyped the server name" 
} 

但是,這不是給我正確的IP地址回來,但無論在CSV中的最後一個。

任何幫助表示讚賞。

+0

什麼是$計算機名變量在做什麼?如果我使用測試csv將該行更改爲'$ inputNumber =「server1」',它對我來說工作正常,所以您在IF語句中的邏輯很好。你確定你正在按照預期將服務器名變成$ inputNumber嗎?在IF語句之前,添加一行只有'$ inputNumber'的行,以便在變量到達IF語句之前可以看到該變量中的內容。 –

+0

我忘記了部分代碼,它是一個函數,當您調用該函數時$ Computername被設置。並且我一直得到正確的名稱直到最後,但它不會返回我期望的值 – Luke

+0

不確定您想要分配給$ inputNumber的行上 - 用戶輸入或名稱該腳本正在運行的計算機上。爲了獲取用戶輸入: $ inputNumber =讀 - 主機「輸入服務器名稱:」 獲取計算機名稱: $ inputNumber = $ ENV:計算機 這些工作我的是區分大小寫的告誡。看起來IndexOf功能區分大小寫,所以如果輸入「Win7-Laptop」,但是.CSV文件具有「WIN7-LAPTOP」,則IndexOf返回-1,最終得到最後一個IP地址。 –

回答

1

構築起一個CSV hashtable

$drac = @{} 
Import-Csv C:\Scripts\ComputerList\IMMs.CSV | ForEach-Object { 
    $drac[$_.ServerName] = $_.IMM 
} 

然後你就可以連接到DRAC這樣的:

if ($drac.Contains($ServerName)) { 
    Write-Host "Servername : $ServerName" 
    $URL = $drac[$ServerName] 
    $IE = New-Object -COM 'InternetExplorer.Application' 
    $IE.Navigate2("http:\\$URL") 
    $IE.Visible = $true 
} 
+0

這效果更好,謝謝 – Luke

0

[array] :: IndexOf函數區分大小寫,如果輸入與在.csv中找到的服務器名稱不同,則返回-1。您需要找到一種方法來使IndexOf不區分大小寫(我正在查找並會更新,如果我找到它)或規範輸入,以便它匹配.csv中的內容。