crashzero
Goto Top

Variablen sind leer in Powershell FORM

Moinsen,

ich habe ein kleines Powershell das als FORMS ausgegeben wird indem ein User via Buttonklick eine Datei auswählt, mit einem anderen Buttonklick ein Verzeicnis auswählt, wohin die ausgewählte Datei mit einem Klick auf einen 3. Button diese Datei verschieben soll.

Dateiauswahl :
Soll ein bestimmtes Quellverzeichnis standartmäßig aufrufen/anzeigen und NUR PDF-Dateien anzeigen (Klappt soweit)

Zielverzeichnisauswahl :
Soll ein bestimmtes Root-Verzeichnis anzeigen in welchem nur das Hauptverzeichnis angewählt wird (Dem Zielverzeichnisparameter wird dann ein Unterverzeichnis angehängt) (Klappt soweit)

3.Button (Verschieben) :
Soll die ausgewählte Datei in das ausgewählte Zielverzeichnis (+angehängtem Unterverzeichnis (Ist immer gleich)) verschieben

Da habe ich das Problem wenn ich in Button 3 (Verschieben) das Move-Item aufbaue da zu dem Zeitpunkt die Variable (Ausgewählte Datei) sowie die Variable (Ausgewähltes Verzeichnis) leer sind, somit greift das Move-Item nicht.

Fehlermeldung :
Move-Item : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
In I:\xx\xxx\xxxx\FileDialog.ps1:77 Zeichen:17

back-to-topmove-item -Path $file -Destination $verzeichnis

back-to-top~~~~~

+ CategoryInfo : InvalidData: (face-smile [Move-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCommand

Code :
$PSDefaultParameterValues['*:Encoding'] = 'ascii'  
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

#create form
$form             = New-Object System.Windows.Forms.Form
$form.Width       = 500
$form.Height      = 300
$form.MaximizeBox = $false

# QuellButton 
$Button          = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(10,10)
$Button.Size     = New-Object System.Drawing.Size(150,50)
$Button.Text     = "PDF-Datei auswählen : "  
$Button.Add_Click({
Function Get-FileName($initialDirectory) {  
[System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”) | Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
$OpenFileDialog.filter = “PDF (*.pdf)| *.pdf”
$OpenFileDialog.ShowDialog() | Out-Null
$OpenFileDialog.filename
} 

########### $file = Quelldateiname #####################
$file = Get-FileName -initialDirectory “c:\pdfordner”

})
$form.Controls.Add($Button)


# ZielButton Zielordnerauswahl
$Button2          = New-Object System.Windows.Forms.Button
$Button2.Location = New-Object System.Drawing.Size(200,10)
$Button2.Size     = New-Object System.Drawing.Size(150,50)
$Button2.Text     = "Zielverzeichnis auswählen : "  
$Button2.Add_Click({


Function Get-Folder($initialDirectory="I:\Zielverzeichnis")  
{
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null  

    $foldername = New-Object System.Windows.Forms.FolderBrowserDialog
    $foldername.Description = "Verzeichnis auswählen"  
    $foldername.rootfolder = "MyComputer"  
    $foldername.SelectedPath = $initialDirectory

    if($foldername.ShowDialog() -eq "OK")  

    {
        $folder += $foldername.SelectedPath
    }
    return $folder
}

########## $a = Zielverzeichnis / $verzeichnis = Zielverzeichnis + Unterordner UNTERORDNER ##################
$a = Get-Folder
$verzeichnis=$a+"\UNTERORDNER"  

})


$form.Controls.Add($Button2)


# Start
$Button3          = New-Object System.Windows.Forms.Button
$Button3.Location = New-Object System.Drawing.Size(10,150)
$Button3.Size     = New-Object System.Drawing.Size(150,50)
$Button3.Text     = "<< PDF verschieben >>"  
$Button3.Add_Click({

write-host $file
write-host $verzeichnis
move-item -Path $file -Destination $verzeichnis

})

$form.Controls.Add($Button3)


[void]$form.ShowDialog()

Content-ID: 3686500886

Url: https://administrator.de/contentid/3686500886

Ausgedruckt am: 17.11.2024 um 03:11 Uhr

chkdsk
Lösung chkdsk 18.08.2022 um 10:13:42 Uhr
Goto Top
ändere mal Zeile 27 & 60 ab
$Global:file = Get-FileName -initialDirectory “c:\pdfordner”

$global:verzeichnis=$a+"\UNTERORDNER"  
Crashzero
Crashzero 18.08.2022 um 10:25:10 Uhr
Goto Top
Da bekomme ich folgende Fehlermeldung :
& : Die Benennung "Global:file" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie   
den Vorgang.
In I:\xx\xxx\xxxx\FileDialog.ps1:28 Zeichen:2
+ &Global:file = Get-FileName -initialDirectory “c:\pdfordner”
+  ~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Global:file:String) , CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
chkdsk
chkdsk 18.08.2022 um 10:26:51 Uhr
Goto Top
Zitat von @Crashzero:

Da bekomme ich folgende Fehlermeldung :
& : Die Benennung "Global:file" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie   
den Vorgang.
In I:\xx\xxx\xxxx\FileDialog.ps1:28 Zeichen:2
+ &Global:file = Get-FileName -initialDirectory “c:\pdfordner”
+  ~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Global:file:String) , CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

habe mich verschrieben. hab's aktualisiert
Crashzero
Crashzero 18.08.2022 um 11:13:13 Uhr
Goto Top
Sauber, danke - Funktioniert.
3479126418
3479126418 18.08.2022 aktualisiert um 11:15:39 Uhr
Goto Top
Und hier auch noch was zum Lernen warum das so ist
https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell. ...