这可能有点紧张,我不确定这是否可行。 但基本上,我正在尝试创建一个包含大量PowerShell代码的小应用程序,我希望在这个代码中轻松运行。
我自己创造了一切,但它确实有效。但是所有PowerShell代码都是手动硬编码的,这给我带来了巨大的劣势。
我在想的是创建某种动态结构,我可以读取几个文本文件(可能有大量的文本文件)并将它们用作组合框和richtextbox的源代码,它们作为字符串提供曾经在PowerShell中运行。
我在想这样的事情:
Combobox - “选择cmdlet” - 使用“menucode.txt”作为来源 Richtextbox - 使用“code.txt”作为源
但事实是,Powershell片段需要一些参数才能使它们发挥作用。 所以我有几个组合框和一些文本框,它们为这些参数提供输入。这是手动完成的,就像现在一样。因此,重写这个小应用程序还应该在文本文件中搜索一些关键字,并使用组合框和文本框来替换这些关键字。我不知道该怎么做。
那么,这需要大量的文本文件吗?或者我可以使用一个文本文件并将每个PowerShell cmdlet片段与某些内容分开吗?像某种标题?
现在,我在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 :(得分: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的字符,你必须要小心。