2009-09-30 1 views
0

это, вероятно, немного напряжено, и я не уверен, что это вообще возможно. Но в основном, я пытаюсь создать небольшое приложение, которое содержит много кода PowerShell, который я хочу запустить в простой ситуации.VB.NET - использование текстового файла как источника для меню и текстовых полей

Мне удалось создать все самостоятельно, и оно действительно работает. Но весь код PowerShell жестко закодирован вручную, и это дает мне огромный недостаток.

Что я думал о создании динамической структуры, где я могу прочитать несколько текстовых файлов (возможно, много текстовых файлов) и использовать их в качестве источника как для списков combobox, так и для richtextbox, которые провоцируют строка, используемая для запуска в PowerShell.

Я думал, что-то вроде этого:

Комбобокс - "Выберите командлет" - Использование "menucode.txt" в качестве источника RichTextBox - Использование "code.txt" в качестве источника

Но, дело в том, , Фрагментам Powershell нужно несколько аргументов, чтобы они могли работать. Итак, у меня есть несколько comboboxes и несколько текстовых полей, которые предоставляют входные данные для этих аргументов. И это делается вручную, как сейчас. Поэтому переписывание этого небольшого приложения должно также искать текстовый файл для некоторых ключевых слов и иметь сводки и текстовые поля для замены этих ключевых слов. И я не знаю, как это сделать.

Итак, будет ли это требовать много текстовых файлов? Или я могу использовать один текстовый файл и отдельно отделять фрагменты командлета PowerShell? Как какой-то заголовок?


Прямо сейчас, у меня есть этот код на EventHandler (ComboBox_SelectedIndexChanged)

 If ComboBoxFunksjon.Text = "Set attribute" Then 
     TxtBoxUsername.Visible = True 

    End If 

    If chkBoxTextfile.Checked = True Then 
     If txtboxBrowse.Text = "" Then 
      MsgBox("You haven't choses a textfile as input for usernames") 
     End If 
     LabelAttribute.Visible = True 
     LabelUsername.Visible = False 
     ComboBoxAttribute.Visible = True 
     TxtBoxUsername.Visible = False 

     txtBoxCode.Text = "$users = Get-Content " & txtboxBrowse.Text & vbCrLf & "foreach ($a in $users)" & vbCrLf & "{" & vbCrLf & "Set-QADUser -Identity $a -ObjectAttributes @{" & ComboBoxAttribute.SelectedItem & "='" & TxtBoxValue.Text & "'}" & vbCrLf & "}" 

     If ComboBoxAttribute.SelectedItem = "Outlook WebAccess" Then 
      TxtBoxValue.Visible = False 
      CheckBoxValue.Visible = True 
      CheckBoxValue.Text = "OWA Enabled?" 
      txtBoxCode.Text = "$users = Get-Content " & txtboxBrowse.Text & vbCrLf & "foreach ($a in $users)" & vbCrLf & "{" & vbCrLf & "Set-CASMailbox -Identity $a -OWAEnabled" & " " & "$" & CheckBoxValue.Checked & " '}" & vbCrLf & "}" 
     End If 

     If ComboBoxAttribute.SelectedItem = "MobileSync" Then 
      TxtBoxValue.Visible = False 
      CheckBoxValue.Visible = True 
      CheckBoxValue.Text = "MobileSync Enabled?" 

      Dim value 
      If CheckBoxValue.Checked = True Then 
       value = "0" 
      Else 
       value = "7" 
      End If 

      txtBoxCode.Text = "$users = Get-Content " & txtboxBrowse.Text & vbCrLf & "foreach ($a in $users)" & vbCrLf & "{" & vbCrLf & "Set-QADUser -Identity $a -ObjectAttributes @{msExchOmaAdminWirelessEnable='" & value & " '}" & vbCrLf & "}" 
     End If 

    Else 
     LabelAttribute.Visible = True 
     LabelUsername.Visible = True 
     ComboBoxAttribute.Visible = True 

     txtBoxCode.Text = "Set-QADUser -Identity " & TxtBoxUsername.Text & " -ObjectAttributes @{" & ComboBoxAttribute.SelectedItem & "='" & TxtBoxValue.Text & " '}" 

     If ComboBoxAttribute.SelectedItem = "Outlook WebAccess" Then 
      TxtBoxValue.Visible = False 
      CheckBoxValue.Visible = True 
      CheckBoxValue.Text = "OWA Enabled?" 
      txtBoxCode.Text = "Set-CASMailbox " & TxtBoxUsername.Text & " -OWAEnabled " & "$" & CheckBoxValue.Checked 
     End If 

     If ComboBoxAttribute.SelectedItem = "MobileSync" Then 
      TxtBoxValue.Visible = False 
      CheckBoxValue.Visible = True 
      CheckBoxValue.Text = "MobileSync Enabled?" 

      Dim value 
      If CheckBoxValue.Checked = True Then 
       value = "0" 
      Else 
       value = "7" 
      End If 

      txtBoxCode.Text = "Set-QADUser " & TxtBoxUsername.Text & " -ObjectAttributes @{msExchOmaAdminWirelessEnable='" & value & "'}" 
     End If 

    End If 

Теперь этот фрагмент кода выше позволяет мне либо использовать текстовый файл в качестве источника для каждого пользователя, используемого в фрагмент powershell. Просто чтобы вы знали :) И я знаю, это, вероятно, закодировано так же глупо, как и получается. Но это работает! :)

ответ

0

Это, вероятно, будет довольно ужасно отлаживать, когда вы отсутствуете от него в течение года и пытаетесь выяснить, как он висит вместе, но если вы это сделаете, я бы предположил, что это может быть подходящим временем для использования XML, так как вы можете легко создать хорошую структуру для файлов, что будет довольно легко понять.

<commands> 
    <command> 
     <name>Cmd1</name> 
     <buttonText>NiceName</buttonText> 
     <parameters> 
      <parameter>textBox1</parameter> 
      <parameter>textBox2</parameter> 
      <parameter>comboBox1</parameter> 
     </parameters> 
     <code>your code here</code> 
    </command> 
    <command> 
    ... 
    </command> 
</commands> 

Вы должны быть осторожны, если ваш код сценария содержит любые символы, которые могут помешать работе с xml.