#powershell #checkbox
#powershell #флажок
Вопрос:
Действие ДОБАВИТЬ ЩЕЛЧОК по моей кнопке $Tab1BTNCreation: я хочу скопировать папку, содержащую некоторые вложенные папки (упомянутые отмеченными флажками), в определенное место назначения. Выбранные флажки точно указывают, какую папку копировать. Я перепробовал много вариантов, но на данный момент ничего не работает. Соответствующими переменными являются $Checkboxes и $CheckboxesNames в TAB1. Я присвоил имена своим переменным флажков, чтобы параметр ‘-unclude’ мог распознавать имя папки… Прокрутите вниз до ‘///// ЗДЕСЬ //// Создание бутона /////////’ Спасибо вам за вашу помощь.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Add-type -Assembly System.Windows.Forms
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$xaml = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Programme de tests QA" Height="515" Width="828" ResizeMode="NoResize">
<Grid>
<TabControl HorizontalAlignment="Left" Height="500" VerticalAlignment="Top" Width="825">
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Border Name="Border" BorderThickness="0,0,0,0" CornerRadius="5,5,0,0" Margin="2,0">
<ContentPresenter x:Name="Tab1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
Margin="10,2"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="#292929" />
</Trigger>
<Trigger Property="IsSelected" Value="False">
<Setter TargetName="Border" Property="Background" Value="#FF23BBB8" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem x:Name="tab1" Header="CR`ÉATION" Height="40" Width="273" Background="#292929" FontFamily="Segoe UI Semibold" Foreground="white" IsSelected="True">
<Grid Background="#292929" Width="840" Height="455" Margin="-7,1,-14,-4">
<Label x:Name="titre1" Content="cr`éation d'une nouvelle serie" FontFamily="Segoe UI" FontSize="20" Foreground="#797979" HorizontalAlignment="Left" Height="47" Margin="49,47,0,0" VerticalAlignment="Top" Width="723"/>
<Line X1="55" X2="440" Y1="99" Y2="99" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="55" X2="440" Y1="200" Y2="200" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="480" X2="770" Y1="99" Y2="99" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="480" X2="770" Y1="200" Y2="200" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="60,121,0,0" TextWrapping="Wrap" Text="de" VerticalAlignment="Top" Width="36" Foreground="#797979"/>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="60,161,0,0" TextWrapping="Wrap" Text="vers" VerticalAlignment="Top" Width="36" Foreground="#797979"/>
<ComboBox x:Name="CBBdeRep1" HorizontalAlignment="Left" Height="20" Margin="107,120,0,0" VerticalAlignment="Top" Width="103" BorderBrush="#FF23BBB8" BorderThickness="0" FontSize="10" Foreground="#797979"/>
<ComboBox x:Name="CBBdeSerie1" HorizontalAlignment="Left" Height="20" Margin="227,120,0,0" VerticalAlignment="Top" Width="211" BorderBrush="#FF23BBB8" BorderThickness="0" FontSize="10" Foreground="#797979"/>
<ComboBox x:Name="CBBversRep1" HorizontalAlignment="Left" Height="20" Margin="107,159,0,0" VerticalAlignment="Top" Width="103" BorderBrush="#FF23BBB8" BorderThickness="0" FontSize="10" Foreground="#797979"/>
<TextBox x:Name="TBversSerie1" HorizontalAlignment="Left" Height="20" Margin="227,159,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="211" Padding="2" MaxLength="33" FontSize="10" Foreground="#797979" />
<Grid x:Name="CheckBoxGroup1">
<CheckBox x:Name="CBbin1" Content=" bin" HorizontalAlignment="Left" Height="19" Margin="480,118,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBexport1" Content=" export" HorizontalAlignment="Left" Height="19" Margin="480,142,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBparam1" Content=" param" HorizontalAlignment="Left" Height="19" Margin="480,166,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBlist1" Content=" list" HorizontalAlignment="Left" Height="19" Margin="600,118,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBscript1" Content=" script" HorizontalAlignment="Left" Height="19" Margin="600,142,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBtemplate1" Content=" template" HorizontalAlignment="Left" Height="19" Margin="600,166,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
</Grid>
<Button x:Name="BTNcreation" Content="cr`éer la s`érie et synchroniser" FontSize="15" HorizontalAlignment="Left" Height="48" Margin="480,335,0,0" VerticalAlignment="Top" Foreground="white" Background="#FF23BBB8" Width="290"/>
<TextBox x:Name="TBmessages1" HorizontalAlignment="Left" Height="145" Margin="55,238,0,0" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" Text="Affichage des messages d'erreurs." Foreground="#797979" Padding="6" FontSize="10" VerticalAlignment="Top" Width="383"/>
</Grid>
</TabItem>
<TabItem x:Name="tab2" Header="SYNCHRONISATION" Background="#FF00565F" Height="40" Width="273" BorderBrush="#FF00565F" FontSize="12" Foreground="White" FontFamily="Segoe UI Semibold">
<Grid Background="#292929" Width="840" Height="455" Margin="-7,1,-14,-4">
<Label Content="synchronisation d'une s`érie" FontFamily="Segoe UI" FontSize="20" Foreground="#797979" HorizontalAlignment="Left" Height="47" Margin="49,47,0,0" VerticalAlignment="Top" Width="723"/>
<Line X1="55" X2="440" Y1="200" Y2="200" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="55" X2="440" Y1="99" Y2="99" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="480" X2="770" Y1="99" Y2="99" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="480" X2="770" Y1="200" Y2="200" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="60,121,0,0" TextWrapping="Wrap" Text="de" VerticalAlignment="Top" Width="36" Foreground="#797979"/>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="60,161,0,0" TextWrapping="Wrap" Text="vers" VerticalAlignment="Top" Width="36" Foreground="#797979"/>
<ComboBox x:Name="CBBdeRep2" HorizontalAlignment="Left" Height="20" Margin="107,120,0,0" VerticalAlignment="Top" Width="103" FontSize="10" Foreground="#797979" />
<ComboBox x:Name="CBBdeSerie2" HorizontalAlignment="Left" Height="20" Margin="227,120,0,0" VerticalAlignment="Top" Width="211" FontSize="10" Foreground="#797979"/>
<ComboBox x:Name="CBBversRep2" HorizontalAlignment="Left" Height="20" Margin="107,159,0,0" VerticalAlignment="Top" Width="103" FontSize="10" Foreground="#797979" />
<ComboBox x:Name="CBBversSerie2" HorizontalAlignment="Left" Height="20" Margin="227,159,0,0" VerticalAlignment="Top" Width="211" FontSize="10" Foreground="#797979" />
<CheckBox x:Name="CBbin2" Content=" bin" HorizontalAlignment="Left" Height="19" Margin="480,118,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBexport2" Content=" export" HorizontalAlignment="Left" Height="19" Margin="480,142,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBparam2" Content=" param" HorizontalAlignment="Left" Height="19" Margin="480,166,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBlist2" Content=" list" HorizontalAlignment="Left" Height="19" Margin="600,118,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBscript2" Content=" script" HorizontalAlignment="Left" Height="19" Margin="600,142,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<CheckBox x:Name="CBtemplate2" Content=" template" HorizontalAlignment="Left" Height="19" Margin="600,166,0,0" VerticalAlignment="Top" Width="92" Foreground="#797979"/>
<TextBox x:Name="TBmessages2" HorizontalAlignment="Left" Height="145" Margin="55,238,0,0" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" Text="Affichage des messages d'erreurs." Foreground="#797979" Padding="6" FontSize="10" VerticalAlignment="Top" Width="383"/>
<Button x:Name="BTNsynchro" Content="synchroniser la s`érie" FontSize="15" HorizontalAlignment="Left" Height="48" Margin="480,335,0,0" VerticalAlignment="Top" Foreground="white" Background="#FF23BBB8" Width="290"/>
</Grid>
</TabItem>
<TabItem x:Name="tab3" Header="EX`ÉCUTION" Background="#FF00565F" Height="40" Width="273" BorderBrush="#FF00565F" FontSize="12" Foreground="white" FontFamily="Segoe UI Semibold">
<Grid Background="#292929" Width="840" Height="455" Margin="-7,1,-14,-4" >
<Label x:Name="titre3" Content="ex`écution des tests QA" FontFamily="Segoe UI" FontSize="20" Foreground="#797979" HorizontalAlignment="Left" Height="47" Margin="49,47,0,0" VerticalAlignment="Top" Width="723"/>
<Line X1="55" X2="335" Y1="99" Y2="99" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="55" X2="335" Y1="160" Y2="160" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="480" X2="770" Y1="99" Y2="99" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="480" X2="770" Y1="250" Y2="250" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<Line X1="480" X2="770" Y1="200" Y2="200" Stroke="#5f5f5f" StrokeThickness="1"></Line>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="54,121,0,0" TextWrapping="Wrap" Text="version" VerticalAlignment="Top" Width="55" Foreground="#797979"/>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="482,121,0,0" TextWrapping="Wrap" Text="`équipe" VerticalAlignment="Top" Width="55" Foreground="#797979"/>
<TextBlock HorizontalAlignment="Left" Height="21" Margin="482,161,0,0" TextWrapping="Wrap" Text="liste" VerticalAlignment="Top" Width="36" Foreground="#797979"/>
<ComboBox x:Name="CBBversion3" HorizontalAlignment="Left" Height="20" Margin="113,120,0,0" VerticalAlignment="Top" Width="70" FontSize="10" Foreground="#797979" />
<TextBox x:Name="TBbuild3" HorizontalAlignment="Left" Height="20" Margin="201,120,0,0" TextWrapping="Wrap" Text="Build" VerticalAlignment="Top" Width="77" Padding="2" MaxLength="4" FontSize="10" Foreground="#797979" />
<TextBox x:Name="TBrevision3" HorizontalAlignment="Left" Height="20" Margin="297,120,0,0" TextWrapping="Wrap" Text="R`év." VerticalAlignment="Top" Width="36" Padding="2" MaxLength="3" FontSize="10" Foreground="#797979" />
<ComboBox x:Name="CBBequipe3" HorizontalAlignment="Left" Height="20" Margin="542,120,0,0" VerticalAlignment="Top" Width="150" BorderBrush="#FF23BBB8" BorderThickness="0" FontSize="10" Foreground="#797979"/>
<ComboBox x:Name="CBBliste3" HorizontalAlignment="Left" Height="20" Margin="542,159,0,0" VerticalAlignment="Top" Width="150" BorderBrush="#FF23BBB8" BorderThickness="0" FontSize="10" Foreground="#797979"/>
<CheckBox x:Name="CBrtf3" Content=" produire les fichiers en format .rtf" HorizontalAlignment="Left" Height="19" Margin="480,217,0,0" VerticalAlignment="Top" Width="230" Foreground="#797979"/>
<TextBox x:Name="TBmessages3" HorizontalAlignment="Left" Height="190" Margin="55,193,0,0" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" Text="Affichage des messages d'erreurs." Foreground="#797979" Padding="6" FontSize="10" VerticalAlignment="Top" Width="383"/>
<Button x:Name="BTNexecution" Content="lancer les tests" FontSize="15" HorizontalAlignment="Left" Height="48" Margin="480,335,0,0" VerticalAlignment="Top" Foreground="white" Background="#FF23BBB8" Width="290"/>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>
"@
#Read XAML (Parse it)
$reader=(New-Object System.Xml.XmlNodeReader $XAML)
$Window=[Windows.Markup.XamlReader]::Load( $reader )
#region ----- xaml objects to variables -----
#Connect to Controls TAB2
$Tab1CBB1 = $Window.FindName('CBBdeRep1')
$Tab1CBB2 = $Window.FindName('CBBdeSerie1')
$Tab1CBB3 = $Window.FindName('CBBversRep1')
$Tab1TB4 = $Window.FindName('TBversSerie1')
($Tab1CBbin = $Window.FindName('CBbin1')).Name = 'Bin'
($Tab1CBexport = $Window.FindName('CBexport1')).Name = 'Export'
($Tab1CBparam = $Window.FindName('CBparam1')).Name = 'Param'
($Tab1CBlist = $Window.FindName('CBlist1')).Name = 'List'
($Tab1CBscript = $Window.FindName('CBscript1')).Name = 'QAScript'
($Tab1CBtemplate = $Window.FindName('CBtemplate1')).Name = 'Template'
$Tab1TBmessages = $Window.findName("TBmessages1")
$Tab1BTNcreation = $Window.findName("BTNcreation")
#Connect to Controls TAB2
$Tab2CBB1 = $Window.FindName('CBBdeRep2')
$Tab2CBB2 = $Window.FindName('CBBdeSerie2')
$Tab2CBB3 = $Window.FindName('CBBversRep2')
$Tab2CBB4 = $Window.FindName('CBBversSerie2')
$Tab2CBbin = $Window.FindName('CBbin2')
$Tab2CBexport = $Window.FindName('CBbin2')
$Tab2CBparam = $Window.FindName('CBparam2')
$Tab2CBlist = $Window.FindName('CBlist2')
$Tab2CBscript = $Window.FindName('CBscript2')
$Tab2CBtemplate = $Window.FindName('CBtemplate2')
$Tab2TBmessages = $Window.findName("TBmessages2")
$Tab2BTNsynchro = $Window.findName("BTNsyncro")
#Connect to Controls TAB2
$Tab3CBBversion = $Window.findName("CBBVersion3")
$Tab3TBbuild = $Window.findName("TBbuild3")
$Tab3TBrev = $Window.findName("TBrevision3")
$Tab3CBBequipe = $Window.findName("CBBequipe3")
$Tab3CBBliste = $Window.findName("CBBliste3")
$Tab3CBrtf = $Window.findName("CBrtf3")
$Tab3TBmessages = $Window.findName("TBmessages3")
$Tab3BTNexecution = $Window.findName("BTNexecution")
#endregion
#region ---- Path variables -----
$pathDE='E:ScriptsBibliothequePowershellMelanieGUI-ProgTestQASimulationDE'
$pathVERS='E:ScriptsBibliothequePowershellMelanieGUI-ProgTestQASimulationVERS'
$pathDBQcust01='E:ScriptsBibliothequePowershellMelanieGUI-ProgTestQASimulationDEDBQcust01Sets'
$pathQA14='E:ScriptsBibliothequePowershellMelanieGUI-ProgTestQASimulationDEQA14Sets'
$pathQA15='E:ScriptsBibliothequePowershellMelanieGUI-ProgTestQASimulationDEQA15Sets'
$pathSERIE = 'E:ScriptsBibliothequePowershellMelanieGUI-ProgTestQASimulationDEQA14Sets' #simulation
$pathSIMULATION = 'E:ScriptsBibliothequePowershellMelanieGUI-ProgTestQASimulation'
#endregion ----
#lists of series
$listQA14 = Get-ChildItem $pathQA14 -Directory -Name
$listQA15 = Get-ChildItem $pathQA15 -Directory -Name
$listDBQcust01 = Get-ChildItem $pathDBQcust01 -Directory -Name
$FolderLists = Get-ChildItem $pathSIMULATIONListes -Include *.txt -Name
#------------- TAB1 ------------------
#region /// ComboBox 1 : DE folder
$FoldersCBB1 = @('--- choisir ---','DBQcust01','QA14','QA15')
$Tab1CBB1.SelectedItem = '--- choisir ---'
foreach ($Folder in $FoldersCBB1) {
$Tab1CBB1.Items.Add($Folder)
}
#endregion
#region /// ComboBox 2 : DE SERIE (éventuellement changer pour SWITCH)
$Tab1CBB1.add_SelectionChanged({
$Selection = ($Tab1CBB1.SelectedItem.ToString())
if ($Selection -eq 'QA14')
{
$Tab1CBB2.Items.Clear()
$Tab1CBB2.Items.Add('--- choisir une série sous QA14 ---')
$Tab1CBB2.SelectedItem = '--- choisir une série sous QA14 ---'
foreach ($Serie in $listQA14) {
$Tab1CBB2.Items.Add($Serie)
}
}
elseif ($Selection -eq 'QA15')
{
$Tab1CBB2.Items.Clear()
$Tab1CBB2.Items.Add('--- choisir une série sous QA15 ---')
$Tab1CBB2.SelectedItem = '--- choisir une série sous QA15 ---'
foreach ($Serie in $listQA15) {
$Tab1CBB2.Items.Add($Serie)
}
}
elseif ($Selection -eq 'DBQcust01')
{
$Tab1CBB2.Items.Clear()
$Tab1CBB2.Items.Add('--- choisir une série sous DBQcust01 ---')
$Tab1CBB2.SelectedItem = '--- choisir une série sous DBQcust01 ---'
foreach ($Serie in $listDBQcust01) {
$Tab1CBB2.Items.Add($Serie)
}
}
})
#endregion
#region /// ComboBox 3 : VERS folder
$FoldersCBB3 = @('SPMT','OTHER')
$Tab1CBB3.Items.Add('--- choisir ---')
$Tab1CBB3.SelectedItem = '--- choisir ---'
foreach ($Folder in $FoldersCBB3) {
$Tab1CBB3.Items.Add($Folder)
}
#endregion
#region /// TextBox 4 : VERS Série
#à venir (essayer de mettre le contenu des sélections des cbb automatiquement dans le textbox)
$Tab1TB4.text = "SÉRIE ÉQUIPE"
#endregion
#region ///// HERE //// Bouton Creation /////////
$Tab1BTNcreation.Add_Click({
$SelectionCBB1 = ($Tab1CBB1.SelectedValue)
$SelectionCBB2 = ($Tab1CBB2.SelectedValue)
$SelectionCBB3 = ($Tab1CBB3.SelectedValue)
$SelectionTB4 = ($Tab1TB4.Text)
$CheckedBoxes = get-variable $Tab1CB* | Where-object {$_.IsChecked = $true}
$CheckBoxesNames= $CheckedBoxes.Name
New-item -ItemType Directory -Path "$pathVERS$SelectionCBB3" -Name "$SelectionTB4"
Copy-Item -Path "$pathDE$SelectionCBB1$SelectionCBB2" -include $CheckedBoxesNames -Recurse -Destination "$pathVERS$SelectionCBB3$SelectionTB4"
})
#endregion
#------------- TAB2 ------------------
#------------- TAB3 ------------------
$Window.ShowDialog() | out-null
Комментарии:
1. Обычно я использую что-то вроде
if ($CBbin1.checked -eq $true){ do this} else { do this}
2. Да, я тоже пробовал это. Проблема здесь: когда я использую оператор IF для каждого из них, когда я нажимаю свою кнопку, он автоматически проверяет все флажки, хотя я проверил только пару из них. Если я использую ELSEIF, он учитывает только IF, поэтому здесь первый…. Каталог New-item -ItemType -Путь «$pathVERS $SelectionCBB3» -Имя «$SelectionTB4», если ($Tab1CBbin. IsChecked = $true) { copy-item -Path «$pathDE$SelectionCBB1sets$SelectionCBB2Bin» -Recurse -Destination «$pathVERS$SelectionCBB3 $SelectionTB4» } ElseIf ($Tab1CBexport. IsChec…
3.
($Tab1CBbin.IsChecked = $true)
присваивает свойства. Это должно быть($Tab1CBbin.IsChecked -eq $True)
. Тем не менее, я бы попытался удалитьelseif
. Не используйтеelse
, простоif
, перерывif
, опять же, нетelse
. Закройте этот оператор if сelse
помощью в конце и оставьте его пустым или закомментируйте строку. .
Ответ №1:
Есть кое-что, что я нашел после прохождения этого скрипта.
Изменения приведены ниже.
Ваша вторая строка Add-type -Assembly System.Windows.Forms
предназначена для Windows Forms, а не для WPF. Это должно гласить
Add-Type -AssemblyName PresentationCore, PresentationFramework
Вы не можете смешивать и сопоставлять здесь, это вызывает проблемы позже. Если вы хотите использовать формы, тогда используйте формы. Если вы хотите использовать WPF, то используйте WPF, не смешивайте их. 🙂
Удалите строки 2-5, заменив строку 2 на приведенную выше.
В строке 287
$CheckedBoxes = get-variable $Tab1CB* | Where-object {$_.IsChecked = $true}
=
Знак присваивает переменной «значение» и не выполняет то, что -eq
делает, что вы хотели бы использовать в этом случае при проверке данных.
$CheckedBoxes = get-variable $Tab1CB* | Where-object {$_.IsChecked -eq $true}
Комментарии:
1. О боже! Большое вам спасибо! Единственной проблемой было = вместо -eq ! Спасибо, что нашли время, чтобы объяснить первые строки о Forms — WPF, я все еще новичок в этом. Кроме того, что касается строк, касающихся -Directory -Name, вы имели в виду, что было бы лучше написать -Include Directory -Name ? Я знаю, что это казалось бы более логичным, но я уже пробовал это, и это не сработало. Но имя каталога работало. Еще раз спасибо!
2. Держу пари, мы все новички в какой-то момент. Я, безусловно, не профессионал. В основном методом проб и ошибок. Я отредактировал свой ответ, чтобы он был более кратким и доходил до корня проблемы, с которой вы столкнулись. Тем не менее, если -Включить имя каталога -работает с ним. Я не был уверен. Также удалено из ответа, поскольку это было предположение.
3. Добро пожаловать. Если это ответило на ваш вопрос, можете ли вы пометить его как правильный? 🙂
4. Где я вижу эту опцию?