2つのPowerShellスクリプトがあります。 1つのスクリプト(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
は、2番目のスクリプトです。
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
'New-PSDrive ...' - > 'New-PSDrive ... | Out-Null' – PetSerAl
あなたは天才です!ありがとうございました。 – Keith