É simples, pois treeView.Nodes.Add
method retorna o < em> TreeNode que foi adicionado à coleção, ou seja, um objeto de [System.Windows.Forms.TreeNode]
type. Portanto, você pode aplicar o método Add
para criar novos nós de árvore
correspondendo a itens aninhados no sistema de arquivos da seguinte forma:
Set-StrictMode -Version latest
Function AddNodes ( $Node, $FSObject ) {
$NodeSub = $Node.Nodes.Add($FSObject.FullName, $FSObject.Name)
if ( $FSObject -is [System.IO.DirectoryInfo] ) {
$FSObjSub = $FSObject |
Get-ChildItem <#-Directory<##> -ErrorAction SilentlyContinue
foreach ( $FSObj in $FSObjSub ) {
AddNodes $NodeSub $FSObj
}
}
}
$objDriveLetters = GET-WMIOBJECT –query "SELECT * from win32_logicaldisk where Drivetype=4"
$form = New-Object System.Windows.Forms.Form
$treeView = New-Object System.Windows.Forms.TreeView
$treeView.Dock = 'Fill'
$treeView.CheckBoxes = $true
foreach ($iDrive in $objDriveLetters)
{
# ensure that a drive is accessible (e.g. a medium is inserted into DVD drive)
if ( Test-Path $iDrive.DeviceID ) {
# get a drive root e.g. C:\ as C: refers to current directory
$DriveRootPath = Join-Path -ChildPath \ -Path $iDrive.DeviceID
$DriveRoot = Get-Item -Path $DriveRootPath
AddNodes $treeView $DriveRoot
}
}
[void]$form.Controls.Add($treeView)
[void]$form.ShowDialog()
Resultado :
Explicação (observe as linhas de comentário dentro do código também): observe principalmente que:
- o exemplo acima é limitado a unidades de rede que usam a cláusula
where Drivetype=4
apenas para fins de depuração my e -
A sub-rotina
AddNodes
chama-se recursivamente para subpastas, se houver.