2017-07-12 8 views
0

ビジネスユーザーアカウント用のskypeを作成するpowershellスクリプトを作成しています。 CSVファイルから、使用する正しいLineUriを見つけるためにStatus、Business Unit、Locationを検索しています。条件に基づいてCSVからデータを検索して検索する

私は常に最初のSPARE番号を使用する次のコードを使用していますが、行とuriを見つけるために場所とビジネスユニットを検証しません。

$path  = Split-Path -parent $MyInvocation.MyCommand.Definition 
$newpath = $path + "\PhoneData.csv" 
$LineUri = @() 
$Status = @() 
$BusinessUnit = @() 
$Location = @() 

$csv = Import-Csv $newpath -Delimiter "," 

$csv |` 
    ForEach-Object { 
     $LineUri += $_.LineUri 
     $Status += $_.Status 
     $BusinessUnit +=$_.BusinessUnit 
     $Location +=$_.Location 
    } 

$currentStatus = "Spare" 
$userBusinessUnit = "Support" 
$userLocation = "WA" 


if ($Status -eq $currentStatus -And $BusinessUnit -eq $userBusinessUnit -And $Location -eq $userLocation) 
    {  
    $Where = [array]::IndexOf($Status, $currentStatus) 
    $AvailableURI = $LineUri[$Where]  
    #Write-Host "Next Uri Available: " $LineUri[$Where] 

    $changeWhere = [array]::IndexOf($LineUri, $AvailableURI) 
    #Write-Host "Next Uri Available: " $Status[$changeWhere] 


    Try 
    { 
     Enable-CsUser -identity sudip.sapkota -RegistrarPool "s4b-fe01.tapes.com" -SipAddressType SamAccountName -sipdomain "tapes.com" 
     Set-CsUser -Identity sudip.sapkota -EnterpriseVoiceEnabled $true -LineURI $AvailableURI 
     Grant-CsDialPlan -Identity sudip.sapkota -PolicyName 'DialPlan' 
     Grant-CsVoicePolicy -Identity sudip.sapkota -PolicyName 'My VoicePolicy' 

     Write-Host "[INFO]`t Lync Enterprise account for user sudip.sapkota has been created with sip : $AvailableURI" -ForegroundColor "Green" 
       "[INFO]`t Lync Enterprise account for user sudip.sapkota has been created with sip : $AvailableURI" | Out-File $log -append 

     $i = $changeWhere  
     $csv[$i].Status = 'Used' 

     $csv | Export-Csv -Path $newpath -NoTypeInformation 

     Write-Host "[INFO]`t PhoneData CSV has been updated" -ForegroundColor "Green" 
       "[INFO]`t PhoneData CSV has been updated" | Out-File $log -append 
    } 

    catch 
    { 
     Write-Host "[ERROR]`t Oops, something went wrong: $($_.Exception.Message)`r`n" -ForegroundColor "Red" 
        "[WARNING]`t Oops, something went wrong: $($_.Exception.Message)" | Out-File $log -append 
    } 

    } 

else 
{ 

    Enable-CsUser -identity sudip.sapkota -RegistrarPool "s4b-fe01.tapes.net" -SipAddressType SamAccountName -sipdomain "tapes.net" 
    Write-Host "[INFO]`t No Spare LineURI, user has been created as PC-to-PC only" -ForegroundColor "Yellow" 
      "[INFO]`t No Spare LineURI, user has been created as PC-to-PC only" | Out-File $log -append 
} 

私のCSVはこのように見えます。

Name  LineUri      Status BusinessUnit Location 
Test 1  tel:+61396176100;ext=6100 Spare Sales   VIC 
Test 2  tel:+61396176101;ext=6101 Spare Sales   VIC 
Test 2  tel:+61396176102;ext=6102 Used Sales   NSW 
Test 2  tel:+61396176103;ext=6103 Spare Support   WA 
Test 2  tel:+61396176104;ext=6104 Spare Support   WA 
Test 2  tel:+61396176105;ext=6105 Used Action   VIC 
Test 2  tel:+61396176106;ext=6106 Spare Suppot   VIC 
Test 2  tel:+61396176107;ext=6107 Spare Action   VIC 

誰かが私の間違いを見つけるのを助けることができますか?

私は手動で、テスト入力を入力を供給していたよう

$currentStatus = "Spare" 
$userBusinessUnit = "Support" 
$userLocation = "WA" 

は、だから私は、その場所BusinessUnitサポートでWAとがあるSPAREあるLineURIを、見つける必要があります。

私はTELを取得する必要があります:61396176103; EXT =私は少しあなたのロジックを作り直しLineURI

+0

期待される出力は何ですか? – gms0ulman

+0

@ gms0ulman質問そのもので自分の出力を更新しました –

答えて

0

として6103。私はあなたがforeachループの中でこれをすべて行うことができると感じました。わかりやすくするために、これはループ内のデータを収集し、次に作業する配列を残します。あなたはループの中にあなたのアクションを入れ子にすることができます。あるいは、これをそのままにして、後で配列アイテムに対して作業を実行することができます。

# Array of spare numbers that meet your criteria 
$firstAvailableSpare 

# criteria 
$currentStatus = "Spare" 
$userBusinessUnit = "Support" 
$userLocation = "WA" 


$csv |` 
    ForEach-Object { 
     $LineUri += $_.LineUri 
     $Status += $_.Status 
     $BusinessUnit +=$_.BusinessUnit 
     $Location +=$_.Location 
    $currentStatus = "Spare" 
    $userBusinessUnit = "Support" 
    $userLocation = "WA" 


    if (($_.Status -eq $currentStatus) -And ($_.BusinessUnit -eq $userBusinessUnit) -And ($_.Location -eq $userLocation)) { 
     $firstAvailableSpare = $_ # Assign the first 
     $_.Status = "Used" 

     continue # break the loop so we don't get additional hits 

    } 
} 

$csv | Export-Csv -Path $newpath -NoTypeInformation 
$firstAvailableSpare # <-- your first available spare 
$firstAvailableSpare.LineUri # <-- the URI you want 

編集1:継続に変更ブレーク:CSVエクスポートの要件

編集2用に更新。警告:何らかの理由により、ISEのデバッグ機能が中断されます。ステッピングは終了し、将来のブレークポイントは無視されます。なぜこれがあなたの目標の範囲外であるのか分かりません。

+0

これは完璧ですが、ステータスをSPAREからその特定のLineUriで使用するようにCSVファイルを更新するにはどうすればよいですか? –

+0

追加の要件 –

+0

CSVを更新しません。 –

関連する問題