所以我仍然是Powershell的新手,我正在尝试编写一个脚本,允许用户选择一个文件或文件夹,然后取回所述文件夹/文件的安全权限。问题是,我似乎无法将文件路径记录为稍后要使用的变量。这是我到目前为止所做的:
Function Get-Folder($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
$foldername = New-Object System.Windows.Forms.FolderBrowserDialog
$foldername.rootfolder = "MyComputer"
$foldername.ShowDialog()
if($foldername.ShowDialog() -eq "OK") {
$folder += $foldername.SelectedPath
}
}
也许我已经离开这个了,但它会拉起窗口选择一个文件或文件夹并让我选择两次,然后不将变量设置为文件路径。再说一次,我对这种事情很陌生,所以我可能完全错了,但任何帮助都会非常有帮助。
谢谢!
答案 0 :(得分:13)
文件夹选择器窗口显示两次,因为您有两次调用$foldername.ShowDialog()
。删除第一个,只留下if
内的那个。
我尝试运行您的代码,并确保$folder
变量实际上已设置。如果你认为它没有设置你做错了什么。例如,请注意,它仅在Get-Folder
函数中可见。如果需要在函数外部使用它,则应将其返回(return $folder
)并将其分配给函数外部的变量。例如:
Function Get-Folder($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null
$foldername = New-Object System.Windows.Forms.FolderBrowserDialog
$foldername.Description = "Select a folder"
$foldername.rootfolder = "MyComputer"
if($foldername.ShowDialog() -eq "OK")
{
$folder += $foldername.SelectedPath
}
return $folder
}
$a = Get-Folder
这样,您将在$a
变量中包含所选文件夹。
答案 1 :(得分:3)
您需要在行尾添加“| Out-Null” “[System.Reflection.Assembly] :: LoadWithPartialName(” System.Windows.Forms的 “)”
否则有一堆你不想要的Get-Folder返回的信息
干杯,加思
答案 2 :(得分:2)
使用System.Windows.Forms.FolderBrowserDialog
仅允许您选择一个文件夹。
Function Get-Folder($initialDirectory) {
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
$FolderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog
$FolderBrowserDialog.RootFolder = 'MyComputer'
if ($initialDirectory) { $FolderBrowserDialog.SelectedPath = $initialDirectory }
[void] $FolderBrowserDialog.ShowDialog()
return $FolderBrowserDialog.SelectedPath
}
($FolderPermissions = Get-Folder C:\Users | get-acl | select -exp access | ft)
有关System.Windows.Forms.FolderBrowserDialog
类的更多信息,请检查official docs。
function Get-File($initialDirectory) {
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
if ($initialDirectory) { $OpenFileDialog.initialDirectory = $initialDirectory }
$OpenFileDialog.filter = 'All files (*.*)|*.*'
[void] $OpenFileDialog.ShowDialog()
return $OpenFileDialog.FileName
}
($FilePermissions = Get-File C:\ | get-acl | select -exp access | ft)
有关System.Windows.Forms.OpenFileDialog
类的更多信息,请检查official docs。
答案 3 :(得分:0)
只需在“ ShowDialog()”行之前的函数中添加以下行:
${set_content(get_or_create('File', 'name', 'img.png', 'contentType', 'image/png'), GET('https://some.host.domain/img.png', 'application/octet-stream'))}
答案 4 :(得分:0)
这是打开对话框窗口的解决方案,要求用户选择文件夹。然后将文件夹路径存储在名为“ path”的变量中:
Add-Type -AssemblyName System.Windows.Forms
$browser = New-Object System.Windows.Forms.FolderBrowserDialog
$null = $browser.ShowDialog()
$path = $browser.SelectedPathode