如何从PowerShell GUI获取文件名

如何从PowerShell GUI获取文件名,powershell,user-interface,Powershell,User Interface,我正在制作一个通过RegEdit改变各种图标的程序,我想一个很好的GUI,人们可以在其中选择他们想要改变文件的.ico文件,这将是一个很好的选择。唯一的问题是,我对PowerShell一无所知,但操作RegEdit要比使用Python容易得多。我对PowerShell GUI的了解更少 Add-Type -AssemblyName System.Windows.Forms $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog

我正在制作一个通过RegEdit改变各种图标的程序,我想一个很好的GUI,人们可以在其中选择他们想要改变文件的.ico文件,这将是一个很好的选择。唯一的问题是,我对PowerShell一无所知,但操作RegEdit要比使用Python容易得多。我对PowerShell GUI的了解更少

Add-Type -AssemblyName System.Windows.Forms
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    InitialDirectory = [Environment]::GetFolderPath('Desktop') 
    Filter = 'Icons (*.ico)|*.ico'
}
$result = $FileBrowser.ShowDialog()
<#What do here?#>
添加类型-AssemblyName System.Windows.Forms
$FileBrowser=新对象System.Windows.Forms.OpenFileDialog-Property@{
InitialDirectory=[Environment]::GetFolderPath('Desktop')
过滤器='图标(*.ico)|*.ico'
}
$result=$FileBrowser.ShowDialog()

最后一行,即注释所在的位置,如何获取包含我刚才搜索的文件名的字符串或任何数据类型?对于任何好奇的人来说,
$FileBrowser
只是提供了一个默认的Windows文件搜索窗口,我刚刚对其设置了
.ico
限制。我叫什么方法?我读了一些关于
DialogResult
的文章,但我不明白该方法或小程序是如何与
showlealog
联系在一起的,也不明白它是如何用来获取文件名的(如果这是正确的解决方案)

$Result | Get Member

这将为您指明道路。

  • $FileBrowser.ShowDialog()
    返回一个枚举值,告诉您用户是确认(
    OK
    )还是取消(
    Cancel
    )对话框

    • 请参见、和枚举
  • 如果用户确认,
    $FileBrowser.FileName
    包含所选文件的完整路径

注意:您可以在PowerShell中使用字符串代替枚举值,PowerShell会自动转换枚举值;您也可以显式地使用枚举值,但这更详细;e、 例如,
'OK'
[System.Windows.Forms.DialogResult]:OK


至于发现涉及的类型及其成员s:

  • 可以对变量使用cmdlet来发现其值的.NET类型和该类型的成员

  • 要获取有关给定.NET类型的更多信息,您可以简单地用谷歌搜索它,或按如下方式以编程方式构造和打开URL:


包含一个名为
Show TypeHelp
的便利函数,它包装了上述内容。

很高兴听到这个消息,@KirbyForsberg;我的荣幸。如果你来自其他shell,肯定会有学习的努力,但随着时间的推移,这种努力是值得的。请不要忘记回答(单击大复选标记)。
Add-Type -AssemblyName System.Windows.Forms

$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{ 
    InitialDirectory = [Environment]::GetFolderPath('Desktop') 
    Filter = 'Icons (*.ico)|*.ico'
}

if ('OK' -eq $FileBrowser.ShowDialog()) {
  "User chose: $($FileBrowser.FileName)"
}
else {
  'User canceled the dialog.'
}
$result = $FileBrowser.ShowDialog()

# Get the full name of the type of the value stored in $result
$fullTypeName = $result.GetType().FullName

# Assuming the type is one that comes with .NET,
# look up its documentation online (using the default browser).
Start-Process "https://docs.microsoft.com/en-us/dotnet/api/$fullTypeName"