Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Hilfe bei Variablen-Scope benötigt

$
0
0

Hallo zusammen,

ich (Powershell Anfänger) bräuchte Hilfe….

Also ich habe eine FileSystemWatcher Funktion mit der ich mehrere Dateien überwache.

functionNew-FSWatcher {

 

     #region Parameters

     [CmdletBinding()]

     param (

          [Scriptblock]$EventAction,

          [String]$Event="Changed",

          [String]$FileFilter="*.*",

          [System.IO.FileInfo]$FilePathToWatch,

          [System.IO.NotifyFilters]$NotifyFilter="LastWrite",

          [Switch]$Recurse

     )

     #endregion Parameters

    

     try {

         $FileSystemWatcher=New-ObjectSystem.IO.FileSystemWatcher

         $FileSystemWatcher.Path=$FilePathToWatch

         $FileSystemWatcher.Filter=$FileFilter

         $FileSystemWatcher.NotifyFilter=$NotifyFilter

         $FileSystemWatcher.IncludeSubdirectories=$Recurse

         $FileSystemWatcher.EnableRaisingEvents=$true

         $PSO=New-ObjectPSObject-property @{Action=$EventAction}

         $FSW=Register-ObjectEvent-InputObject$FileSystemWatcher-Event$Event-MessageData$PSO-Action ({

                &$Event.MessageData.Action

          }) |Out-Null

     }

     catch {Write-Host"Fehler"}   

}

Mein “Problem“ am FileSystemWatcher ist, dass dieser in einem eigenen Scope läuft und ich Globale Variablen vermeiden möchte. Ich habe mir beholfen, indem ich die Aktion in ein Objekt lade.

$PSO=New-ObjectPSObject-property @{Action=$EventAction}

Hier ein kleines Beispiel:

$AllFilePath= @("C:\File1.txt","C:\ File2.txt ")

 

$Script:Wert1= 1

$Script:Wert2= 2

 

$Action= {

     Write-Host$Script:Wert1

     Write-Host$Script:Wert2

     $Script:Wert3=$Script:Wert1+$Script:Wert2

     Write-verbose$Script:Wert3

}

 

foreach ($FilePathin$AllFilePath) {

     New-FSWatcher-FilePath (Split-Path$FilePath)-FileFilter (Split-Path$FilePath-Leaf)-EventAction$Action

}

Soweit funktioniert das auch alles, wenn ich das Skript im Editor ausführe. Versuche ich aber das Skript im Arbeitsplatz per "Rechtsklick - Mit Powershell ausführen" zu starten, sind die Variablen nicht gefüllt. Besteht hier irgendein Unterschied wie das Skript ausgeführt wird? Und hat vielleicht einer eine Idee wie ich mir behelfen könnte? 

Schon mal vielen Dank


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>