2016-06-11 21 views
0

このスクリプトを実行して、appcmd.exeを使用してIPをホワイトリストに登録しています。何らかの理由powershellでappcmd.exeを使用してIPをホワイトリストに登録しますか?

import-module WebAdministration 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

$Form = New-Object System.Windows.Forms.Form  
$Form.Size = New-Object System.Drawing.Size(600,400) 
$type="Allow" 

function SaveConfig 
{ 

if($Dropdownbox.text -eq "allow"){ 
$allowed = "true" 
} 
else{ 
$allowed = "false" 
} 
$outputbox.text = "IP " + $ip.text + " is Whitelisted for the URL " + $url.text + " with subnet mask as " + $mask.text + ". " + "User wants to " + $Dropdownbox.text + " this." 

<# $url = "capitaliq/ciqdotnet/clientadmin/clientmgr.html" 
$ip = "192.168.1.1" #> 

$url.text 
Set-Location "C:\Windows\System32\inetsrv"; .\appcmd.exe set config "$url.text" -section:system.webServer/security/ipSecurity /+"[ipAddress='$ip.text',allowed='True',subnetMask='$mask.text']" /commit:apphost 
$ip.text 

$url.text = "" 
$ip.text = "" 
$dropdownbox.text = "" 
} 

function close{ 
$Form.close() 
} 

$url_label = New-Object System.Windows.Forms.Label 
$url_label.Location = New-Object System.Drawing.Size(40,20) 
$url_label.Size = New-Object System.Drawing.Size(280,20) 
$url_label.Text = "Please enter the URL" 
$Form.Controls.Add($url_label) 

$url = New-Object System.Windows.Forms.TextBox 
$url.Location = New-Object System.Drawing.Size(40,50) 
$url.Size = New-Object System.Drawing.Size(260,60) 
$Form.Controls.Add($url) 

$ip_label = New-Object System.Windows.Forms.Label 
$ip_label.Location = New-Object System.Drawing.Size(40,110) 
$ip_label.Size = New-Object System.Drawing.Size(280,20) 
$ip_label.Text = "Please enter the IP address" 
$Form.Controls.Add($ip_label) 

$ip = New-Object System.Windows.Forms.TextBox 
$ip.Location = New-Object System.Drawing.Size(40,140) 
$ip.Size = New-Object System.Drawing.Size(260,60) 
$Form.Controls.Add($ip) 

$DropDownBox = New-Object System.Windows.Forms.ComboBox 
$DropDownBox.Location = New-Object System.Drawing.Size(40,80) 
$DropDownBox.Size = New-Object System.Drawing.Size(180,20) 
$DropDownBox.DropDownHeight = 400 
$Form.Controls.Add($DropDownBox) 

[email protected]("Allow","Deny") 

foreach ($wks in $wksList) 
{ 
$DropDownBox.Items.Add($wks) 
} 

$mask_label = New-Object System.Windows.Forms.Label 
$mask_label.Location = New-Object System.Drawing.Size(40,170) 
$mask_label.Size = New-Object System.Drawing.Size(280,20) 
$mask_label.Text = "Please enter the Subnet Mask" 
$Form.Controls.Add($mask_label) 

$mask = New-Object System.Windows.Forms.TextBox 
$mask.Location = New-Object System.Drawing.Size(40,200) 
$mask.Size = New-Object System.Drawing.Size(260,60) 
$mask.Text="255.255.255.0" 
$Form.Controls.Add($mask) 


$Button = New-Object System.Windows.Forms.Button 
$Button.Location = New-Object System.Drawing.Size(40,230) 
$Button.Size = New-Object System.Drawing.Size(110,50) 
$Button.Text = "Save" 
$Button.Add_Click({SaveConfig}) 
$Form.Controls.Add($Button) 

$Button = New-Object System.Windows.Forms.Button 
$Button.Location = New-Object System.Drawing.Size(170,230) 
$Button.Size = New-Object System.Drawing.Size(110,50) 
$Button.Text = "Close" 
$Button.Add_Click({Close}) 
$Form.Controls.Add($Button) 

$outputBox = New-Object System.Windows.Forms.TextBox 
$outputBox.Location = New-Object System.Drawing.Size(350,50) 
$outputBox.Size = New-Object System.Drawing.Size(200,200) 
$outputBox.MultiLine = $True 
$outputBox.ReadOnly= $True 
$Form.Controls.Add($outputBox) 

$Form.Add_Shown({$Form.Activate()}) 
[void] $Form.ShowDialog() 

、コード行が実行取得されない:

Set-Location "C:\Windows\System32\inetsrv"; .\appcmd.exe set config "$url.text" -section:system.webServer/security/ipSecurity /+" [ipAddress='$ip.text',allowed='True',subnetMask='$mask.text']" /commit:apphost 

が取り付けスクリプトのみ所望ず、何もする位置を設定していることを示す画像です。この行の前後にある$ url.textと$ ip.textも実行されません。

enter image description here

答えて

1

それは最も確かにそれは、独自のスコープで実行しているので、あなただけのClickイベントからの出力が表示されない、appcmd.exeを実行します。

appcmd.exeは、二重引用符で囲まれた文字列の内側に$ip.textを展開しようとすると失敗する可能性が最も高いです。パーサは文字列に全体$ipオブジェクトを変換し、次のappcmd.exe引数に得リテラル文字列「の.text」を、連結されます。

/+" [ipAddress='System.Windows.Forms.TextBox, Text: .text',allowed='True',subnetMask='System.Windows.Forms.TextBox, Text: .text']" 

代わりに、部分式($())で$ip.Text$mask.Text囲み:

.\appcmd.exe set config "$($url.Text)" -section:system.webServer/security/ipSecurity /+" [ipAddress='$($ip.Text)',allowed='True',subnetMask='$($mask.Text)']" /commit:apphost 
+0

set locationコマンドの直前に印刷しようとしている$ url.textが印刷されないのはなぜですか? –

+0

'Write-Host $ url.text' –

関連する問題