Ich habe zwei PowerShell-Skripts. Ein Skript (omreg.ps1) enthält eine Funktion, die ein paar Dinge in der Windows-Registry überprüft und einige Werte zurückgibt; und das andere Skript (test.ps1) verweist auf omreg.ps1, ruft die Funktion auf und versucht, die Werte aus den Variablen in omreg.ps1 abzurufen. Die Variablen in omreg.ps1 geben die korrekten Werte innerhalb der Funktion selbst zurück, die Werte werden jedoch nicht ordnungsgemäß an test.ps1 übergeben. Ich habe viele andere Funktionen, die ähnliche Dinge tun und keine Probleme haben, die Variablenwerte von diesen Funktionen an ein anderes PowerShell-Skript zu übergeben. Ich bin nicht sicher, warum ich das Problem mit dieser speziellen Funktion bekomme. Jede Hilfe wäre willkommen.PowerShell: Übergeben von Variablenwerten zwischen Skripts
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"
}
Und hier sind die zurückgegebenen Werte (was ich erwarte):
OMCodeBaseValueFail : 0
OMRegPathFail : 0
OMRegPath : HKCR:\CLSID\{E9E7xxxx-6Dxx-49xx-91xx-B919DD45xxxx}\InprocServer32
OMCodeBaseValue : file:///E:/<buildnumber>/Release/someproduct.dll
Hier ist das zweite Skript.
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"
Und hier ist, wie die Werte in test.ps1 zurückgegeben zu werden (nicht, was ich erwarten sollte die gleiche wie oben sein):
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
Sie sind ein Genie! Danke, mein guter Herr. – Keith