1

異なる部門のソフトウェアを自動インストールするスクリプトを作成しています。アイデアは、あなたが特定の部門を選択することができますドロップダウンリストを持つことであるアーキテクチャとソフトウェアの選択肢の改善

Script Gui Example

:これは、現在、どのように見えるかです。 "Marketing"を選択した後、プログラマーはx86またはx64アーキテクチャー用Chechboxesと、この部門用にインストールする必要があるProgrammeを自動化する必要があります。 (だから私は、PowerShellは、部門を選択した後呼び出すことができますどのようなテンプレートを構築したいと思います。

これまでのところ、私はPowerShellがアーキテクチャを求めると32を与えている

$wmiquery = (Get-WmiObject -Class Win32_Processor | Select-Object AddressWidth) 

$wmiquery = $wmiquery.AddressWidth 

[string]$wmiquery2 = $wmiquery 

write-host $wmiquery2 

「Architecturチュー」を構築します。。または文字列として64 previusスクリプトがこのようにそれを使用されて

switch ($wmiquery2) { 
    "64" { 
     x64 
     x86_x64 
    } 
    "32" { 
     x86 
     x86_x64 
    } 


function x64 { 
    Copy-Item -Path "#" -Destination "#" 

    Start-Process "#" /qn -Wait 

    Remove-Item -Path "#" 
} 

function x32 { 
    Copy-Item -Path "#" -Destination "#" 

    Start-Process "#" /qn -Wait 

    Remove-Item -Path "#" 
} 

しかし、私はこの文句を言わない作業にこの時間を推測:/

を私はまた、テスト部分を構築GUIの例を示します。

###Windowloader 
[void][reflection.assembly]::Load('mscorlib') 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
$objForm = New-Object System.Windows.Forms.Form 

### Height and width of window 
$objForm = New-Object System.Windows.Forms.Form 
$objForm.width = 400 
$objForm.height = 900 
$objForm.StartPosition = "CenterScreen" 

### Set the font of the text to be used within the form 
    $objFont = New-Object System.Drawing.Font("Times New Roman",09) 
    $objForm.Font = $Font 


### set objform icon 
$objform.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon("#") 


### set objform text 
$objForm.Text = "Installmanager" 



###Drowdown position, height, list 
$objLabel = New-Object System.Windows.Forms.Label 
$objLabel.Location = New-Object System.Drawing.Size(40,20) 
$objLabel.Size = New-Object System.Drawing.Size(280,20) 
$objLabel.Text = "Treffen Sie bitte eine Auswahl:" 
$objForm.Controls.Add($objLabel) 

$objCombobox = New-Object System.Windows.Forms.Combobox 
$objCombobox.Location = New-Object System.Drawing.Size(10,40) 
$objCombobox.Size = New-Object System.Drawing.Size(260,20) 

[void] $objCombobox.Items.Add("IT") 
[void] $objCombobox.Items.Add("Controlling") 
[void] $objCombobox.Items.Add("Redaktion") 
[void] $objCombobox.Items.Add("Disposition") 
[void] $objCombobox.Items.Add("Grafik") 
[void] $objCombobox.Items.Add("Redaktion(Schnitt)") 
[void] $objCombobox.Items.Add("Sekreteriat") 

$objCombobox.Height = 70 
$objForm.Controls.Add($objCombobox) 
$objForm.Topmost = $True 

$objForm.Add_Shown({$objForm.Activate()}) 

$x 
### Checkboxdescrption 
     ###Textbox 32 Bit 
     $obj32Bit = New-Object System.Windows.Forms.Label 
     $obj32Bit.Location = New-Object System.Drawing.Size(10,100) 
     $obj32Bit.Size = New-Object System.Drawing.Size(40,20) 
     $obj32Bit.Text = "32 Bit" 
     $obj32Bit.Name = "32 Bit" 
     $objForm.Controls.Add($obj32Bit) 

     ###Textbox 64 Bit 
     $obj64Bit = New-Object System.Windows.Forms.Label 
     $obj64Bit.Location = New-Object System.Drawing.Size(50,100) 
     $obj64Bit.Size = New-Object System.Drawing.Size(40,20) 
     $obj64Bit.Text = "64 Bit" 
     $obj64Bit.Name = "64 Bit" 
     $objForm.Controls.Add($obj64Bit) 

     ###Textbox application 
     $objProgrammText = New-Object System.Windows.Forms.Label 
     $objProgrammText.Location = New-Object System.Drawing.Size(100,100) 
     $objProgrammText.Size = New-Object System.Drawing.Size(70,20) 
     $objProgrammText.Text = "Anwendung" 
     $objProgrammText.Name = "Programm" 
     $objForm.Controls.Add($objProgrammText) 


     ### 7zip 
     $obj7zipText = New-Object System.Windows.Forms.Label 
     $obj7zipText.Location = New-Object System.Drawing.Size(100,128) 
     $obj7zipText.Size = New-Object System.Drawing.Size(300,20) 
     $obj7zipText.Text = "7Zip" 
     $obj7zipText.Name = "7Zip" 
     $objForm.Controls.Add($obj7zipText) 


     ###Java 
     $objJava = new-object System.Windows.Forms.checkbox 
     $objJava.Location = new-object System.Drawing.Size(20,145) 
     $objJava.Size = new-object System.Drawing.Size(40,50) 
     $objJava.Checked = $false 
     $objForm.Controls.Add($objJava) 



    ###Checkbox Programm 32 Bit 
    $obj7zip = new-object System.Windows.Forms.checkbox 
    $obj7zip.Location = new-object System.Drawing.Size(20,110) 
    $obj7zip.Size = new-object System.Drawing.Size(40,50) 
    $obj7zip.Checked = $false 
    $objForm.Controls.Add($obj7zip) ** 


    ###Checkbox Programm 64 Bit 
    $obj7zip64 = new-object System.Windows.Forms.checkbox 
    $obj7zip64.Location = new-object System.Drawing.Size(60,110) 
    $obj7zip64.Size = new-object System.Drawing.Size(40,50) 
    $obj7zip64.Checked = $false 
    $objForm.Controls.Add($obj7zip64) 

    ###Java 
    $objJava = new-object System.Windows.Forms.checkbox 
    $objJava.Location = new-object System.Drawing.Size(60,145) 
    $objJava.Size = new-object System.Drawing.Size(40,50) 
    $objJava.Checked = $false 
    $objForm.Controls.Add($objJava) 


### OK Button End 
$OKButton = New-Object System.Windows.Forms.Button 
$OKButton.Location = New-Object System.Drawing.Size(75,700) 
$OKButton.Size = New-Object System.Drawing.Size(75,23) 
$OKButton.Text = "OK" 
$OKButton.Name = "OK" 
$OKButton.DialogResult = "OK" 
$OKButton.Add_Click({$objForm.Close()}) 
$objForm.Controls.Add($OKButton) 



### OK Button Top 
$Button = New-Object System.Windows.Forms.Button 
$Button.Location = New-Object System.Drawing.Point(290, 40) 
$Button.Size = New-Object System.Drawing.Size(80, 23) 
$Button.Text = "OK" 
$Button.add_Click(
{ 
    $obj7zip64.Checked = $false 
    $obj7zip32.Checked = $false 
    $dropdown = $objCombobox.SelectedItem.ToString() 
    if ($dropdown -eq "Controlling") { 
     $obj7zip64.Checked = $true 
    #if ($dropdown -eq "Sekretariat") { 
     #$obj7zip64.Checked = $false 

#} 
} 
} 
) 


$objForm.Controls.Add($Button) 


###Shows Window 
[void] $objForm.ShowDialog() 

最後のボタン(### OKボタントップ)では、私は例を書いてこれまでのところ動作します。しかし、もしあなたが20-30の異なるソフトウェアのためにこのように構築すれば、私はそのような巨大で混乱したリストを手に入れます。

多分あなたは私のためにこれを管理する方法を持っています。

答えて

0

環境変数$env:ProgramW6432をインストールに使用できると思うので、アーキテクチャを一切決定する必要はなく、プログラムごとに1つのチェックボックスだけが必要です。

# .... 

[void] $objCombobox.Items.Add("IT") 
[void] $objCombobox.Items.Add("Controlling") 
[void] $objCombobox.Items.Add("Redaktion") 
[void] $objCombobox.Items.Add("Disposition") 
[void] $objCombobox.Items.Add("Grafik") 
[void] $objCombobox.Items.Add("Redaktion(Schnitt)") 
[void] $objCombobox.Items.Add("Sekreteriat") 

$objCombobox.Height = 70 
$objForm.Controls.Add($objCombobox) 
$objForm.Topmost = $True 

$objForm.Add_Shown({$objForm.Activate()}) 


$programList = @(
    '7-Zip' 
    'Java' 
    'Outlook' 
    'SqlServer' 
    'Visual Studio' 
    'Skype for Business' 
    'Notepad++' 
    'Chrome' 
    'IIS' 
) 

### Checkboxdescrption 
###Textbox 32 Bit 
$obj32Bit = New-Object System.Windows.Forms.Label 
$obj32Bit.Location = New-Object System.Drawing.Size(10,100) 
$obj32Bit.Size = New-Object System.Drawing.Size(40,20) 
$obj32Bit.Text = "32 Bit" 
$obj32Bit.Name = "32 Bit" 
$objForm.Controls.Add($obj32Bit) 

###Textbox 64 Bit 
$obj64Bit = New-Object System.Windows.Forms.Label 
$obj64Bit.Location = New-Object System.Drawing.Size(50,100) 
$obj64Bit.Size = New-Object System.Drawing.Size(40,20) 
$obj64Bit.Text = "64 Bit" 
$obj64Bit.Name = "64 Bit" 
$objForm.Controls.Add($obj64Bit) 

###Textbox application 
$objProgrammText = New-Object System.Windows.Forms.Label 
$objProgrammText.Location = New-Object System.Drawing.Size(100,100) 
$objProgrammText.Size = New-Object System.Drawing.Size(70,20) 
$objProgrammText.Text = "Anwendung" 
$objProgrammText.Name = "Programm" 
$objForm.Controls.Add($objProgrammText) 


$height = 128 
$programList | ForEach-Object { 

    $currentObj = New-Object System.Windows.Forms.Label 
    $currentObj.Location = New-Object System.Drawing.Size(100, $height) 
    $currentObj.Size = New-Object System.Drawing.Size(300,20) 
    $currentObj.Text = $_ 
    $currentObj.Name = $_ 
    $objForm.Controls.Add($currentObj) 


    ###Checkbox Programm 32 Bit 
    $currentObj32 = new-object System.Windows.Forms.checkbox 
    $currentObj32.Location = new-object System.Drawing.Size(20,($height -18)) 
    $currentObj32.Size = new-object System.Drawing.Size(40,50) 

    $currentObj32.Checked = $false 
    $objForm.Controls.Add($currentObj32) 


    ###Checkbox Programm 64 Bit 
    $currentObj64 = new-object System.Windows.Forms.checkbox 
    $currentObj64.Location = new-object System.Drawing.Size(60,($height -18)) 
    $currentObj64.Size = new-object System.Drawing.Size(40,50) 
    $currentObj64.Checked = $false 
    $objForm.Controls.Add($currentObj64) 

    $height += 33 

} 



    ### OK Button End 
    $OKButton = New-Object System.Windows.Forms.Button 
    $OKButton.Location = New-Object System.Drawing.Size(75,700) 
    $OKButton.Size = New-Object System.Drawing.Size(75,23) 
    $OKButton.Text = "OK" 
    $OKButton.Name = "OK" 
    $OKButton.DialogResult = "OK" 
    $OKButton.Add_Click({$objForm.Close()}) 
    $objForm.Controls.Add($OKButton) 

#.... 

出力::お使いのソフトウェアのリストについては、私は配列を作成し、動的にGUIを作成します

先端をありがとう

enter image description here

+0

を、しかし、私は、両方のチェックボックスを持っている必要がありますたとえば、ハードウェアの低いシステムでは32ビットを手動で選択できます。 – chrystalf

+0

ねえ、ありがとう!これは知っているいくつかのクールな新しいものです:) – chrystalf

+0

私はあなたの大きなダイナミックメソッドで私のための問題を考え出しました。私のバージョンでは、 "$ obj7zip.Checked = $ false/true"を使用してGUIのステータスを変更しました。今はダイナミックな方法では、私はもうこのオプションを持っていません。私の考えは、「ForEach-Object」を数えて、それが私に与えた数字で動作するかもしれないということでした。しかし、これは解決策として私のために複雑に思えます。チェックボックスをtrueまたはfalseに操作するために統計を戻す方法はありますか? – chrystalf