所以我仍然是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
}
}
Run Code Online (Sandbox Code Playgroud)
也许我已经离开这个了,但它会拉起窗口选择一个文件或文件夹并让我选择两次,然后不将变量设置为文件路径.再说一遍,我对这种事情很陌生,所以我可能完全错了,但任何帮助都会非常有帮助.
谢谢!
Vas*_*eev 15
文件夹选择器窗口显示两次,因为您有两次调用$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
Run Code Online (Sandbox Code Playgroud)
这样,您将在$a变量中包含所选文件夹.
小智 14
这是一个打开对话框窗口的解决方案,要求用户选择一个文件夹。然后将文件夹路径存储在名为“path”的变量中:
Add-Type -AssemblyName System.Windows.Forms
$browser = New-Object System.Windows.Forms.FolderBrowserDialog
$null = $browser.ShowDialog()
$path = $browser.SelectedPath
Run Code Online (Sandbox Code Playgroud)
使用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)
Run Code Online (Sandbox Code Playgroud)
有关System.Windows.Forms.FolderBrowserDialog课程的更多信息,请查看官方文档。
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)
Run Code Online (Sandbox Code Playgroud)
有关System.Windows.Forms.OpenFileDialog课程的更多信息,请查看官方文档。
小智 5
您需要在“[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")”行的末尾添加“| Out-Null”
否则有一堆你不想要的 Get-Folder 返回的信息
干杯,加思