В настоящее время у меня есть скрипт, который будет сканировать каталог и извлекать первые 4 символа имени файла xml, помещать их в массив, а затем создавать новую папку для каждой уникальной записи массива. Я хотел бы создать аналогичный скрипт, который считывает содержимое файлов xml в каталоге, получает значение из файла, заполняет массив этим значением, а затем создает список каталогов с уникальными значениями из массива. ,
Я очень новичок в powershell и мне не повезло с разбором XML файлов. Вот мой текущий код:
### Global Variables
$Global:server = "SERVER"
$Global:archive = "\\$server\PCMS\Archive"
$Global:xmlDir = "\\$server\PCMS\Archive\xml"
$Global:date = Get-Date -Format yyyyMMdd
$Global:dateFolder = "$archive\$date"
$Global:manifest = "\\$server\PCMS\Temp"
### Functions
# Create a folder with today's date
function new-folder
{
New-Item -ItemType Directory -Path $Global:archive -Name $Global:date
}
# Analyze files and get store number
function files2dir
{
$Global:array = @((Get-ChildItem -Path $xmlDir -Recurse -Include 0*.xml -Name -ErrorAction Stop))
$Global:array = $array.SubString(0,4) | Get-Unique #gets first 4 characters of a file and only keeps unique items
}
If (Test-Path -Path $dateFolder) {
Main
}
else {
new-folder
}
## Main script
function Main {
files2dir
$integer = 0
foreach($file in $array){
New-Item -ItemType Directory -Path $dateFolder -Name $array[$integer] -erroraction 'silentlycontinue'
$integer = $integer + 1
}
}
А вот пример файлов xml в каталоге. Я пытаюсь получить значение storeCode
<?xml version="1.0" encoding="UTF-8"?>
<beanstoreTransaction>
<transactionSession>
<Session class="redacted" action="0">
<version>
<database>Redacted</database>
<build>Redacted</build>
</version>
<companyCode>XXXX</companyCode>
<frequency>YYYYY</frequency>
<openMethod>2</openMethod>
<sessionID>ZZZ</sessionID>
<startDateTime>2020-02-24 05:12:47.00</startDateTime>
<statusStatusCode>Q</statusStatusCode>
<storeCode>1111</storeCode>
<tillTillNumber>9</tillTillNumber>
<tradingDate>2020-02-24</tradingDate>
<transactionNumber>RRRR</transactionNumber>
</Session>
</beanstoreTransaction>