PowerShell; You cannot call a method on a null-valued expression
Har skapat ett GUI till ett av mina PowerShell script och allt fungerar klockrent när jag exekverar det från VisualStudio Code.
Men, när jag exekverar PS1-filen från en PowerShell terminal så fallerar den med följande fel;
You cannot call a method on a null-valued expression.
At C:\Users\_LOGGING.ps1:326 char:49
+ [action]{$global:var_box_log.AddText("$($Text)`n")},
+ ~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Problemet är denna delen i scriptet som uppdaterar en textbox i "realtid" under tiden scriptet körs;
<code>
### Update LogFields
function Write-FormHost {
param( [string]$Text )
$window.Dispatcher.Invoke(
[action]{$global:var_box_log.AddText("$($Text)`n")},
"Render"
)
}
</code>
De delarna av scriptet som berörs;
<code>
#### Create Window
$inputXML = Get-Content $xamlFile -Raw
$inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -replace '^<Win.*', '<Window'
[XML]$XAML = $inputXML
#Read XAML
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
try {
$window = [Windows.Markup.XamlReader]::Load( $reader )
} catch {
Write-Warning $_.Exception
throw
}
# Create variables based on form control names.
# Variable will be named as 'var_<control name>'
$xaml.SelectNodes("//*[@Name]") | ForEach-Object {
#"trying item $($_.Name)"
try {
Set-Variable -Name "var_$($_.Name)" -Value $window.FindName($_.Name) -ErrorAction Stop
} catch {
throw
}
}
### Update LogFields
function Write-FormHost {
param( [string]$Text )
$window.Dispatcher.Invoke(
[action]{$global:var_box_log.AddText("$($Text)`n")},
"Render"
)
}
Write-FormHost 'Starting up'
</code>
Sista raden skriver till textboxen, och som sagt, det fungerar från VS Code, men inte från en prompt....
Det är precis som om texten inte skickas med till funktionen i det läget...