У меня есть два сценария PowerShell. Один скрипт (omreg.ps1) содержит функцию, которая проверяет пару вещей в реестре Windows и возвращает некоторые значения; а другой скрипт (test.ps1) ссылается на omreg.ps1, вызывает функцию и пытается извлечь значения из переменных в omreg.ps1. Переменные в omreg.ps1 возвращают правильные значения внутри самой функции, однако значения не передаются должным образом test.ps1. У меня есть много других функций, которые делают подобные вещи и не имеют проблемы с передачей значений переменных из этих функций в другой сценарий PowerShell. Я не уверен, почему у меня проблема с этой конкретной функцией. Любая помощь будет оценена по достоинству.PowerShell: как передать значения переменных между сценариями
omgreg.ps1:
Function CheckOMRegistry
{
[int]$OMCodeBaseValueFail = 0
[int]$OMRegPathFail = 0
[string]$BuildNumber = GC 'E:\buildnumber.txt'
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
[string]$OMGuid = '{E9E7xxxx-6Dxx-49xx-91xx-B919DD45xxxx}'
[string]$OMRegPath = ('HKCR:\CLSID\' + $OMGuid + '\InprocServer32')
$OMRegPathExists = Test-Path $OMRegPath
If ($OMRegPathExists)
{
Write-Host "OMRegPath Exists"
Write-Host "Check CodeBase value ..."
$OMCodeBaseValue = Get-ItemProperty -Path $OMRegPath -Name 'CodeBase' | Select -Exp 'CodeBase'
Write-Host "OMCodeBaseValue: $OMCodeBaseValue"
If ($OMCodeBaseValue.Contains($BuildNumber))
{
Write-Host "OM CodeBase Value is Correct" -fore yellow
}
Else
{
Write-Host "OM CodeBase Value in INCORRECT!" -fore red
$OMCodeBaseValueFail += 1
}
}
Else
{
Write-Host "OMRegPath DOES NOT EXIST!" -fore red
$OMRegPathFail += 1
}
$OMCodeBaseValueFail
$OMRegPathFail
$OMRegPath
$OMCodeBaseValue
Write-Host
Write-Host "OMCodeBaseValueFail : $OMCodeBaseValueFail"
Write-Host "OMRegPathFail : $OMRegPathFail"
Write-Host "OMRegPath : $OMRegPath"
Write-Host "OMCodeBaseValue : $OMCodeBaseValue"
}
А вот возвращаемые значения (то, что я ожидаю):
OMCodeBaseValueFail : 0
OMRegPathFail : 0
OMRegPath : HKCR:\CLSID\{E9E7xxxx-6Dxx-49xx-91xx-B919DD45xxxx}\InprocServer32
OMCodeBaseValue : file:///E:/<buildnumber>/Release/someproduct.dll
Вот второй сценарий.
Test.ps1:
. $pwd\omreg.ps1
$OMCodeBaseValueFail, $OMRegPathFail, $OMRegPath, $OMCodeBaseValue = CheckOMRegistry
Write-Host
Write-Host "OMCodeBaseValueFail : $OMCodeBaseValueFail"
Write-Host "OMRegPathFail : $OMRegPathFail"
Write-Host "OMRegPath : $OMRegPath"
Write-Host "OMCodeBaseValue : $OMCodeBaseValue"
А вот как значения становятся возвращаются в Test.ps1 (не то, что я ожидаю, должны быть такими же, как и выше):
OMCodeBaseValueFail : HKCR
OMRegPathFail : 0
OMRegPath : 0
OMCodeBaseValue : HKCR:\CLSID\{E9E7xxxx-6Dxx-49xx-91xx-B919DD45xxxx}\InprocServer32 file:///E:/<buildnumber>/Release/someproduct.dll
'Новый-PSDrive ...' -> 'Новый-PSDrive ... | Out-Null' – PetSerAl
Вы гений! Благодарю вас, сэр. – Keith