2017-06-06 6 views
1

ユーザーに値を入力し、ドロップダウンリストから選択できるようにするためのWPF GUIを備えたPowerShellスクリプトがあります。それはうまくいくが、一部のユーザーはそれを迂回して手動でスクリプトを実行したい(スクリプトに独自の値を直接入力する)。PowerShell GUIを表示または無視するブールフラグ

は今の構造は次のとおりです。原因となる、彼らはfalseに変更することができ、スクリプトの先頭に

$UseGUI = $true

#A bunch of XML and PowerShell that generates the GUI 

$WPFbutton.Add_Click({ 

#Variables that get populated by the GUI 

#The rest of the script 

}) 

は、私のようなものを追加したいですXMLとボタンのクリックラインを無視するスクリプト。

私は$UseGUIに基づいてifステートメントでXMLのものを囲むことができると考えていましたが、それはボタンのクリック部分で助けになりません。

私が知っていることは、$UseGUIに基づく別のif文にスクリプト全体をコピーして貼り付けることです。問題はスクリプトのサイズを2倍にすることであり、すでに2000行になっています。

+0

をバイパス使用するにはGUIでプロンプトを表示する前に、あなたのコードの良い塊をサウンドから書き直す必要があります。 – ConnorLSW

答えて

1

ひとつのアイデアは、スクリプトを使用している人は、GUIを使用したいか、自分で正しい情報を提供しているかどうかを確認するための機能とパラメータを使用することです:

param 
(
    [Parameter(ParameterSetName = 'Interface', 
       Mandatory = $true, 
       Position = 0)] 
    [switch] 
    $UseGUI, 

    [Parameter(ParameterSetName = 'CommandLine', 
       Mandatory = $true, 
       Position = 0)] 
    [ValidateNotNullOrEmpty()] 
    [string] 
    $Person 
) 

function SayHelloTo ($User) 
{ 
    Write-Output "Hello $User" 
} 

if ($UseGUI) 
{ 
    #A bunch of XML and PowerShell that generates the GUI 

    $WPFbutton.Add_Click({ 

     #Variables that get populated by the GUI 

     #The rest of the script 

     $variable = "jdope" 

     SayHello -User $variable 

    }) 
} 
else 
{ 
    SayHello -User $Person 
} 

パラメータセットは、スクリプトを防ぐことができますUseGUI$Trueであるかどうかをチェックするときに、GUIを表示して(関数を呼び出すための入力を取得する)か、入力を使って関数を呼び出すことがわかります。

GUIがPerson情報を提供するために-UseGUI

.\MyPowerShellWpfScript -UseGUI 

でスクリプトを呼び出して、あなたは、オプションのparamsを追加してみてください、そして、彼らがnullかどうかを確認する必要がありGUIを使用

.\MyPowerShellWpfScript -Person "jdope" 
+1

私は原則としてアプローチが好きですが、そうするべき理由がない限り(そして少数しかありません)、Write-Hostを使用しないでください。なぜ '-UseGUI'は_pipeline_入力をサポートする必要がありますか?何かあれば、 '-Person'でなければなりませんが、どちらの場合でも' process'ブロックが必要です。ちょっとした部署から:_interface_は_interactive_と同じではありません。 – mklement0

+0

@ mklement0 Write-Hostの何が問題なのですか?私は出力のためにスクリプトのステータスを与えるためにそれをかなり使用します。 – jdope

+1

危険なのは、初心者がPowerShellで 'Write-Host'を出力する方法(従来のシェルの' echo 'と似ています)であると思うのは間違いです。この混乱は非常に一般的であり、私は避ける価値があると思います。 – mklement0

関連する問題