TLDR: использовать древовидную структуру для поиска в сетевых папках и показывать результаты в пути к деревьям.
У меня есть инструмент, который устарел и нуждается в обновлении, но источник был потерян поэтому я его перестраивал. Это единственное, что я борюсь с воссозданием.
В Powershell ISE, имеющем древовидное представление, можно выполнять поиск, который обновляется с $ textbox.add_textchange по мере ввода, чтобы найти соответствующий текст.
Вот пример:
function Product-Function{
$Product.add_textchanged{
#idk what im doing
}
}
$Product = New-Object system.Windows.Forms.TextBox
$Product.multiline = $false
$Product.CharacterCasing = "Upper"
$Product.width = 235
$Product.height = 20
$Product.location = New-Object System.Drawing.Point(20,20)
$Product.Font = $MainFont
$Product.Text = ""
Product-Function
$TreeView = New-Object System.Windows.Forms.TreeView
$TreeView.Location = New-Object System.Drawing.Point(20, 55)
$TreeView.Size = New-Object System.Drawing.Size(540, 320)
$WinNode = New-Object System.Windows.Forms.TreeNode
$WinNode.text = "Windows"
$WinNode.name = "Windows"
[void]$TreeView.Nodes.Add($WinNode).FullPath
$WinCommonNode = New-Object System.Windows.Forms.TreeNode
$WinCommonNode.text = "Common"
$WinCommonNode.name = "Common"
[void]$WinNode.Nodes.Add($WinCommonNode)
$WinCommonNCNode = New-Object System.Windows.Forms.TreeNode
$WinCommonNCNode.text = "Non_Certified"
$WinCommonNCNode.name = "Non_Certified"
[void]$WinCommonNode.Nodes.Add($WinCommonNCNode)
$WinLicensedNode = New-Object System.Windows.Forms.TreeNode
$WinLicensedNode.text = "Licensed"
$WinLicensedNode.name = "Licensed"
[void]$WinNode.Nodes.Add($WinLicensedNode)
$WinLicensedNCNode = New-Object System.Windows.Forms.TreeNode
$WinLicensedNCNode.text = "Non_Certified"
$WinLicensedNCNode.name = "Non_Certified"
[void]$WinLicensedNode.Nodes.Add($WinLicensedNCNode)
$WinRestrictedNode = New-Object System.Windows.Forms.TreeNode
$WinRestrictedNode.text = "Restricted"
$WinRestrictedNode.name = "Restricted"
[void]$WinNode.Nodes.Add($WinRestrictedNode)
$WinRestrictedNCNode = New-Object System.Windows.Forms.TreeNode
$WinRestrictedNCNode.text = "Non_Certified"
$WinRestrictedNCNode.name = "Non_Certified"
[void]$WinRestrictedNode.Nodes.Add($WinRestrictedNCNode)
#macs
$MacNode = New-Object System.Windows.Forms.TreeNode
$MacNode.text = "Macaroni"
$MacNode.name = "Macaroni"
$Macaroni = "\\NetworkLocation\Macintosh"
[void]$TreeView.Nodes.Add($MacNode).FullPath
#=======================================================================================================================
#File Paths#
#=======================================================================================================================
$WinCommon = "\\NetworkLocation\DesktopServices\Common"
$WinLicensed = "\\NetworkLocation\DesktopServices\Licensed"
$WinRestricted = "\\NetworkLocation\DesktopServices\Restricted"
$WinCommonNC = "\\NetworkLocation\DesktopServices\Common\_Non-Certified"
$WinLicensedNC = "\\NetworkLocation\DesktopServices\Licensed\_Non-Certified"
$WinRestrictedNC = "\\NetworkLocation\DesktopServices\Restricted\_Non-Certified"
#=======================================================================================================================
$array = @(Get-ChildItem -Path $WinCommon)
foreach ( $obj in $array ) {
$WCNode = New-Object System.Windows.Forms.TreeNode
$WCNode.text = $obj
[void]$WinCommonNode.Nodes.Add($WCNode).FullPath
}
$array = @(Get-ChildItem -Path $WinLicensed)
foreach ( $obj in $array ) {
$WLNode = New-Object System.Windows.Forms.TreeNode
$WLNode.text = $obj
[void]$WinLicensedNode.Nodes.Add($WLNode).FullPath
}
$array = @(Get-ChildItem -Path $WinRestricted)
foreach ( $obj in $array ) {
$WRNode = New-Object System.Windows.Forms.TreeNode
$WRNode.text = $obj
[void]$WinRestrictedNode.Nodes.Add($WRNode).FullPath
}
$array = @(Get-ChildItem -Path $WinCommonNC)
foreach ( $obj in $array ) {
$WCNCNode = New-Object System.Windows.Forms.TreeNode
$WCNCNode.text = $obj
[void]$WinCommonNCNode.Nodes.Add($WCNCNode).FullPath
}
$array = @(Get-ChildItem -Path $WinLicensedNC)
foreach ( $obj in $array ) {
$WLNCNode = New-Object System.Windows.Forms.TreeNode
$WLNCNode.text = $obj
[void]$WinLicensedNCNode.Nodes.Add($WLNCNode).FullPath
}
$array = @(Get-ChildItem -Path $WinRestrictedNC)
foreach ( $obj in $array ) {
$WRNCNode = New-Object System.Windows.Forms.TreeNode
$WRNCNode.text = $obj
[void]$WinRestrictedNCNode.Nodes.Add($WRNCNode).FullPath
}
#mac stuff
$array = @(Get-ChildItem -Path $Macaroni)
foreach ( $obj in $array ) {
$SubMac = New-Object System.Windows.Forms.TreeNode
$SubMac.text = $obj
[void]$MacNode.Nodes.Add($SubMac).FullPath
}
#=======================================================================================================================
Итак, мой вопрос: как я могу сделать фильтр текстового поля все элементы в узлах, для имен совпадений и показывают, где они находятся внутри узлов
Причина, по которой у нас есть этот инструмент, состоит в том, что у нас есть сотни установок программного обеспечения в этих папках, и этот инструмент делает его легко найти точное местоположение. Это было сделано в прошлом, и мне просто нужно переделать его, но я не могу понять, как отфильтровать данные, извлеченные из узлов.
================== Все выше отвечено.
Дополнительный вопрос. Есть ли способ скрыть лишние несоответствующие элементы и сжать узлы, у которых нет совпадений. Наш старый инструмент делает, и это облегчает чтение местоположения.
старый инструмент слева, мой новый инструмент справа.