Заполните переменную в условии из xml - PullRequest
0 голосов
/ 22 октября 2018

у меня есть переменная $ usercity.city, полученная с помощью запроса Msoluser для получения города пользователя.Что мне нужно сделать, это заполнить переменную с именем $ icthead в зависимости от этого значения.Я имею в виду, что у меня около 30 городов с разными значениями, есть ли способ отличиться от простого перехода?Как загрузка из внешнего XML или что-то в этом роде ... спасибо!Если вы думаете, что простое переключение не замедлит мой сценарий, я пойду по этому пути.

Примечательный пример того, что я хочу сделать:

$usercity=Milan then $icthead=email1@company.it
$usercity=London then $icthead=email2@company.it
$usercity=chicago then $icthead=email3@company.it

, но для 20или больше городов.Решением будет загрузка каждой электронной почты в массив [$ usercity], но я не могу сделать это самостоятельно, потому что я действительно плохой.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я думаю, что вы ищете external reference.Это может быть сделано многими способами .Вот некоторые из них:

Переменная Hashtable / Dictionary:

#declare hashtable type variable.
$ht = @{}
#populate it with key/value items.
$ht.Add('Milan','email1@company.it')
$ht.Add('London','email2@company.it')
$ht.Add('Chicago','email3@company.it')
#input city name Milan
$city = 'Milan'
#now call hashtable variable by its key Milan
$ht[$city]
#output
email1@company.it
#usage example
Set-UserProperty -City $city -Email $ht[$city]

Строка XML:

[xml]$xml = @"
<?xml version="1.0" encoding="utf-8" ?>
<Dictionary>
       <City name="Milan">
          <Email>email1@company.it</Email>
       </City>
       <City name="London">
          <Email>email2@company.it</Email>
       </City>
       <City name="Chicago">
          <Email>email3@company.it</Email>
       </City>       
</Dictionary>
"@
$xml.Dictionary.City | Where-Object {$_.name -eq $city} | Select -ExpandProperty Email

Строка CSV:

$city = 'Milan'

$CSV = @"
"City","Email"
"Milan","email1@company.it"
"London","email2@company.it"
"Chicago","email3@company.it"
"@ | ConvertFrom-Csv

($CSV | Where-Object {$_.City -eq $city}).Email

#output
email1@company.it

Файлы XML / CSV:

  1. Создание файла XML или CSV с тем же содержимымкак у соответствующих here string (@" ... "@).Например:

myfile.xml:

<?xml version="1.0" encoding="utf-8" ?>
<Dictionary>
       <City name="Milan">
          <Email>email1@company.it</Email>
       </City>
       <City name="London">
          <Email>email2@company.it</Email>
       </City>
       <City name="Chicago">
          <Email>email3@company.it</Email>
       </City>       
</Dictionary>

myfile.csv:

"City","Email"
"Milan","email1@company.it"
"London","email2@company.it"
"Chicago","email3@company.it"

Заменить here string (@" ... "@) в приведенном выше коде на Get-Content -Raw -Path 'myfile.xml' или Get-Content -Raw -Path 'myfile.csv' соответственно.Например:

[xml] $ xml = Get-Content -Raw -Path 'myfile.xml'

или

$ CSV = Get-Content -Raw-Path 'myfile.csv'

Остальной код остается неизменным.

0 голосов
/ 22 октября 2018

Я не уверен, что что-то вроде этого - то, что вы ищете, но если у вас есть данные в листе Excel с электронной почтой для каждого города в строке данных, то вы можете получить электронную почту.почта этого города так:

foreach($city in $usercity.city)
{

icthead

function icthead {

# This part is to open up the designated xlsx file and make powershell "look" in it.
$Excel = New-Object -ComObject excel.application
$DestinationPath = "Your xlsx file location"
$workbook = $Excel.workbooks.open($DestinationPath)
$Sheet = $workbook.worksheets.item("Name of the excel tab your information is in")
$Sheet.activate()

# This will find the horizontal row that the city is in. 
$GetCity = $Sheet.Range("Vertical range .ex B2:B9999").find("$City")
$Row = $GetCity.Row

# This will require you to download the ImportExcel module - https://www.powershellgallery.com/packages/ImportExcel/3.0.0 - All credit to Douglas Finke
$XL = Import-Excel "Your xlsx file location"

# .Mail is an example. Should be your column title. It will grab the value that is in that row under that column and save it in the variable. Remember that xlsx is 0 indexed. 
$CityMail = $XL[$row].Mail 

}    

$IctHead = $CityMail
Write-host $IctHead
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...