2016-08-05 25 views
0

ich die Post gesehen haben: „Wie die Folder in Powershell richtig nutzen“Folder in Powershell verwenden - gibt falsche Daten

Ich bin ein Problem mit der Funktion nur den Pfad immer ausgewählt zurückzukehren.

Am Ende des Skripts "write-host $ a", aber anstatt nur das Verzeichnis, das ich ausgewählt habe (C: \ Temp) bekomme ich System.Windows.Forms, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 C: \ Temp

Funktion Get-Ordner ($ Initial)

{ [System.Reflection.Assembly] :: LoadWithPartialName ("System.Windows.Forms")

$foldername = New-Object System.Windows.Forms.FolderBrowserDialog 
$foldername.rootfolder = "MyComputer" 

if($foldername.ShowDialog() -eq "OK") 
{ 
    $folder += $foldername.SelectedPath 
} 
return $folder 

}

$ a = Get-Ordner Write-Host $ a

Mir wurde gesagt, dies ist veraltet und Add-Type zu verwenden. Mit dem folgenden Skript wird nicht nur der Pfad angezeigt.

Add-Type -AssemblyName System.Windows.Forms 
    $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog 
    [void]$FolderBrowser.ShowDialog() 
    $FolderBrowser.SelectedPath 
    Write-Host "FolderBrowser= "$FolderBrowser 
+0

Sie haben wahrscheinlich $ Ordner außerhalb des Bereichs der Funktion definiert, und die Funktion ändert das. Schließen Sie die PowerShell und starten Sie sie erneut. Ändern Sie auch Ihren '$ Ordner + =' in nur '$ Ordner ='. – TheMadTechnician

+0

danke! es funktioniert mit der Hilfe von Ihnen und Jon – Shannon

Antwort

2

Sie erhalten dieses Ergebnis, weil diese Linie auch Ausgabe erzeugt:

[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

Powershell gibt alle Ausgaben aus einer Funktion, so dass Ihre Ergebnisse sind tatsächlich ein Array die Ausgabe von der Belastung der Baugruppe enthält und der Name des Ordners

Hinzufügen [Lücke] vor der Montage Ladevorgang wie dies, dass zusätzliche Ausgabe auslassen und geben Ihnen die Ergebnisse, die Sie erwarten:

[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

Oder wie Anthony Stringer in den Kommentaren erwähnt, können Sie Add-Typ statt, die keine Ausgabe erzeugen und würde wahrscheinlich die bevorzugte Methode sein:

Add-Type -AssemblyName System.Windows.Forms 

auch TheMadTechnician richtig ist, dass Sie nicht brauchen, um die + =, nur die = für die $ Ordner Variable.

Diese answer erläutert das Verhalten der Ausgabe von einer PowerShell-Funktion im Detail zurückgeben.

+1

aus diesem Grund (veraltet): https://msdn.microsoft.com/en-us/library/12xc5368%28v=vs.110%29.aspx?f=255&MSPPError=- 2147217396 Ich empfehle das: 'Add-Type -AssemblyName System.Windows.Forms' –

+0

das hat funktioniert! Vielen Dank! – Shannon

+0

OK, veraltet ist nicht was ich will. versucht Add-Type und bekomme nicht das Ergebnis, das ich brauche. Add-Type -AssemblyName System.Windows.Forms $ = Folderbrowser New-Object System.Windows.Forms.FolderBrowserDialog [Lücke] $ FolderBrowser.ShowDialog() $ FolderBrowser.SelectedPath Write-Host "Folderbrowser =" $ Folderbrowser – Shannon