Я пытаюсь прочитать параметры из файла и автоматически назначить их переменным в powershell. Но я получаю другой вывод при использовании regex в powershell по сравнению с соответствующим. NET regex flavour.
вот содержимое моего входного файла (install.ini):
[sqlinstall]
Switch Parameters
------------------
Active = "Off"
Install = "false"
Update = "false"
Config = "false"
Local = "false"
New_Variable = "Test Variable"
Path Parametres
----------------
InstallPath = "C:\"
Я извлек содержимое с помощью следующего сценария powershell (extract.ps1):
Set-Location $PSScriptRoot
$checkfile = "install.ini"
$readfile = Get-Content $checkfile
$filecontent = "$readfile"
# REGEX FILTER Install.ini
# -------------------
# Getting all 'switchname = switchvalue'
$regex_equals = '(?m)(?<switchname>\w+)(?=)\s*=\s*"(?<switchvalue>\w+|.*)"'
#Getting all folder paths: 'pathname = C:\ or C:\FOLDER\filde.pdf'
$regex_path = '(?m)(?<pathname>\w+)(?=)\s*=\s*\"?(?<pathvalue>\w:\\*[\\]{1}.*\w|\w:\\)'
# get everything: 'Parameter = Fullpath, Filepath, Filename, ext'
#$regex='(?<ParameterName>\w+)(?=)\s*=\s*\"?(?<FullPathAndFile>(?<FilePathOnly>\w:\\*[\\]{1}.*\"?)\\(?<FileName>\w+\.(?<Extension>\w{2,3})))'
$options = @('MultiLine') #[Text.RegularExpressions.RegexOptions]'Multiline'
# READ Install.ini ('switchname = switchvalue')
#---------------------------------------------
#[regex]::matches($filecontent, $regex_equals, $options)
$null = [regex]::matches($filecontent, $regex_equals, $options) | % { $_.Groups[1].Value } -OutVariable switchname
$null = [regex]::matches($filecontent, $regex_equals, $options) | % { $_.Groups[2].Value } -OutVariable switchvalue
# READ Install.ini ('pathname = C:\ or C:\FOLDER\filde.pdf')
#---------------------------------------------
#[regex]::matches($filecontent, $regex_path, $options)
$null = [regex]::matches($filecontent, $regex_path, $options) | % { $_.Groups[1].Value } -OutVariable pathname
$null = [regex]::matches($filecontent, $regex_path, $options) | % { $_.Groups[2].Value } -OutVariable pathvalue
#Asssign file parameters to Variables
#-------------------------------------
$dollar = "$"
$mark = '"'
<#
('switchname = switchvalue') => $Active = "Off"
$Install = "false"
$Update = "false"
$Config = "false"
$Local = "false"
$New_Variable = "Test input"
#>
foreach ($name in $switchname ) {
for ($i = 0; $i -lt $switchname.Count; $i++) {
switch ($switchname[$i]) {
($name) { New-Variable -Name $name -Value $switchvalue[$i] }
}
}
}
#('pathname = C:\ or C:\FOLDER\filde.pdf') => $InstallPath = "C:\"
foreach ($name in $pathname ) {
for ($i = 0; $i -lt $pathname.Count; $i++) {
switch ($pathname[$i]) {
($name) { New-Variable -Name $name -Value $pathvalue[$i] }
}
}
}
При тестировании регулярного выражения в сети он не показывает ошибок для обоих шаблонов:
Powershell показывает правильные результаты для большинства переменных:
------
INPUT:
------
Write-Host $Active
Write-Host $Install
Write-Host $Update
Write-Host $Config
Write-Host $Local
Write-Host $InstallPath
------
OUTPUT:
------
Off
false
false
false
false
C:\
Но он не дает правильного вывода для всех переменных:
------
INPUT:
-----
Write-Host $New_Variable
------
OUTPUT:
------
Test Variable" Path Parametres ------------------ InstallPath = "C:\
Может быть, я неправильно поставил многострочный параметр? Любой совет будет очень признателен.